Может немного коряво, это писалось в спешке...
' т.к. нам надо вместе с объектом хранить направление
Public Type ObrObj
Obj As AcadObject
StEn As Boolean ' true = start point -> end point
End Type
'====================
'
' Создание полилинии на основе массива упорядоченых объектов
'
' результат - удалось ли
'
Public Function CreatePLine(EntArr() As ObrObj, PLin As AcadPolyline) As Boolean
On Error GoTo labError
Dim Cnt As Long
Dim TmpVar As Variant
Dim VertArr() As Double
' заполняем массив координат вершин полилинии
ReDim VertArr(3 * (UBound(EntArr) + 1) - 1)
For Cnt = 0 To UBound(EntArr) - 1
If EntArr(Cnt).StEn Then
TmpVar = EntArr(Cnt).Obj.StartPoint
Else
TmpVar = EntArr(Cnt).Obj.EndPoint
End If
VertArr(3 * Cnt) = TmpVar(0)
VertArr(3 * Cnt + 1) = TmpVar(1)
VertArr(3 * Cnt + 2) = 0
Next Cnt
' конечная точка последнего объекта
If EntArr(UBound(EntArr) - 1).StEn Then
TmpVar = EntArr(UBound(EntArr) - 1).Obj.EndPoint
Else
TmpVar = EntArr(UBound(EntArr) - 1).Obj.StartPoint
End If
VertArr(3 * UBound(EntArr)) = TmpVar(0)
VertArr(3 * UBound(EntArr) + 1) = TmpVar(1)
VertArr(3 * UBound(EntArr) + 2) = 0
' создание полилинии
Set PLin = ThisDrawing.ModelSpace.AddPolyline(VertArr)
' определение свойства выпуклости для дуг
For Cnt = 0 To UBound(EntArr) - 1
If EntArr(Cnt).Obj.ObjectName = "AcDbArc" Then
If EntArr(Cnt).StEn Then
PLin.SetBulge Cnt, Tan(EntArr(Cnt).Obj.TotalAngle / 4)
Else
PLin.SetBulge Cnt, -Tan(EntArr(Cnt).Obj.TotalAngle / 4)
End If
End If
Next Cnt
CreatePLine = True
Exit Function
labError:
CreatePLine = False
MsgBox "Во время работы функции CreatePLine произошли ошибки!"
End Function