Добавление вершины в замкнутую полилинию в 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.

2 ответа

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

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

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

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

pLine.AddVertexAt((int)System.Math.Floor(parm)+1, new Point2d(pos.X, pos.Y), 0, 0, 0);
Другие вопросы по тегам