Jalen Weir 发表于 2022-7-6 21:57:23

Draw Polyline with x,y, & z co

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 = newLayerSet 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 = newLayer1Set 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!

Jalen Weir 发表于 2022-7-6 22:09:46

BTW ive tried this with AddPolyline & AddLightWeightPolyline too.

BIGAL 发表于 2022-7-6 22:22:50

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

3dpoly1,2,33,4,56,7,83dpoly9,1,23,4,56,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)

Jalen Weir 发表于 2022-7-6 22:32:49

The points already exist. Its survey points from a crane rail.

SEANT 发表于 2022-7-6 22:47:21

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

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

Jalen Weir 发表于 2022-7-6 22:47:28

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 coordsThanks for all the help. You guys rock!!

Jalen Weir 发表于 2022-7-6 22:58:21

I meant array (0 To 5) to initialize.
页: [1]
查看完整版本: Draw Polyline with x,y, & z co