Тема: Удаление вершины из полилинии. VBA

Столкнулся с интересной проблемой. Пытаюсь удалить совпадающие последовательные вершины из полилинии. Получаю массив с координатами, выкидываю ненужное, и приваиваю его полилинии по новой.
PlineObject.Coordinates = Crds
ACAD слетает практически не прощаясь.
И так во всех случаях, когда число элементов в конечном массиве меньше, чем в исходном. Если больше, то все нормально. Если построить новую полилинию, используя этот массив с координатами, опять же, все нормально.
Отсюда вопрос: как при помощи VBA удалить вершину из полилинии (без построения новой полилинии и удаления исходной)?

Re: Удаление вершины из полилинии. VBA

> DEN
Приведите код.
У меня подобный метод вполне нормально работает..

Re: Удаление вершины из полилинии. VBA

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 предлагает отправить сообщение разработчикам, и гуд бай. smile Наример, выбираю две полилинии и координаты одной присваиваю другой.
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.

Re: Удаление вершины из полилинии. VBA

Хм... А в 2007-м все работает... Это как прикажете понимать??

Re: Удаление вершины из полилинии. VBA

Да дело даже не именно в этом коде. При любых попытках присвоить полилинии массив координат "короче", чем был, ACAD предлагает отправить сообщение разработчикам, и гуд бай

Тогда я пас.. Ваш код у меня в 2006 работает нормально.

Re: Удаление вершины из полилинии. VBA

Елки зеленые, я уже мозги вывихнул, ACAD переустановил - все без толку. В коде, кстати, нашел ошибку: проверять нужно не <> and <>, a Not (= and =).