zoukankan      html  css  js  c++  java
  • 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 = "u738Bu78CA";
                        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曲面的高程分析样式设置。
  • 相关阅读:
    CSS3 颜色渐变、阴影、渐变的阴影
    AxureRP分页签 / Tab选项卡切换功能~
    这是我的第一篇博客!
    天池nlp新人赛_task6
    天池nlp新人赛_task5
    天池nlp新人赛_task4
    天池nlp新人赛_task3.对TF-IDF进一步认识
    天池nlp新人赛_task2:数据预处理改进和一些思路
    天池nlp新人赛_task1
    希尔伯特空间
  • 原文地址:https://www.cnblogs.com/myzw/p/12744731.html
Copyright © 2011-2022 走看看