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曲面的高程分析樣式設置。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM