Jump to content

Draw Polyline with x,y, & z coordinates from collection of arrays


Jalen Weir

Recommended Posts

Background:

 

I receive a .dxf with points. These points are arrayed in x,y,& z coordinates. I have extracted the coordinates into collections and I am trying to draw a polyline using those coordinates as vertices. It is important that the z coordinate be included. All points differ in their x,y,z coordinates.

 

The collection is a collection of arrays (0 to 2).

 

This was my attempt to call vertices straight from the collection:

 

ThisDrawing.ActiveLayer = newLayer
Set pLineA = ThisDrawing.ModelSpace.Add3DPoly(pointCollA.Item(1), pointCollA.Item(2), pointCollA.Item(3), _
                                               pointCollA.Item(4), pointCollA.Item(5), pointCollA.Item(6), _
                                               pointCollA.Item(7), pointCollA.Item(, pointCollA.Item(9), _
                                               pointCollA.Item(10), pointCollA.Item(11), pointCollA.Item(12), _
                                               pointCollA.Item(13), pointCollA.Item(14), pointCollA.Item(15), _
                                               pointCollA.Item(16), pointCollA.Item(17), pointCollA.Item(18), _
                                               pointCollA.Item(19), pointCollA.Item(20), pointCollA.Item(21), _
                                               pointCollA.Item(22), pointCollA.Item(23), pointCollA.Item(24), _
                                               pointCollA.Item(25))

ThisDrawing.ActiveLayer = newLayer1
Set pLineB = ThisDrawing.ModelSpace.Add3DPoly(pointCollB.Item(1), pointCollB.Item(2), pointCollB.Item(3), _
                                               pointCollB.Item(4), pointCollB.Item(5), pointCollB.Item(6), _
                                               pointCollB.Item(7), pointCollB.Item(, pointCollB.Item(9), _
                                               pointCollB.Item(10), pointCollB.Item(11), pointCollB.Item(12), _
                                               pointCollB.Item(13), pointCollB.Item(14), pointCollB.Item(15), _
                                               pointCollB.Item(16), pointCollB.Item(17), pointCollB.Item(18), _
                                               pointCollB.Item(19), pointCollB.Item(20), pointCollB.Item(21), _
                                               pointCollB.Item(22), pointCollB.Item(23), pointCollB.Item(24), _
                                               pointCollB.Item(25))

Result is: Compile error: Wrong number of arguments or invalid property assignment.

 

Thank you for help!8)

Link to comment
Share on other sites

It would be almost easier to do a script just need a blank line to end the pline

 

3dpoly
1,2,3
3,4,5
6,7,8

3dpoly
9,1,2
3,4,5
6,7,8

 

I have used this with a list of pts yes its lisp

; create pline by picking points press enter when finished
(command "_pline")
(while (= (getvar "cmdactive") 1 ) (command pause) ; replace the (command pause) with your xyz within a loop
)

Link to comment
Share on other sites

If

 

 

The collection is a collection of arrays (0 to 2).

 

 

and the Add3DPoly Method requires a 1 dimensional array then you may need something like this construct:

 

Dim Coords(74) as Double
Dim IndexForArray as Integer
Dim CountIndex as Integer
….
For Index as Integer = 0 to 24
IndexForArray = Index – 1
CountIndex = Index * 3
Coords(CountIndex) = pointCollA.Item(IndexForArray)(0)
Coords(CountIndex + 1) = pointCollA.Item(IndexForArray)(1)
Coords(CountIndex + 2) = pointCollA.Item(IndexForArray)(2)
Next

Link to comment
Share on other sites

Yep. It needed two arrays to initialize, then I can append with the additional vertices.

 

Here was the final solution:

 

    For Each coords In railOne
       If index < count Then
           If index < 1 Then
               handle = railOne(index)
               Set object = ThisDrawing.HandleToObject(handle)
                   points(0) = object.Coordinates(0)
                   points(1) = object.Coordinates(1)
                   points(2) = object.Coordinates(2)

               index = index + 1
               handle = railOne(index)
               Set object = ThisDrawing.HandleToObject(handle)
                   points(3) = object.Coordinates(0)
                   points(4) = object.Coordinates(1)
                   points(5) = object.Coordinates(2)
                   Set pLineA = ThisDrawing.ModelSpace.Add3DPoly(points)
                   index = index + 1
           Else
               handle = railOne(index)
               Set object = ThisDrawing.HandleToObject(handle)
                   points1(0) = object.Coordinates(0)
                   points1(1) = object.Coordinates(1)
                   points1(2) = object.Coordinates(2)
               pLineA.AppendVertex points1
               index = index + 1
           End If
       Else
       End If
   Next coords

Thanks for all the help. You guys rock!!

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...