Sub DelDuplVertPline(ByRef PlineObj As AcadLWPolyline)
Dim Crds() As Double, Blgs() As Double
cr = 1: b = 0
ubcr = UBound(PlineObj.Coordinates)
ns = (ubcr - 1) / 2
For cr0 = 0 To ubcr - 3 Step 2
If PlineObj.Coordinates(cr0) <> PlineObj.Coordinates(cr0 + 2) And PlineObj.Coordinates(cr0 + 1) <> PlineObj.Coordinates(cr0 + 3) Then
ReDim Preserve Crds(cr): ReDim Preserve Blgs(b)
Crds(cr - 1) = PlineObj.Coordinates(cr0)
Crds(cr) = PlineObj.Coordinates(cr0 + 1)
ns = cr0 / 2
Blgs(b) = PlineObj.GetBulge(ns)
cr = cr + 2: b = b + 1
End If
Next
ReDim Preserve Crds(cr): ReDim Preserve Blgs(b)
Crds(cr - 1) = PlineObj.Coordinates(ubcr - 1)
Crds(cr) = PlineObj.Coordinates(ubcr): Blgs(b) = 0
PlineObj.Coordinates = Crds
For i = 0 To b - 1
PlineObj.SetBulge i, Blgs(i)
Next
End Sub
Да дело даже не именно в этом коде. При любых попытках присвоить полилинии массив координат "короче", чем был, ACAD предлагает отправить сообщение разработчикам, и гуд бай. Наример, выбираю две полилинии и координаты одной присваиваю другой.
Sub pfl()
Dim plobj As AcadLWPolyline, plobj2 As AcadLWPolyline
ThisDrawing.Utility.GetEntity plobj, pnt
ThisDrawing.Utility.GetEntity plobj2, pnt
plobj.Coordinates = plobj2.Coordinates
End Sub
Если первая длинней или такая же (по числу вершин) - живем, если короче - вылетаем. ACAD 2006.