# Get coordinate of polyline by VBA

## Recommended Posts

Hi,

I've just started learning VBA in CAD.I wanna select polyline onscreen and then get its coordinate(of every vertex).But I don't know how to do it.

Thanks for any help.

Bye

##### Share on other sites

Something like this?

```Sub Example_Coordinates()

Dim Bound As Double

'Makes a selectionset.
'On Error Resume Next
Set Selection = ThisDrawing.SelectionSets.Item("Select polyline.")
If Err Then
Err.Clear
Else
Selection.Clear
End If

'Select the polyline.
Selection.SelectOnScreen

For Each Obj In Selection

If Obj.ObjectName = "AcDbPolyline" Then

Set Poly = Obj
On Error Resume Next

Bound = UBound(Poly.Coordinates)

x = 0
y = 1

For i = 0 To Bound / 2

MsgBox "X= " & Poly.Coordinates(x) & "  Y= " & Poly.Coordinates(y)
If Err Then Err.Clear

x = x + 2
y = y + 2

Next

End If

Next Obj

End Sub```

I hope this helps you!

Greetings

##### Share on other sites

• 5 years later...

Sub Example_Coordinates()

without the sub xx()

how to run this code?

##### Share on other sites

Try to change ( by ( and ) by ) in code

##### Share on other sites

Sub Example_Coordinates()

without the sub xx()

how to run this code?

Try another one instead,type vbarun in the command line,

select "demo" sub

```
Option Explicit
Function PolyCoords(oEnt As AcadEntity) As Variant
Dim cnt As Integer
Dim i As Integer
Dim j As Integer
Dim iStep As Integer
Dim varPt As Variant
Dim dblCoords() As Double
Dim dblVert() As Double

If TypeOf oEnt Is AcadLWPolyline Then
iStep = 2
ElseIf TypeOf oEnt Is Acad3DPolyline Or _
iStep = 3
End If
dblCoords = oEnt.Coordinates

ReDim ptsArr(0 To (UBound(dblCoords) + 1) \ iStep - 1, 0 To iStep - 1) As Double
For i = 0 To (UBound(dblCoords) + 1) \ iStep - 1
For j = 0 To iStep - 1
ptsArr(i, j) = dblCoords(cnt)
Debug.Print ptsArr(i, j)
cnt = cnt + 1
Next
Next
PolyCoords = ptsArr
End Function

Sub demo()
Dim pts As Variant
Dim varPt As Variant
ThisDrawing.Utility.GetEntity oEnt, varPt, vbCr & "Select polyline"
If Not TypeOf oEnt Is AcadLWPolyline And _
Not TypeOf oEnt Is Acad3DPolyline And _
Not TypeOf oEnt Is AcadPolyline Then
MsgBox "Method is not applicable for this entity type"
Exit Sub
End If
pts = PolyCoords(oEnt)
End Sub
```

~'J'~

Edited by fixo
##### Share on other sites

Try to change ( by ( and ) by ) in code

Ya, tq, it woks now!

##### Share on other sites

• 8 months later...

I’m a bit discouraged, I started to learn acad-vba since a few days too & I wanted to understand Steven Bastiaanse’s example which seems simple.

Why #40 & #41 , what does it mean.

Set Selection = ThisDrawing.SelectionSets.Item (”Select polyline” & #41; ???

(ThisDrawing.selectionsets) expected object or method isn’t it?

Thanks for helping me

##### Share on other sites

• 1 year later...

Hello Sir

I need to add a polyline based of part of coodonates of first polyline

So i need to copy vertex example from 0 to 5 of first polyline.

Thnakyou

##### Share on other sites

Here is a VL example you will end up with a variable co-ordsxy which contains all the pts for a 2d pline as 2 values (x1 y1 x2 y2 x3 y3..... you can then get each pair from the list using nth x & nth (+ x 1)

```; pline co-ords example
; By Alan H
(defun getcoords (ent)
(vlax-safearray->list
(vlax-variant-value
(vlax-get-property
(vlax-ename->vla-object ent)
"Coordinates"
)
)
)
)

(defun co-ords2xy ()
; convert now to a list of xy as co-ords are x y x y x y if 3d x y z x y z
(setq len (length co-ords))
(setq numb (/ len 2)) ; even and odd check required
(setq I 0)
(repeat numb
(setq xy (list (nth i co-ords)(nth (+ I 1) co-ords) ))
; odd (setq xy (list (nth i co-ords)(nth (+ I 1) co-ords)(nth (+ I 2) co-ords) ))
(setq co-ordsxy (cons xy co-ordsxy))
(setq I (+ I 2))
)
)
; program starts here
(setq co-ords (getcoords (car (entsel "\nplease pick pline"))))
(co-ords2xy) ; list of 2d points making pline
```

##### Share on other sites

Is there a way to do this in vba macro for autocad not lisp?

Thankyou very much.

##### Share on other sites

Fixo's code above Debug.Print ptsArr(i, j) will contain the points. So something like x= ptsArr(i) y=ptsArr(j) I am sure Fixo will confirm.

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

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

×   Pasted as rich text.   Restore formatting

Only 75 emoji are allowed.