修改采样线名称

问题来源:

在Autodesk论坛中,一位朋友提出了这样一个问题:要把路线曲线点、超高点等特征信息在横断面图标题中显示出来,注意是横断面图。

解决方法:

如果直接解决这个问题,貌似不可行,但可以稍稍绕一点路,通过采样线名称来实现——把采样线名称当做横断面图的标题!

这样以来,我们只需修改采样线名称即可!手工修改应该不大现实,我们可以通过简单的代码来实现!

代码如下:

注意这只是测试代码,测试前提假定路线有一个采样线编组,如果采样线编组多于一个,代码也只能修改第一个采样线编组中采样线的名称。

超高点、纵断面点的操作类似,代码没有给出,有兴趣的朋友可以自行完成。

using System;
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.Civil.ApplicationServices;
using Autodesk.Civil.DatabaseServices;
using Autodesk.Civil.Settings;

namespace ProfileTools
{
    class RenameSampleline
    {
        Document doc;
        Editor ed;
        CivilDocument civilDoc;
        public RenameSampleline()
        {
            doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            ed = doc.Editor;
            civilDoc = Autodesk.Civil.ApplicationServices.CivilApplication.ActiveDocument;

        }
        public void DoSth()
        {
            PromptEntityOptions opt = new PromptEntityOptions(
                "\n选择路线");
            opt.AllowNone = true;
            opt.SetRejectMessage("\n选定的图元必须属于类型:采样线!");
            opt.AddAllowedClass(typeof(Alignment), false);
            PromptEntityResult res = doc.Editor.GetEntity(opt);
            if (res.Status != PromptStatus.OK) return;
            using (Transaction tr = doc.Database.TransactionManager.StartTransaction())
            {
                Alignment al = res.ObjectId.GetObject(OpenMode.ForRead) as Alignment;

                if (al != null)
                {
                    ObjectIdCollection ids = al.GetSampleLineGroupIds();
                    if (ids.Count > 0)
                    {
                        Station[] stas = al.GetStationSet(StationTypes.All);
                        SampleLineGroup slg = ids[0].GetObject(OpenMode.ForRead) as SampleLineGroup;
                        if (slg != null)
                        {
                            ids = slg.GetSampleLineIds();
                            foreach (ObjectId id in ids)
                            {
                                SampleLine sl = id.GetObject(OpenMode.ForWrite) as SampleLine;
                                double sta = sl.Station;

                                sl.Name= GetStaStr(stas, sta);
                            }
                        }
                    }

                }
                tr.Commit();
            }
        }

        private string GetStaStr(Station[] stas, double sta)

        {
            string str = "";
            foreach (Station station in stas)
            {
                if (Math.Abs(station.RawStation - sta) < 0.002)
                {
                    AlignmentGeometryPointStationType types = station.GeometryStationType;

                    switch(types)
                    {
                        case AlignmentGeometryPointStationType.BegOfAlign:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.AlignmentBeginning);
                            break;
                        case AlignmentGeometryPointStationType.EndOfAlign:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.AlignmentEnd);
                            break;
                        case AlignmentGeometryPointStationType.TanTan:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.TangentTangentIntersect);
                            break;
                        case AlignmentGeometryPointStationType.TanCurve:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.TangentCurveIntersect);
                            break;
                        case AlignmentGeometryPointStationType.CurveTan:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.CurveTangentIntersect);
                            break;
                        case AlignmentGeometryPointStationType.CurveCompCurve:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.CompoundCurveCurveIntersect);
                            break;
                        case AlignmentGeometryPointStationType.CurveRevCurve:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.ReverseCurveCurveIntersect);
                            break;
                        case AlignmentGeometryPointStationType.TanSpiral:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.TangentSpiralIntersect);
                            break;
                        case AlignmentGeometryPointStationType.SpiralTan:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.SpiralTangentIntersect);
                            break;
                        case AlignmentGeometryPointStationType.CurveSpiral:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.CurveSpiralIntersect);
                            break;
                        case AlignmentGeometryPointStationType.SpiralCurve:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.SpiralCurveIntersect);
                            break;
                        case AlignmentGeometryPointStationType.SpiralCompSpiral:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.SpiralSpiralIntersect);
                            break;
                        case AlignmentGeometryPointStationType.SpiralRevSpiral:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.AlignmentGeoPointText.GetAlignmentAbbreviation(AbbreviationAlignmentType.ReverseSpiralIntersect);
                            break;
                        case AlignmentGeometryPointStationType.ProfileTanCurve:
                            str = civilDoc.Settings.DrawingSettings.AbbreviationsSettings.Profile.GetProfileAbbreviation(AbbreviationProfileType.BeginVerticalCurve);
                            break;

                    }
                    break;
                }
            }
            if (str=="")
            {
                return sta.ToString("0+000.00");
            }
            return str+"_"+sta.ToString("0+000.00");
        }
    }
}

测试结果如下:

这些简写,可以通过修改图形设置进行自定义。

原文地址:https://www.cnblogs.com/myzw/p/8449282.html

时间: 2024-11-10 16:22:15

修改采样线名称的相关文章

六 创建横断面图及采样线的编辑

在前面的道路模型的章节中有讲过如何创建采样线及计算工程量,今天就给大家讲一下如何通过采样线创建横断面图及采样线的有关编辑和注意事项. 首先讲一下采样线有关编辑和注意事项. 有时我们会发现在创建完采样线后发现采样线宽度过宽,想调整的小一点.如下图所示,左侧的较宽,右侧比价合适.    在模型空间中任意选中一根采样线,在面板中会自动出现有关采样线的常用操作集合. 然后点击[编辑采样线]命令,弹出[采样线]工具条 这时,鼠标会变成拾取框重新拾取采样线(因为前面选取的采样线会在[采样线]工具条弹出后,暂

Azure PowerShell (2) 修改Azure订阅名称

<Windows Azure Platform 系列文章目录> 为什么要修改订阅名称? 这里主要有两个原因: (1)最近发现一个问题,国内世纪互联运维的Azure,默认的订阅名称是中文的,如"企业客户试用账号"等. 但是在英文的操作系统中,使用PowerShell选择的订阅的时候,中文的订阅名称会变成乱码. (2)在某些情况下,客户的IT部门要通过订阅的名称来区分不同的用途.而Windows Azure默认的订阅名称无法满足这样的需求. 这里笔者以世纪互联运维的Window

修改NGINX版本名称为任意WEB SERVER

下载好Nginx的安装文件nginx-1.6.0.tar.gz,并把它解压. wget http://nginx.org/download/nginx-1.6.0.tar.gz tar xzvf nginx-1.2.3.tar.gz 然后我们修改src/core/nginx.h. #define NGINX_VERSION "1.2.3" #define NGINX_VER "nginx/" NGINX_VERSION #define NGINX_VAR "

myeclipse如何修改Web项目名称,eclipse如何修改项目名字

myeclipse如何修改Web项目名称 1.复制一个现有的项目,重命名项目名称 2.这里的项目名称重新命名了,但是Web项目本质下的名称还是没有改变的.所以需要更改,更改方法-->选择项目右击"属性" 3.搜索"web",找到web选项 4.将Web-context-root重新命名为(你需要的名字) eclipse如何修改项目名字 1:修改项目目录下:.project文件 <?xml version="1.0" encoding=

Android 使用Log4j把日志写入SD卡,动态修改输出文件名称

一.Log4j简单使用 1. 下载log4j.jar http://logging.apache.org/log4j/2.x/ 2. 创建Java代码 public class Loggers { public static Logger logger = Logger. getLogger(Loggers. class); public static void init() { try { PatternLayout patternLayout = new PatternLayout(); p

两步修改CentOS主机名称

在CentOS系统中,修改主机名称的步骤如下: 1. 修改network文件 编辑network文件,配置如下: vi /etc/sysconfig/network 配置 NETWORKING=yes HOSTNAME=Hadoop-cluster 2 加载配置 hostname Hadoop-cluster hostname Hadoop-cluster 两步修改CentOS主机名称,布布扣,bubuko.com

爆微信公众平台个人类账号一年内可主动修改一次名称

本周二时ytkah接收了一条微信公众号的消息,提示[公众号“***”已更改名称为“***”],当时还不明就里,以为是运营者发的,就没怎么关注,后面有部分网友反映,微信个人公众号可以改名了,每年可主动改名一次.看来是真的.之前我们说过微信认证时可以改名,现在应该更简单了. 在公众平台有提示:个人类账号一年内可主动修改一次名称.修改个人公众号名称的步骤并不复杂,首先需要扫描二维码验证(验证必须绑定本人银行卡).之后同意修改名称的协议.修改名称(名称长度为3—30个字符)之后确认修改就可以了. 值得一

修改Azure订阅名称

Azure的订阅名称默认为"Windows Azure Enterprise" 或"Windows Azure 企业",这样的话如果是EA用户,创建了很多子账户,管理员无法直观的看出每个订阅是谁在使用,如下图 但是这个订阅名称其实是可以修改的,可以修改为能够更直观的名称.接下来我们就来看下如何修改Azure订阅名称. 首先登录到Azure管理界面,然后点击右上角的账户,如下图 然后点击查看我的账单 点击Windows Azure Enterprise 点击编辑订阅信

ios xcode如何修改应用的名称

ios xcode如何修改应用的名称 当你创建一个project时,会要求你输入product name & company identifier,这两个property的值should和你在apple developer member center的"Provisioning Portal"的"App IDs"里创建的bundle identifier (NOT App ID)匹配!如果不匹配的话,push notification feature和clo