Добавление вершины к замкнутой полилинии в AutoCAD

Я пытаюсь вставить новую вершину в существующую замкнутую полилинию через AutoCAD .Net API.

У меня есть метод вставки вершины в полилинию. Но это не работает для замкнутых полилиний в случае, показанном ниже. Код не работает, если точка находится на последнем краю полилинии. Может кто-нибудь увидеть, в чем проблема?

 public void AddVertexOnPolyline(Point3d addPoint,Polyline editPolyline)
  {
      Document acDoc = Autodesk.AutoCAD.ApplicationServices.Core.Application.DocumentManager.MdiActiveDocument;
      Editor pEditor = acDoc.Editor;
      int chk = 1;
      try
      {
          for (int i = 0; (i <= (editPolyline.NumberOfVertices - 1)); i++)
          {
              double dist1 = editPolyline.GetDistAtPoint(addPoint);
              double dist2 = editPolyline.GetDistAtPoint(editPolyline.GetPoint3dAt(i));

              if ((editPolyline.GetDistAtPoint(addPoint) < (editPolyline.GetDistAtPoint(editPolyline.GetPoint3dAt(i)))) && chk != 0)
              {
                  Point2d pnt2 = new Point2d(addPoint.X, addPoint.Y);
                  editPolyline.AddVertexAt(i, pnt2, 0, 0, 0);
                  chk = 0;
                  break;
              }
          }
      }
      catch (System.Exception ex)
      {
          throw;
      }
  }

Примечание. Я также разместил его на дискуссионных форумах Autodesk.


person vinayan    schedule 14.08.2013    source источник
comment
Что делает функция GetDistAtPoint?   -  person Jeroen van Langen    schedule 14.08.2013
comment
Почему бы просто сначала не открыть полилинию?   -  person Parrish Husband    schedule 15.08.2013
comment
@Locke - при открытии край в вопросах удаляется.   -  person vinayan    schedule 16.08.2013
comment
@JeroenvanLangen Я считаю, что если вы введете точку на полилинии, она даст вам расстояние от этой точки от начала полилинии до прохождения через линию. чт   -  person BKSpurgeon    schedule 31.05.2017


Ответы (1)


Чтобы добавить vertex к polylineclosed или нет, используйте метод AddVertexAt. Этот код может заменить ваш метод:

Point2d addPoint = new Point2d(50.0, 50.0);
polyline.AddVertexAt(3, addPoint, 0, 0, 0);

Ваш метод вообще этого не делает. Вы используете метод GetDistAtPoint, который вычисляет расстояние между началом polyline и точкой, указанной в качестве параметра. Если точка не находится на polyline, метод выдаст исключение.

Метод проверяет, есть ли вершина, которая имеет большее расстояние, чем расстояние данной точки.

person Community    schedule 29.09.2015
comment
Если вы хотите добавить точку как вершину, например, эта точка уже находится в ломаной, используйте метод GetDistAtPoint с блоком try ... catch, чтобы проверить, находится ли точка на ломаной. - person ; 29.09.2015