[ORD] 创建复合地形模型

请问老师,这个【创建复合地形模型】工具的有没有开放的接口啊?

Parents
  • 您可以通过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。

Reply Children
No Data