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. 获取一个文档,在进行处 ...
随机推荐
- selenium 图片上传
WebElement file = driver.findElement(By.name("filename")); 给此元素设置值:file.sendKeys("E: ...
- 关于取List中的指定几条数据以及注意事项
list1 = list2.subList(start, end); start,end分别是第几个到第几个. 注意的是此方法和substring一样,包含前不包含结尾,取下标索引 另一个注意的地方是 ...
- SQL注入原理讲解,很不错!
SQL注入原理讲解,很不错! 原文地址:http://www.cnblogs.com/rush/archive/2011/12/31/2309203.html 1.1.1 摘要 日前,国内最大的程序员 ...
- 5-2 正则表达式及其re模块
一 正则表达式 在线测试工具 http://tool.chinaz.com/regex/ 字符 量词 贪婪匹配 贪婪匹配:在满足匹配时,匹配尽可能长的字符串,默认情况下,采用贪婪匹配,<.*&g ...
- Round #590 (Div. 3)
拿DIV找快乐... 当场过了A-B1-B2-C 写D差5分钟写的是正解...留坑补FG A. Equalize Prices Again 直接判断sum%n==0?sum/n:sum/n+1 B1, ...
- linux下重启oracle数据库
如何在linux下重启oracle数据库 | 浏览:3930 | 更新:2013-09-18 19:33 1 2 3 4 5 6 分步阅读 在实际工作项目中,有时候会遇到需要对oracle数据库进行重 ...
- 解决bootStrap selectpicker 下拉栏上方弹出
最近项目中遇到了一个使用bootStrap selectpicker 进行下拉栏展示的时候出现在元素上方弹出展示的问题,可把我难受坏了,和测试互怼最终以失败告终(人家还是一个娇滴滴的小姑娘),在查了a ...
- hdu 1839 Delay Constrained Maximum Capacity Path(spfa+二分)
Delay Constrained Maximum Capacity Path Time Limit: 10000/10000 MS (Java/Others) Memory Limit: 65 ...
- Tyvj-1338 QQ农场
P1338 QQ农场 时间: 1000ms / 空间: 131072KiB / Java类名: Main 背景 Sandytea前段时间沉迷于QQ农场中……一天夜里,他梦见来到好友X的农场上…… 描述 ...
- hdu 5742 It's All In The Mind(2016多校第二场)
It's All In The Mind Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Oth ...