civil 3d 体积曲面提取等高线
为了求两个曲面的交线,
采用创建体积曲面并提取高程为0的等高线方法来迂回实现,
因缺少.net api,
不得不使用com api,
对于不熟悉Com用法的朋友(比如我自己),
可能会卡在这样那样的问题上,
这些问题在网络上能搜索到的有效信息比较少,
因而解决起来也比较麻烦。
难点在于类型的转换,
吃不准对象的类型,
转换就会失败。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | private void CreateSurfaceIntersectionLines( ref List<Point2dCollection> ptss) { //获取曲面样式Id ObjectId volumeSurfaceStyleId = GetVolumeSurfaceStyleId(); //创建体积曲面 var volumeSurfaceId = TinVolumeSurface.Create( "辅助体积曲面" , egSurfaceId, gradingSurfaceId, volumeSurfaceStyleId); //获取Com对象 AeccTinVolumeSurface aeccTVS = _comDoc.ObjectIdToObject((volumeSurfaceId.OldIdPtr).ToInt64()) as AeccTinVolumeSurface; //提取等高线 IEnumerable contours = aeccTVS.ExtractContour(AeccDisplayOrientation.aeccDisplayOrientationPlan, AeccSurfaceFilterType.aeccSFMajorContours, -0.0001, 0.0001) as IEnumerable; //顶点集合,可能存在多条等高线,所以需要用集合 //List<Point2dCollection> ptss = new List<Point2dCollection>(); foreach ( var contour in contours) { //转换为AcadLWPolyline,起初转为AcadPolyline,类型不对 AcadLWPolyline pl = contour as AcadLWPolyline; if (pl != null ) { Point2dCollection pts = new Point2dCollection(); //坐标是以doulbe数组形式存储的 double [] cors = pl.Coordinates as double []; for ( int i = 0; i < cors.Length - 2; i += 2) { pts.Add( new Point2d(cors[i], cors[i + 1])); } ptss.Add(pts); //删除多段线 pl.Delete(); } } //删除辅助体积曲面 aeccTVS.Delete(); } |
标签:
Civil3d
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· NetPad:一个.NET开源、跨平台的C#编辑器
· PowerShell开发游戏 · 打蜜蜂