Civil 3D曲面高程分析
Civil 3d曲面分析功能很强大,
但其分析样式过于自由,
由于自由度过大,
用户的使用体验并不好(个人偏见,不一定对)。
Map3D中的样式,
可以使用USGS国家地理调色板的色带,
结果相对漂亮,
于是产生了将其移植到Civil 3D中的想法,
自己写了一部分代码,
运行结果如下:
代码片段(主要代码)如下:
public void SetElevationAnalysis() { string styName = "原始地形高程分析"; if (!SelectSurface()) return; using (Transaction tr = doc.TransactionManager.StartTransaction()) { TinSurface sur = surId.GetObject(OpenMode.ForWrite) as TinSurface; double minEle = sur.GetGeneralProperties().MinimumElevation; double maxEle = sur.GetGeneralProperties().MaximumElevation; sur.Analysis.SetElevationData(CreateElevationAnalysis(minEle, maxEle)); if (GetStyleByName(styName)) { (_comDoc.ObjectIdToObject(surId.OldIdPtr.ToInt64()) as AeccTinSurface).set_Style(styName); } sur.Rebuild(); tr.Commit(); } }
上面代码中的CreateElevationAnalysis方法如下:
用来生成曲面高程分析数据。
private SurfaceAnalysisElevationData[] CreateElevationAnalysis(double minEle, double maxEle) { double min = (Math.Floor(minEle / 5)) * 5; double max = Math.Ceiling(maxEle); double step = Math.Ceiling((max - min) / 22); Color[] colors = new Color[] { Color.FromRgb(116,156,92 ), Color.FromRgb(116,172,100), Color.FromRgb(148,188,116), Color.FromRgb(180,212,116), Color.FromRgb(204,228,148), Color.FromRgb(220,236,164), Color.FromRgb(244,236,164), Color.FromRgb(236,220,156), Color.FromRgb(244,204,132), Color.FromRgb(236,180,132), Color.FromRgb(220,156,124), Color.FromRgb(196,140,124), Color.FromRgb(212,156,148), Color.FromRgb(228,172,164), Color.FromRgb(220,188,180), Color.FromRgb(236,196,212), Color.FromRgb(252,204,228), Color.FromRgb(252,220,236), Color.FromRgb(252,228,224), Color.FromRgb(252,220,228), Color.FromRgb(252,244,252), Color.FromRgb(252,252,252) }; SurfaceAnalysisElevationData[] datas = new SurfaceAnalysisElevationData[22]; for (int i = 0; i < 22; i++) { datas[i] = new SurfaceAnalysisElevationData(min + (step * i), min + (step * (i + 1)), colors[i]); } return datas; }
GetStyleByName方法如下:
用来获取曲面样式。
bool GetStyleByName(string styName) { var styles = civilDoc.Styles.SurfaceStyles; if (!styles.Contains(styName)) { using (Transaction tr = doc.TransactionManager.StartTransaction()) { ObjectId id = styles.Add(styName); SurfaceStyle sty = id.GetObject(OpenMode.ForWrite) as SurfaceStyle; sty.CreateBy = "\u738B\u78CA"; if (styName.Contains("高程") || styName.Contains("高度")) { sty.GetDisplayStylePlan(SurfaceDisplayStyleType.Elevations).Visible = true; sty.GetDisplayStyleModel(SurfaceDisplayStyleType.Elevations).Visible = true; } if (styName.Contains("坡度")) { sty.GetDisplayStylePlan(SurfaceDisplayStyleType.Slopes).Visible = true; sty.GetDisplayStyleModel(SurfaceDisplayStyleType.Slopes).Visible = true; } tr.Commit(); } } return (civilDoc.Styles.SurfaceStyles.Contains(styName)); }
SelectSurface()方法用来获取surId,
你可以自行完成,
_comDoc是com文档,
用来设置曲面样式,
.netapi不全,
不得不借助com api来实现,
这部分内容可以参考《Autocad Civil 3D .net 二次开发》中相关章节的内容。
有了以上代码,
相信您可以很快的编译出自己的命令,
来实现Civil 3D曲面的高程分析样式设置。
标签:
Civil3d
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?