Civil3d 二次开发 获取纵断面桩号高程数据

 从曲面创建路线的曲面纵断面,获取桩号、高程数据用以分析、制图。

/// <summary>
        /// 获取纵断面数据
        /// </summary>
        public static List<DataInfo> createMainSurfaceProfile(Alignment operationAlignment, Surface mainSurface, double startStaion = -1, double endStation = -1)
        {
            List<DataInfo> result = new List<DataInfo>();

            var doc = Application.DocumentManager.MdiActiveDocument;
            var db = doc.Database;
            var cDoc = CivilApplication.ActiveDocument;

            using (var ts = db.TransactionManager.StartTransaction())
            {
                ObjectId surfaceId = mainSurface.ObjectId;
                //获取样式
                ObjectId layerId = operationAlignment.LayerId;
                ObjectId styleId;
                try
                {
                    styleId = cDoc.Styles.ProfileStyles["Basic"];
                }
                catch
                {
                    styleId = cDoc.Styles.ProfileStyles[0];
                }

                ObjectId labelSetId;
                try
                {
                    labelSetId = cDoc.Styles.LabelSetStyles.ProfileLabelSetStyles["Complete Label Set"];
                }
                catch
                {
                    labelSetId = cDoc.Styles.LabelSetStyles.ProfileLabelSetStyles[0];
                }

                double startS = startStaion == -1 ? operationAlignment.StartingStation : startStaion;
                double endS = endStation == -1 ? operationAlignment.EndingStation : endStation;

                //从曲面创建纵断面
                ObjectId profileId = Profile.CreateFromSurface("曲面纵断面", operationAlignment.ObjectId,
                    surfaceId, layerId, styleId, labelSetId, 0, startS, endS);
                Profile profile = (Profile)profileId.GetObject(OpenMode.ForWrite);

                ProfilePVICollection profilePVIs = profile.PVIs;

                foreach (ProfilePVI proPVI in profilePVIs)
                {
                    double station = Math.Round(proPVI.Station, 2);
                    double elevtion = Math.Round(proPVI.Elevation, 2);
                    DataInfo dataInfo = new DataInfo(station, elevtion);
                    result.Add(dataInfo);
                }


                //取指定桩号的高程
                //double xNum = (int)(profile.EndingStation / 5) + 1;
                //for (int i = 0; i < xNum; i++)
                //{
                    //double station = i * 5;
                    //if (station >= profile.StartingStation)
                    //{
                        //double el = Math.Round(profile.ElevationAt(i * 5), 2);
                        //DataInfo dataInfo = new DataInfo(i * 5, el);
                        //tableInfos.Add(dataInfo);
                    //}
                //}

                profile.Erase();
                ts.Commit();
            }

            return result;
        }

 上述代码中所用到的类  将数据转化成x、y的点。

public class DataInfo
    {
        private DataInfo()
        {

        }

        public DataInfo(double x, double y, double inCurvature = 0)
        {
            X = x;
            Y = y;
            curvature = inCurvature;
        }
        public double X { get; set; }
        public double Y { get; set; }
        public double curvature { get; set; }

        public override bool Equals(object obj)
        {
            if (!(obj is DataInfo))
            {
                return false;
            }
            DataInfo dataInfo = obj as DataInfo;
            if (dataInfo.X == X && dataInfo.Y == Y && dataInfo.curvature == curvature)
            {
                return true;
            }
            else
            {
                return false;
            }
        }

        public override int GetHashCode()
        {
            return string.Format("{0}|{1}|{2}", X, Y, curvature).GetHashCode();
        }
    }

有问题可评论区留言或私信。

通过获取的数据制图

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Civil 3D 是由 Autodesk 开发的一款面向土木工程和土地规划的软件。它提供了一系列功能强大的工具,用于设计、分析和文档化土地和基础设施项目。 要进行 Civil 3D二次开发,您可以使用 Autodesk 提供的开发环境和 API。具体来说,您可以使用以下方法来扩展和定制 Civil 3D 的功能: 1. .NET API:Civil 3D 提供了面向对象的 .NET API,可以使用 C# 或 VB.NET 等编程语言进行开发。您可以使用这些 API 访问和操作 Civil 3D 中的对象、属性和方法。 2. AutoLISP 和 Visual LISP:这些是针对 AutoCAD 平台的脚本语言,可以通过加载 LISP 文件来扩展 Civil 3D 的功能。您可以使用 AutoLISP 或 Visual LISP 脚本来自动执行特定的任务或创建自定义命令。 3. Dynamo:Dynamo 是一个开源的可视化编程工具,可以与 Civil 3D 集成。您可以使用 Dynamo 的节点和工作流来创建自定义脚本,以实现复杂的设计和分析操作。 4. 数据连接:Civil 3D 支持与外部数据源(如数据库、Web 服务等)进行连接和交互。您可以使用这些功能来集成其他系统或数据源,并在 Civil 3D 中进行数据交换和同步。 通过以上方法,您可以根据具体需求进行二次开发,例如创建自定义命令、自动化任务、数据导入导出、报表生成等。Autodesk 提供了大量的文档、示例代码和开发者社区,可以帮助您入门和解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值