SEANT 发表于 2022-7-6 23:56:34

以下是使用几何体命名空间分割多段线的一个示例(有限测试)。
 
我不确定拆分过程是否适合一个简单的算法;附件使用了一个相当复杂的循环结构,类似于我们的原始。当然,可能有一种更简单的结构。
 
我没有使用曲线2D。GetSplitCurves方法,因为它只允许输入一个参数值,并且该过程适合同时使用两个交点。
 
 
 
 
 
 
可以通过CurveCurveIntersector2d获取特定交点处的曲线参数。GetIntersectionParameters()。传递一个整数,指定要使用的交点,并返回双精度。Double是曲线1上的参数,Double是曲线2上的参数。
 
 
 
静态公共void SlcPly(){Database db=HostApplicationServices.WorkingDatabase;Editor ed=AcadApp.DocumentManager.MdiActiveDocument.Editor;使用(Transaction trans=db.TransactionManager.StartTransaction()){prompentityoptions peo=new prompentityoptions(“\n选择闭合的LW多段线:”);peo。SetRejectMessage(“\非闭合多段线!”);peo。AddAllowedClass(typeof(Polyline),true);PrompEntityResult per=ed.GetEntity(peo);if(per.Status!=PromptStatus.OK)返回;多段线pl=trans。GetObject(per.ObjectId,OpenMode.ForRead)作为多段线;如果(!pl.Closed | | pl.HasBulges){ed.WriteMessage(“\n polyline未关闭或有bulges-操作已取消!”);return;}pl.Highlight();Curve2dCollection过渡=新的Curve2dCollection();CompositeCurve2d original=CompCrvFromPts(ptsFromPoly(pl.ObjectId));peo。RemoveAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Polyline));peo。AddAllowedClass(typeof(Autodesk.AutoCAD.DatabaseServices.Line),false);peo。SetRejectMessage(“\ n只有一行!”);peo。Message=“\n选择切片线:”;per=ed.GetEntity(peo);if(per.Status!=PromptStatus.OK)返回;Point2dCollection p2dColl=新的Point2dCollection(2);线路ln=变速箱。GetObject(per.ObjectId,OpenMode.ForRead,false)作为行;P2D孔。添加(新点2D(ln.StartPoint.X,ln.StartPoint.Y));P2D孔。添加(新点2d(ln.EndPoint.X,ln.EndPoint.Y));过渡=切片比较曲线(原始,p2dColl);P2D孔。清除();per=ed.GetEntity(peo);if(per.Status!=PromptStatus.OK)返回;pl.Unhighlight();ln=trans。GetObject(per.ObjectId,OpenMode.ForRead,false)作为行;P2D孔。添加(新点2D(ln.StartPoint.X,ln.StartPoint.Y));P2D孔。添加(新点2d(ln.EndPoint.X,ln.EndPoint.Y));BlockTableRecord currSpace=trans。GetObject(db.CurrentSpaceId,OpenMode.ForWrite)作为BlockTableRecord;ObjectdCollection OID=new ObjectdCollection();foreach(临时的Curve2d c2d){Curve2d集合temp=SliceCompCurve(c2d作为CompositeCurve2d,p2dColl);if(temp!=null){foreach(临时的Curve2d c2d2){oids。Add(PolyFromCompCrv(c2d2,ref db,ref currSpace));                           }                     }                     else{oids.Add(PolyFromCompCrv(c2d,ref db,ref currSpace));}}pl.Upg
页: 1 [2]
查看完整版本: 使用GetSplitCurves(点