请问老师,这个【创建复合地形模型】工具的有没有开放的接口啊?
您可以通过dtm的merge方法,将新的dtm合并到原有的dtm中,以下代码是我之前做dtm的部分代码,您可以参考下:
ConsensusConnection m_connect = null; protected override bool OnDataButton(Bentley.DgnPlatformNET.DgnButtonEvent ev) { Bentley.DgnPlatformNET.HitPath hitPath = DoLocate(ev, true, 1); if (hitPath == null) return false; Element el = hitPath.GetCursorElement(); var curveVector = Bentley.DgnPlatformNET.Elements.CurvePathQuery.ElementToCurveVector(el); if (curveVector == null) { return false; } DgnModel model = Bentley.MstnPlatformNET.Session.Instance.GetActiveDgnModel(); var uorPerMeter = model.GetModelInfo().UorPerMeter; if (m_connect == null) m_connect = new Bentley.CifNET.SDK.ConsensusConnection(model); GeometricModel geomodel = m_connect.GetActiveGeometricModel(); DTM nDtmInput = new DTM(); foreach (TerrainSurface ti in geomodel.TerrainSurfaces) { if (ti.DTM == null) { continue; } Bentley.TerrainModelNET.DTM dtmObject = ti.DTM; System.Collections.Generic.List<DPoint3d> pts = new System.Collections.Generic.List<DPoint3d>(); FacetOptions options = new FacetOptions(); options.ChordTolerance = 0.001; //Stroke curveVector curveVector = curveVector.Stroke(options); //drop curve foreach (CurvePrimitive primitive in curveVector) { if (primitive.TryGetLineString(pts)) { System.Collections.Generic.List<DPoint3d> pointCurrs = new System.Collections.Generic.List<DPoint3d>(); foreach (DPoint3d pointCurr in pts) { pointCurr.ScaleInPlace(1 / uorPerMeter); pointCurrs.Add(pointCurr); } // dtmObject.Clip(pointCurrs, DTMClippingMethod.Internal); //Clip and Clone DTMS Bentley.TerrainModelNET.DTM currentDTM = dtmObject.CloneAndClip(pointCurrs, DTMClippingMethod.External); PointsBrowsingCriteria pointCriteria = new PointsBrowsingCriteria(); Bentley.TerrainModelNET.PointsBrowsingDelegate pointsDelegate = delegate (Bentley.GeometryNET.DPoint3d[] array, object o) { int nNums = array.Length; for (int i = 0; i < array.Length; i++) { array[i].Z = m_elevation; } DTMFeatureId spotId = nDtmInput.AddPointFeature(array); // Triangulate nDtmInput.Triangulate(); return true; }; //Browse Points in DTM currentDTM.BrowsePoints(pointCriteria, pointsDelegate, null); } } // Merge Cloned DTM's dtmObject.Merge(nDtmInput); dtmObject.Commit(); } return true; }
Answer Verified By: lai xingguang
张工,Merge模型中多个DTM为一个复合DTM之后,再把该复合DTM加入模型,发现该DTM的形态像是被裁剪过一样。这种情况正常吗? Merge函数是把多个DTM元素单纯地合并为一个元素,还是说包含其他行为?
只是单纯从几何上合并。如果出现被裁剪的,感觉是重复的地方切了再边界merge。