public void SnapInfoCurve(ObjectSnapContext context, ObjectSnapInfo result) { var cv = context.PickedObject as Curve; if (cv == null) { return; } double startParam = cv.StartParam; double endParam = cv.EndParam; if (startParam == endParam) { return; } double param = startParam + ((endParam - startParam) * 0.25); var pt = cv.GetPointAtParameter(param); result.SnapPoints.Add(pt); param = startParam + ((endParam - startParam) * 0.75); pt = cv.GetPointAtParameter(param); result.SnapPoints.Add(pt); if (cv.Closed) { pt = cv.StartPoint; result.SnapPoints.Add(pt); } }
public void SnapInfoPolyline(ObjectSnapContext context, ObjectSnapInfo result) { var pl = context.PickedObject as Polyline; if (pl == null) { return; } double plStartParam = pl.StartParam; double plEndParam = pl.EndParam; double startParam = plStartParam; double endParam = startParam + 1.0; while (endParam <= plEndParam) { double param = startParam + ((endParam - startParam) * 0.25); var pt = pl.GetPointAtParameter(param); result.SnapPoints.Add(pt); param = startParam + ((endParam - startParam) * 0.75); pt = pl.GetPointAtParameter(param); result.SnapPoints.Add(pt); startParam = endParam; endParam += 1.0; } }
public void SnapInfoPolyline( ObjectSnapContext context, ObjectSnapInfo result) { // For polylines var pl = context.PickedObject as Polyline; if (pl == null) { return; } // Get the overall start and end parameters double plStartParam = pl.StartParam; double plEndParam = pl.EndParam; // Get the local double startParam = plStartParam; double endParam = startParam + 1.0; while (endParam <= plEndParam) { // Calculate the snap point per vertex... // Add osnap at first quarter double param = startParam + ((endParam - startParam) * 0.25); var pt = pl.GetPointAtParameter(param); result.SnapPoints.Add(pt); // Add osnap at third quarter param = startParam + ((endParam - startParam) * 0.75); pt = pl.GetPointAtParameter(param); result.SnapPoints.Add(pt); startParam = endParam; endParam += 1.0; } }
public void CurveSnap(ObjectSnapContext context, ObjectSnapInfo result) { Curve curve = (Curve)context.PickedObject; //当前捕捉到的曲线对象 Point3dCollection snaps = result.SnapPoints; //获取对象的捕捉点集合 if (curve.Closed) { return; //如果为闭合曲线,则返回 } double startParam = curve.StartParam; //曲线的起点参数 double endParam = curve.EndParam; //曲线的终点参数 //将与曲线起点的距离为1/3曲线长度的点作为捕捉点 snaps.Add(curve.GetPointAtParameter(startParam + ((endParam - startParam) / 3))); //将与曲线起点的距离为2/3曲线长度的点作为捕捉点 snaps.Add(curve.GetPointAtParameter(startParam + ((endParam - startParam) * 2 / 3))); }
public void SnapInfoCurve( ObjectSnapContext context, ObjectSnapInfo result ) { // For any curve var cv = context.PickedObject as Curve; if (cv == null) { return; } double startParam = cv.StartParam; double endParam = cv.EndParam; // Added a check to avoid zero-length curve problems if (startParam == endParam) { return; } // Add osnap at first quarter double param = startParam + ((endParam - startParam) * 0.25); var pt = cv.GetPointAtParameter(param); result.SnapPoints.Add(pt); // Add osnap at third quarter param = startParam + ((endParam - startParam) * 0.75); pt = cv.GetPointAtParameter(param); result.SnapPoints.Add(pt); if (cv.Closed) { pt = cv.StartPoint; result.SnapPoints.Add(pt); } }
public void SnapInfoEntity( ObjectSnapContext context, ObjectSnapInfo result) { // Nothing here }