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