/// <summary>/// 将输入边曲线按照首尾相连的方式进行重新排序/// </summary>/// <param name="allEdges">输入边曲线(需要调用方保证输入曲线为闭环曲线)</param>/// <returns></returns>public static List<Edge> CurveEdgeSort(this List<Edge> allEdges){try{List<Edge> sortedEdges = new List<Edge>();  //存放排序后的线段Point3d tmpPoint3d = new Point3d();  //记录上一条线段的终点for (int i = 0; i < allEdges.Count; i++){if (i == 0)  //如果是第一次循环,则直接将第一条线段加入到集合中{sortedEdges.Add(allEdges[i]);continue;}for (int j = 0; j < allEdges.Count; j++){if (sortedEdges.Contains(allEdges[j]))    //如果当前遍历的线段 在集合中已存在,则跳过本次循环continue;allEdges[j].GetVertices(out Point3d p1, out Point3d p2);  //获取当前线段的两个端点sortedEdges[sortedEdges.Count - 1].GetVertices(out Point3d q1, out Point3d q2);//获取集合中最后一条线段的两个端点if (sortedEdges.Count == 1) //如果集合中只有一条线段,则在当前线段中任选一个端点(p1)与集合中的两个端点比较{//如果p1与q1或者q2相等,则添加这条线段到集合中,并将p2赋值给tmpPoint3d用于下次比较。if (ComperTwoPoint3dIsEquals(q1, p1) || ComperTwoPoint3dIsEquals(q2, p1)){sortedEdges.Add(allEdges[j]);tmpPoint3d = p2;continue;}}else{if (ComperTwoPoint3dIsEquals(tmpPoint3d, p1)) //如果p1与上次记录的终点相等,则添加线段,并将p2作为下次比较的对象{sortedEdges.Add(allEdges[j]);tmpPoint3d = p2;continue;}if (ComperTwoPoint3dIsEquals(tmpPoint3d, p2)) //如果p2与上次记录的终点相等,则添加线段,并将p1作为下次比较的对象{sortedEdges.Add(allEdges[j]);tmpPoint3d = p1;continue;}}}}bool ComperTwoPoint3dIsEquals(Point3d pA, Point3d pB){return pA.X.Eq(pB.X) && pA.Y.Eq(pB.Y) && pA.Z.Eq(pB.Z);}return sortedEdges;}catch (Exception ex){theUI.NXMessageBox.Show("提醒", NXMessageBox.DialogType.Error, $"闭环边曲线排序函数引发异常,异常原因:{ex.Message}");return allEdges;  //引发异常时返回原数据}}

NX二次开发 NXOPEN 将乱序封闭曲线按照首尾相连方式重新排序相关推荐

  1. UG NX二次开发(C#)-建模-判断一条曲线是不是封闭

    在UG NX二次开发(c#)时,判断一个边(曲线)是不是封闭的,采用两个端点是不是相同来判断.其代码如下: Point3d point3D1;Point3d point3D2;bool isClose ...

  2. NX二次开发-NXOPEN C# Part.GetPreviewImage读取prt文件预览图

    NXOpen C#有专门读取Prt文件预览图的方法 我刚才又找了一下,NXOpen C++也有 西门子GTAC官方上的一个.net例子(我没有webkey账号,代码是从上面大神博客转载的) NX AP ...

  3. NX二次开发-NXOpen::Drawings::DrawingSheet Class Reference

    1 NX11+VS20132 3 4 #include <NXOpen/Section.hxx>5 #include <NXOpen/SectionCollection.hxx> ...

  4. [NXOpen] Siemens NX 二次开发 (c#) 安装,配置,新建项目,调试, 调用程序

    1. 软件版本 坐标德国,目前使用的是由学校给学生免费提供的正版Siemens NX 12.0.2,编程软件的版本是Visual Studio 2019 Community 2. 官方文档 因为工作原 ...

  5. UG/NX二次开发Siemens官方NXOPEN实例解析—1.6 BlockStyler/SelectionExample

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-1.1 BlockStyler/ColoredBlock UG/NX二次开发Siemens官方NXOPEN实例解析-1.2 Blo ...

  6. UG/NX二次开发Siemens官方NXOPEN实例解析—2.8 DrawingCycle(图纸打印)

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-2.1 AssemblyViewer(树列表) UG/NX二次开发Siemens官方NXOPEN实例解析-2.2 Selectio ...

  7. UG/NX二次开发Siemens官方NXOPEN实例解析—1.8 BlockStyler/UDB_CreateCylinder

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-1.1 BlockStyler/ColoredBlock UG/NX二次开发Siemens官方NXOPEN实例解析-1.2 Blo ...

  8. UG/NX二次开发Siemens官方NXOPEN实例解析—1.2 BlockStyler/EditExpression

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-1.1 BlockStyler/ColoredBlock UG/NX二次开发Siemens官方NXOPEN实例解析-1.2 Blo ...

  9. UG/NX二次开发Siemens官方NXOPEN实例解析—2.7 DiameterSymbol(标注符号)

    列文章目录 UG/NX二次开发Siemens官方NXOPEN实例解析-2.1 AssemblyViewer(树列表) UG/NX二次开发Siemens官方NXOPEN实例解析-2.2 Selectio ...

最新文章

  1. 新闻行业中,自然语言理解技术该如何应用?
  2. 如何将模糊的图片变得清晰
  3. wordpress 常用函数-wpdb类
  4. python实现观察者模式_举例讲解Python设计模式编程中的访问者与观察者模式
  5. 小项目,吃货联盟,java初级小项目,源代码
  6. 中学计算机教室怎么布置,初中功能教室设置标准及数量
  7. unity设置一个物体是另一个物体的子物体
  8. 指向指针的指针与二维数组的区别
  9. 信号系统与数字信号处理一点点心得
  10. 模糊控制 之 模糊集,隶属函数,模糊关系
  11. 分享个短视频竞品分析报告
  12. 【堆排序的递归和非递归实现】Java实现
  13. 《论文阅读》D3DLO: DEEP 3D LIDAR ODOMETRY
  14. 曙光超级计算机用的芯片是国产吗,真正中国芯片龙头是中科曙光
  15. charles问题?chls.pro/ssl证书安装后还是出现unknown问题?
  16. Android 4.0.4系统下实现apk的静默安装和启动
  17. android磁场传感器页面布局在哪,教程:Android传感器—传感器查询demo
  18. OpenCV+百度云人脸识别项目及源码
  19. python画魄罗代码_LOL:灵魂画师在这里!玩家手绘冰雪节魄罗
  20. Curator基本操作(Zookeeper节点增删改查)

热门文章

  1. 送某位经济学高才生一个小故事...
  2. 橙光游戏2.17 0614 版本操作笔记
  3. 长字符串匹配(BWT编码、后缀数组、倍增算法、FM索引)
  4. 最新完整版外卖人8.7完美运营版PHP源码带配送端+修复APK编译包
  5. linux如何正确关机
  6. 获取本地计算机的网络信息
  7. 【类似于windows的WinRAR软件】MacOS电脑好用的压缩、解压软件都有哪些?【推荐Keka】
  8. APP客服系统搭建,手机APP如何接入在线客服系统?
  9. 一定要了解的小常识:聚合支付有语音播报功能
  10. Kotlin高仿微信-第11篇-单聊-语音