乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
楼主: stmoong

[编程交流] 使用GetSplitCurves(点

[复制链接]

10

主题

973

帖子

909

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 23:56:34 | 显示全部楼层
以下是使用几何体命名空间分割多段线的一个示例(有限测试)。
 
我不确定拆分过程是否适合一个简单的算法;附件使用了一个相当复杂的循环结构,类似于我们的原始。当然,可能有一种更简单的结构。
 
我没有使用曲线2D。GetSplitCurves方法,因为它只允许输入一个参数值,并且该过程适合同时使用两个交点。
 
 
 
 
 
 
可以通过CurveCurveIntersector2d获取特定交点处的曲线参数。GetIntersectionParameters()。传递一个整数,指定要使用的交点,并返回双精度[2]。Double[0]是曲线1上的参数,Double[1]是曲线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
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-4 12:00 , Processed in 0.360067 second(s), 64 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表