首页 > 其他分享 >Civil 3D 删除不需要的标签表达式

Civil 3D 删除不需要的标签表达式

时间:2023-06-15 15:37:19浏览次数:40  
标签:obj1 obj 删除 Civil 标签 tr RemoveExpression doc 3D

正常情况下,

不需要的标签表达式应该能够手动删除,

不知道什么原因

有些表达式在创建后状态就成了“被引用”状态,

导致无法删除。

即使想修改名称也不行,

不得不采用编程的方式进行删除。

代码如下:

        public void m_RemoveExpression()
        {
            Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.CurrentDocument;
            Database db = doc.Database;
            Transaction tr = db.TransactionManager.StartTransaction();
            try
            {
                CivilDocument civilDoc = CivilDocument.GetCivilDocument(db);
                object obj = civilDoc.Styles;           //获取所有样式
                RemoveExpression(tr, obj, ref doc);         //修改样式
                tr.Commit();
                tr.Dispose();
            }
            catch (System.Exception ex)
            {
                tr.Commit();
                tr.Dispose();
                doc.Editor.WriteMessage("\n" + ex.Message);
            }
        }

递归方法,

遍历所有的样式....

找到需要删除的后删除之......

 private void RemoveExpression(Transaction tr, object obj, ref Document doc)
        {

            Type objType = obj.GetType();
            PropertyInfo[] properties = objType.GetProperties();
            foreach (PropertyInfo prop in properties)
            {
                Object obj1 = prop.GetValue(obj);
                if (IsEnumberable(obj1))
                {
                    #region try
                    try
                    {
                        PropertyInfo property = obj1.GetType().GetProperty("Expressions");
                        if (property != null)
                        {
                            #region 
                            ExpressionCollection exps = property.GetValue(obj1) as ExpressionCollection;
                            List<int> indexs = new List<int>();
                            for (int i = 0; i < exps.Count; i++)
                            {
                                if (exps[i].Description .Contains("删除"))
                                {
                                    indexs.Add(i);
                                }
                            }
                            for (int j = indexs.Count - 1; j >= 0; j--)
                            {
                                exps.RemoveAt(indexs[j]);
                            }
                            #endregion
                        }
                        else
                        {
                            IEnumerable enumerable = obj1 as IEnumerable;
                            IEnumerator enumerator = enumerable.GetEnumerator();
                            List<object> objs = new List<object>();
                            while (enumerator.MoveNext())
                            {
                                object obj2 = enumerator.Current;
                                objs.Add(obj2);
                            }
                            foreach (object obj2 in objs)
                            {
                                RemoveExpression(tr, obj2, ref doc);
                            }
                        }
                    }
                    catch (System.Exception ex)
                    {
                        //doc.Editor.WriteMessage("\n{0}\t{1}\t{2}",
                        //    ex.Message, objType.ToString(), obj.ToString());
                    }
                    #endregion
                }
                else if (prop.PropertyType.ToString().Contains("Root"))
                {
                    RemoveExpression(tr, obj1, ref doc);
                }
            }
        }
        bool IsEnumberable(Object obj)
        {
            if (obj is string) return false;
            IEnumerable enumerable = obj as IEnumerable;
            return (enumerable != null);
        }

要处理Civil 3d样式相关的东西,

反射是个好工具,

可惜本人对此并不熟悉,

试验了很长时间才写出了上面的代码。

 

 

标签:obj1,obj,删除,Civil,标签,tr,RemoveExpression,doc,3D
From: https://www.cnblogs.com/myzw/p/17483010.html

相关文章

  • 关于使用 z-swiper 3d流的的方法
    使用的是这个组件3D流|zebra-swiper(zebraui.com),是在uniapp中使用,本文章是为了解决一些使用这个组件时的需求来创作的。这个组件的功能是在uniapp上实现3d效果轮播图,效果可以,但是功能上差一些,需要我们自己来弥补。首先是滑动的时候会出现因为惯性效果页面上显示的已经到第4个但......
  • 标签
    a<!--给要跳转的地方设置name要点击的地方设置#name--><ahref="#del">点解跳转到del标签</a><ahref="#sup">点解跳转到sup标签</a><ahref="#mail">点解跳转到mail标签</a><ahref="http://baidu.com"target......
  • iOS 3DTouch
    概述iOS10系统登录中国,在系统中对3DTouch的使用需求更频繁,所以对iOS9中便引入的3DTouch功能做一些了解是很有必要的详细概述iOS10系统登录中国,在系统中对3DTouch的使用需求更频繁,所以对iOS9中便引入的3DTouch功能做一些了解是很有必要的在日常开发中,我们经......
  • Unity3D:场景视图视图选项
    推荐:将NSDT场景编辑器加入你的3D工具链3D工具集:NSDT简石数字孪生“场景视图视图选项”工具栏您可以使用“场景视图视图选项”工具栏“叠加”来选择用于查看场景以及启用/禁用照明和音频的各种选项。这些控件仅在开发期间影响场景视图,对构建的游戏没有影响。绘制模式(Drawmo......
  • 【论文阅读】MONAI Label:人工智能辅助的 3D 医学图像交互式标注框架
    Abstract缺乏带注释的数据集是训练监督AI算法的主要挑战,因为手动注释既昂贵又耗时。为了解决这个问题,我们提出了MONAILabel,这是一个免费的开源平台,有助于开发基于AI的应用程序,旨在减少注释3D医学图像数据集所需的时间。通过MONAILabel,研究人员可以开发专注于其专业领域的......
  • CSS(语义化标签、多媒体标签、新表单元素、属性选择器、结构伪类选择器、伪元素选择器
    一、HTML5新特性概述HTML5的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。这些新特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。1语义化标签(★★)以前布局,我们基本用div来做。di......
  • 深度学习图像标签标注软件labelme超详细教程
    文章目录前言一、labelme是什么?二、快速安装使用1.windows安装2.linux安装3.macos安装安装成功的哑子三、界面说明四、为图像创建类标签4.1参数介绍4.1文件夹所有文件创建分类标签4.2为文件夹所有文件创建分割标签5.其他问题5.1如何快速查看分割的json文件5.2json转png前......
  • jfreechart 1.0.19如何设置两个数据标签,一个在折线下方,一个在折线上方
    在JFreeChart1.0.19中,您可以使用CategoryPlot类的setItemLabelVisible(intseries,booleanvisible)方法来设置特定系列的数据标签是否可见。要设置两个数据标签,一个在折线下方,一个在折线上方,您可以按照以下步骤进行操作:1.获取CategoryPlot对象。2.使用CategoryPlo......
  • 使用iPhone相机和OpenCV来完成3D重建(第三部分)
    正文字数:4509 阅读时长:2分钟欢迎来到本教程的第三部分,也是最后一部分关于立体重建的教程。Postedby OmarPadierna url: https://medium.com/@omar.ps16/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-iii-95460d3eddf0快速回顾:在第一部分中,我们简要介......
  • 使用iPhone相机和OpenCV来完成3D重建(第一部分)
    正文字数:1497 阅读时长:2分钟这个教程将带你使用自己的手机摄像头和图片实现从零开始到点云。Postedby OmarPadierna https://becominghuman.ai/stereo-3d-reconstruction-with-opencv-using-an-iphone-camera-part-i-c013907d1ab5这是一个由3部分组成的系列文章。我注意到,其......