Zookeeper安装 forms matrix uiwebview wso2 vue全局组件 jq延时 jquery延时 css获取最后一个元素 华为路由器ipv6配置 edate函数的使用方法 wordpress本地建站 oracle可视化工具 mysql时间戳转日期 python断言assert实例 python运算 python的str javamysql java获取当前年 java终止线程 jdk环境配置 java获取时间 java数组转集合 java集成开发环境 球中的小鬼 vbscript程序员参考手册 三维看图软件 oem修改器 快打旋风3出招表 为什么英雄联盟无法连接服务器 vs2003 p6软件 苹果双微信 明解c语言 go程序设计语言 视频后期处理软件 wegame更新失败 t470拆机 网红照片男 无主之地2联机超时
当前位置: 首页 > 学习教程  > 编程学习

C#之CAD二次开发实例 (13) 图层操作

2021/1/9 1:53:38 文章标签: cad图层无法删除

# 0. 引言 图层在CAD中也是一个重要的角色,自然而然二次开发也必不可少,先来回顾一下图形数据库,也就是下面这个东西 Database db HostApplicationServices.WorkingDatabase; 图形数据库中包含了很多表(Tables),就像之…

# 0. 引言

 

图层在CAD中也是一个重要的角色,自然而然二次开发也必不可少,先来回顾一下图形数据库,也就是下面这个东西

 

Database db = HostApplicationServices.WorkingDatabase;

 

 

图形数据库中包含了很多表(Tables),就像之前使用的块表一样,图层的操作也有一个叫做层表的东西(LayerTable),每一个层表也对应着一个相应的层表记录

之前说过块表(BlockTable),每一个块表对应一个块表记录(BlockTableRecord),模型空间,布局空间都是属于块表记录,绘图相当于是将其放在了块表记录的模型空间里面

同样操作图层也是在操作层表记录

而Database又通过维护下面图中所示的九张表格记录着相应的内容

搞不清楚这些表不要紧,目前先记住前两个

捋清楚上面就可以开始下一步了

下面通过几个关于图层操作的例子来消化图层操作

# 1. 获取所有图层名称

 

这里也是封装到方法里面,供以后调用

 

# 2. 删除图层

 

 

# 3. 删除所有未使用的图层

# 4. 强行删除图层及图层上的所有实体对象

        /// <summary>
        /// 强行删除图层及图层上的所有实体对象
        /// </summary>
        /// <param name="db">图形数据库</param>
        /// <param name="layerName">图层名</param>
        /// <param name="delete"></param>
        /// <returns></returns>
        public static bool DeleteLayer(this Database db, string layerName,bool delete)
        {

            if (layerName == "0" || layerName == "Defpoints") return false;
            bool isDeleteOK = false;
            using (Transaction trans = db.TransactionManager.StartTransaction())
            {
                LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);
                lt.GenerateUsageData();
                if (lt.Has(layerName))
                {
                    LayerTableRecord ltr = (LayerTableRecord)lt[layerName].GetObject(OpenMode.ForWrite);
                    if (delete)
                    {
                        if (ltr.IsUsed)
                        {
                            ltr.deleteAllEntityInLayer();  
                        }
                        if (db.Clayer == ltr.ObjectId)
                        {
                            db.Clayer = lt["0"];
                        }
                        ltr.Erase();
                        isDeleteOK = true;
                    }
                    else
                    {
                        if (!ltr.IsUsed && db.Clayer != lt[layerName])
                        {
                            ltr.Erase();
                            isDeleteOK = true;
                        }
                    }   
                }
                else
                {
                    isDeleteOK = true;
                }
                trans.Commit();
            }
            return isDeleteOK;
        }

 

# 5. 删除指定图层上的所有实体对象

 

 

完整代码自取地址:

https://gitee.com/yuzhaokai/cad_secondary_development_code.git​gitee.com

 

 

原文请关注公众号:数据智能笔记

说明一下:图片为什么带水印,我是从我的知乎转载过来的,我要在知乎和公众号一起发文,所以没有多余时间再编辑一个平台了,可以关注我的公众号看原文!

 


本文链接: http://www.dtmao.cc/news_show_1100060.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?