Nesting Shapes using a Collection

Former Member
Former Member

I'm trying to build a small nesting Function inside of my current working system. What I am having trouble with is that when I add the third shape to the collection and try to position it based on the previous shape added to the collection, it still positions it based on the very first shape. What I end up with is the original in the original position and the copies stacked on top of one another. (I would be particularly interested in what GDG_John has to say about it since I have been using his awesome nesting macro for sometime.)

Function ArrangeImages(ByRef scol1 As Collection, ByRef sA, sB As Shape)
Dim i, ii As Long

i = scol1.Count

If i = 1 Then

Set sB = scol1.Item(i)

End If

If scol1.Count > 1 Then

Set sA = sB
Set sB = scol1.Item(i)

sB.SetPosition sA.PositionX, sA.PositionY + (sA.SizeHeight / 2) + 
(sB.SizeHeight / 2) + 0.15
End If

End Function
Parents
No Data
Reply
  • Hi bud,

    Why not use a shaperange(collection) instead of a generic vba collection? It'll give you access to more of Corels built-in functionality.

    For my nesting subs I try to structure the variables I need at the start of the function; using Moving Datums, Static X starting and ending positions etc

    If its a simple vertical stack you could use something like below:

    Private Function StackNest()
    
    Dim YDatum As Double, XDatum As Double
    Dim Padding As Double: Padding = 0.15
    Dim SR As ShapeRange, S As Shape
    Dim I As Long
    
        Set SR = ActiveSelectionRange
        Set S = SR(1)
        XDatum = S.CenterX
        YDatum = S.BottomY - Padding
        
        For I = 2 To SR.Shapes.Count
            Set S = SR(I)
            S.SetPositionEx cdrTopMiddle, XDatum, YDatum
            XDatum = S.CenterX
            YDatum = S.BottomY - Padding
            Set S = Nothing
        Next I
    
Children