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
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