//获取地形 foreach (TerrainSurface terrain in geomModel.TerrainSurfaces) { //如果地形不为空 if(terrain!= null) { //拿到dtm对象 DTM dtm = terrain.DTM; //计算CutFillResult CutFillResult result = dtm.CalculateCutFillVolume(dtm, null); //填挖方 double CutVolumeValue = result.CutVolume; double FillVolumeValue = result.FillVolume; break; } }
老师我看了论坛资料自己写的计算填挖方的方法,但是不知道为什么TerrainSurface为null,我的思路正确么?
您的地形是ms的,不是通过ord界面创建的,所以没办法通过ord的sdk这套获取地模数据。
您可以通过下面代码获取DTM:
if (element is Bentley.TerrainModelNET.Element.DTMElement) { Bentley.TerrainModelNET.Element.DTMElement dtmElement = element as Bentley.TerrainModelNET.Element.DTMElement; Bentley.TerrainModelNET.DTM dtm = null; dtm = dtmElement.GetDTM(); }
老师 这个element是
foreach (TerrainSurface terrain in geomModel.TerrainSurfaces) {
}
中的terrain转化的嘛
不是的,你可以通过ScanCriteria类去扫描模型里的所有图形元素,然后根据获得的元素判断是否是地模。
Answer Verified By: new coder
ScanCriteria sc = new ScanCriteria(); sc.SetModelRef(Session.Instance.GetActiveDgnModel()); sc.SetModelSections(DgnModelSections.GraphicElements); sc.SetDrawnElements(); List<Element> elmtsList = new List<Element>(); ScanDelegate scanDelegate = (Element elmt, DgnModelRef modelRef) => { elmtsList.Add(elmt); return StatusInt.Success; }; sc.Scan(scanDelegate);
老师我查阅了论坛资料,如上所写,但是没有拿到元素,是个list是空,我是不是少了什么设置呢?
我用您上边的代码测试是能获取到的呀,您在最后一条语句后边加上MessageBox.Show(elmtsList.Count.ToString());可以弹出元素的个数,另外请确认您当前Model里边是否有图形元素,参考里边的元素这里是不会扫描到的,因为您前边只设置了扫描当前model