首页 > 其他分享 >AutoCAD Geometry库中的CurveCurveIntersector3d获取的交点坐标不正确

AutoCAD Geometry库中的CurveCurveIntersector3d获取的交点坐标不正确

时间:2022-10-18 08:33:41浏览次数:47  
标签:OpenMode AutoCAD Geometry MdiActiveDocument tr CurveCurveIntersector3d Applicati

        /// <summary>
        /// 2022年10月17日 Author:Myzw
        /// 
        /// </summary>
        [CommandMethod("Test14")]
        public void C_Test14()
        {
            var per1 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetEntity("\nPick Polyline 1");
            if (per1.Status != PromptStatus.OK) return;
            var per2 = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Editor.GetEntity("\nPick Polyline 2");
            if (per2.Status != PromptStatus.OK) return;
            using (Transaction tr = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.TransactionManager.StartTransaction())
            {
                BlockTable bt = (BlockTable)tr.GetObject(Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument.Database.BlockTableId, OpenMode.ForRead, false);
                BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForWrite, false);
                var cur1 = (per1.ObjectId.GetObject(OpenMode.ForRead) as Curve).GetGeCurve();
                var cur2 = (per2.ObjectId.GetObject(OpenMode.ForRead) as Curve).GetGeCurve();
                var cci = new CurveCurveIntersector3d(cur1, cur2, Vector3d.ZAxis);
                for (int i = 0; i < cci.NumberOfIntersectionPoints ; i++)
                {
                    var pt = new DBPoint(cci.GetPointOnCurve1(i).Point);
                    btr.AppendEntity(pt);
                    tr.AddNewlyCreatedDBObject(pt, true);
                }
                tr.Commit();
            }
        }

测试代码如上

当curve1为下图中的线段、curve2为多段线时,

得到的交点是错误的。

当curve1为多段线、curve2为线段时,

在附件的测试图中,

能得到正确的结果,

但在我的实际项目代码中,

即使我交换多段线和线段的顺序,

也无法获取正确的交点。

 

 

解决方法:

当曲线是线段或圆弧时,

将其拆分,

创建新的组合曲线,

之后用新建的组合曲线求交点,

可以得到正确的结果。

 

标签:OpenMode,AutoCAD,Geometry,MdiActiveDocument,tr,CurveCurveIntersector3d,Applicati
From: https://www.cnblogs.com/myzw/p/16801316.html

相关文章

  • AutoCAD2014 辅助设计从入门到精通
    【出版信息】书名:AutoCAD2014辅助设计从入门到精通书号:978-7-111-45385-7作者:钟日铭等开本:16开出版时间:2014.1出版社:机械工业出版社【内容简介】本书以最新的AutoCAD......
  • AutoCAD 打开CAD会提示许可检出超时
    1、在C盘下找到C:\ProgramFiles(x86)\CommonFiles\AutodeskShared\AdskLicensing进入文件夹,右击uninstall.exe以管理员身份运行将其卸载掉。2、接着安装adsklicensinginsta......
  • WPF 开源二维绘画小工具 GeometryToolDemo 项目
    这是一个演示WPF进行二维绘画的小工具Demo项目,基于MIT协议在GitHub上完全开源源作者是YuWeiCong我只是帮助开源的工具人软件运行界面效果:开源地址:https://g......
  • postgis st_point报错st_point(geometry)不存在
     参考:https://blog.csdn.net/aliasone/article/details/80644306正确写法:SELECTst_x(the_geom)FROM"geo_dangerpoint_b"原因:st_point(float8,float8)SELECTS......
  • AutoCAD Geometry 中BoundedPlane 是平行四边形,不是三角形
      第一次使用这个类,起初以为这个BoundedPlane是三角形,没想到在求取交点时,有交点位于三角形之外,在QQ群193522571中请教,群友45168391告诉我BoundedPlane是平行四......
  • AutoCAD 剪贴板格式的 .net 声明
    结构体声明[StructLayout(LayoutKind.Sequential)]structRect{publicintleft;publicinttop;publicintright;publicintbottom;};......
  • IfcConnectionGeometry
    IfcConnectionGeometryIfcConnectionGeometry用于描述促进两个对象物理连接的几何和拓扑约束。它被设想为应用于元素连接关系的控件。 注意,元素连接关系通常通过引用相......
  • ORA-28579 在从外部过程代理程序回调时,发生网络错误,ORA-06512 在"SDE.ST_GEOMETRY_SHA
      如图所示,在执行sde.st_transform方法时报错。环境是arcgis10.8 oracle是12C,版本号是v12.1.0.2.0但是执行ST_GEOMETRY方法是可以的,说明配置没有问题。 说重点,......
  • IfcConnectionGeometry
    IfcConnectionGeometry实体定义IfcConnectionGeometry用于描述促进两个对象物理连接的几何和拓扑约束。它被设想为应用于元素连接关系的控件。 注意:元素连接关系通常......
  • IfcConnectionCurveGeometry
    IfcConnectionCurveGeometry实体定义IfcConnectionCurveGeometry用于描述几何约束,这些几何约束有助于在曲线或与曲线几何相关的边上实现两个对象的物理连接。它被设想为......