我正在尝试通过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论坛上发布了它
答案 0 :(得分:0)
要将vertex
添加到已关闭的polyline
,请使用方法AddVertexAt
。此代码可以替换您的方法:
Point2d addPoint = new Point2d(50.0, 50.0);
polyline.AddVertexAt(3, addPoint, 0, 0, 0);
你的方法根本就没有这样做。您正在使用方法GetDistAtPoint
来计算polyline
的开头与作为参数给出的点之间的距离。如果该点不在polyline
上,则该方法将抛出异常。
该方法检查是否存在距离大于给定点距离的顶点。
答案 1 :(得分:-1)
pLine.AddVertexAt((int)System.Math.Floor(parm)+1, new Point2d(pos.X, pos.Y), 0, 0, 0);