AutoCad .Net二次开发求两曲线最小距离
测试结果:
主要思路:假设有两条曲线分别是c1和c2,把c1按照1的距离划分我这里用变量jd表示,得到一个曲线集合coll,然后遍历coll,得到coll中每一个曲线的两个端点,再用这两个端点分别求离曲线c2的最短距离,直接使用开发库的GetClosestPointTo方法就可以了,直到遍历完整个coll集合就能得到最短距离和其对应的点。
主要代码得到曲线集合coll:
- public List<Curve> GetCurves(Curve curve ,double jd)
- {
- List<Curve> lstCurves = new List<Curve>();
- double totalLength = curve.GetDistanceAtParameter(curve.EndParam);
- if (totalLength < jd)
- {
- lstCurves.Add(curve);
- return lstCurves;
- }
- double addLength = ;
- Point3dCollection pt3dCol = new Point3dCollection();
- while (addLength < totalLength)
- {
- pt3dCol.Add(curve.GetPointAtDist(addLength));
- addLength += jd;
- }
- if (addLength != totalLength)
- pt3dCol.Add(curve.GetPointAtDist(totalLength));
- DBObjectCollection dbObjColl= curve.GetSplitCurves(pt3dCol);
- foreach (var item in dbObjColl)
- {
- lstCurves.Add((Curve)item);
- }
- dbObjColl.Dispose();
- return lstCurves;
- }
主要代码得到最短距离和最近点:
- public Line GetMinLine(Curve curve1,Curve curve2,double jd)
- {
- List<Curve> lstCurves = GetCurves(curve1, jd);
- double minVal = double.MaxValue;
- Point3d ptMin1 = Point3d.Origin;
- Point3d ptMin2 = Point3d.Origin;
- foreach (var c in lstCurves)
- {
- Point3d pt1 = c.StartPoint;
- Point3d pt2 = c.EndPoint;
- var pt11=curve2.GetClosestPointTo(pt1, false);
- var pt22= curve2.GetClosestPointTo(pt2, false);
- var l1 = pt11.DistanceTo(pt1);
- var l2 = pt22.DistanceTo(pt2);
- if (l1 < minVal)
- {
- minVal = l1;
- ptMin1 = pt11;
- ptMin2 = pt1;
- }
- if (l2 < minVal)
- {
- minVal = l2;
- ptMin1 = pt22;
- ptMin2 = pt2;
- }
- }
- ed.WriteMessage("\n最短距离:" + minVal + "\n");
- return new Line(ptMin1,ptMin2);
- }
关于GetClosestPointTo介绍如下:
AutoCad .Net二次开发求两曲线最小距离的更多相关文章
- 利用C#进行AUTOCAD的二次开发
众所周知,对AutoCAD进行二次开发用到的主要工具有:ObjectArx,VBA,VLisp.但它们的优缺点是显而易见的:ObjectArx功能强大,编程效率高,但它的缺点是编程者必须掌握VC++, ...
- AutoCAD.NET二次开发:创建自定义菜单的两种方法比较
目前我已经掌握的创建CAD菜单方法有两种: COM方式: http://www.cnblogs.com/bomb12138/p/3607929.html CUI方式: http://www.cnblo ...
- AutoCAD .NET二次开发(一)
其他话不多说,直接进入主题,既然是二次开发,当然是用CAD平台已经封装好了很多类,我们需要熟悉和使用它们.常用的AutoCAD .NET API的四个主要DLL文件是: 名称 作用 备注 AcDbMg ...
- AutoCAD.NET二次开发:扩展数据之XData
结果缓存——ResultBuffer 结果缓存即 Autodesk.AutoCAD.DatabaseServices.ResultBuffer 类型,使用 ResultBuffer 对象时需要提供一个 ...
- AutoCAD.NET二次开发:创建自定义菜单(AcCui)
从CAD2007之后,Autodesk提供了一个新的程序集AcCui.dll,使用这个程序集,我们可以方便地做一些界面方面的操作,比如创建自定义菜单. 下面介绍一下菜单的创建过程: 1.在项目中添加引 ...
- AutoCAD C#二次开发
https://www.cnblogs.com/gisoracle/archive/2012/02/19/2357925.html using System; using System.Collect ...
- 【NX二次开发】分析曲线某位置的信息 UF_MODL_ask_curve_props
分析曲线某位置的信息:点.切线.主副法线.半径等 extern DllExport void ufsta(char *param, int *returnCode, int rlen) { UF_in ...
- AutoCAD .NET二次开发(四)
在CAD中,属性信息一般是以注记的形式存在,但当属性数据内容较多时,显示就成了问题.扩展属性(Xdata)可以解决这一问题,比如南方Cass中就利用了这一点.我们经常用Lisp来读取操作扩展属性. 查 ...
- AutoCAD .NET二次开发(三)
在ArcGIS中,锁是一个经常遇到的东西,在打开一个该当时要锁定,编辑一个文档是再次锁定.要深入理解这个,要学习一下进程与线程.在CAD.NET中,也有Lock与Unlock. 获取一个文档,在进行处 ...
随机推荐
- Libevent:9Evbuffers缓存IO的实用功能
Libevent的evbuffer功能实现了一个字节队列,优化了在队列尾端增加数据,以及从队列前端删除数据的操作. Evbuffer用来实现缓存网络IO中的缓存部分.它们不能用来在条件发生时调度IO或 ...
- 在laravel框架中使用ajax请求报错419
laravel框架中报419 419 unknown status 这个时候你需要将这个接口放到api路由上,这样可以跳过CSRF的检查
- ModuleNotFoundError: No module named 'tools.nnwrap' pytorch 安装
https://pytorch.org/get-started/locally/ pytorch 主页选择后安装
- @hdu - 5503@ EarthCup
目录 @description@ @solution@ @accepted code@ @details@ @description@ n 个队伍两两之间比赛,保证没有平局. 现在给出 n 个队伍分别 ...
- linux服务器时间更新
yum install ntpdate ntpdate ntp1.aliyun.com(阿里云服务器时间)
- vscode golang vue配置
{ "files.autoSave": "off", "window.title": "${dirty}${activeEdito ...
- css3 word-wrap属性
允许长单词换行到下一行: word-wrap:break-word
- Bert源码阅读
前言 对Google开源出来的bert代码,来阅读下.不纠结于代码组织形式,而只是梳理下其训练集的生成,训练的self-attention和multi-head的具体实现. 训练集的生成 主要实现在c ...
- hdu 1289 Hat’s IEEE
Problem - 1289 好题.其实就是模拟IEEE754的格式,不过要注意的是,这里用的32位是float,用double就不对了. 代码如下: #include <cstdio> ...
- 使用提示(Hints)
对于表的访问,可以使用两种Hints. FULL 和 ROWID FULL hint 告诉ORACLE使用全表扫描的方式访问指定表. 例如: SELECT /*+ FULL(EMP) */ * FRO ...