AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
我理解的图层的作用大概是把相同作用的功能聚集在一起,以便好选择。比如,把一副图块中的所有标注定义为一个图层,把编号定义为一个图层,把相同的块参照定义为一个图层。图层表的操作和块表的操作类似。

在这里我就分享一下自己从书《AUTOCAD VBA&VB.NET开发基础与实例教程(C#版) 第2版》学习到的关于图层的一些操作的代码,我觉得主要是图层的删除需要注意一下。

使用的成员变量:

Document Doc = Application.DocumentManager.MdiActiveDocument;
Editor Ed = Application.DocumentManager.MdiActiveDocument.Editor;
Database Db = Application.DocumentManager.MdiActiveDocument.Database;

一、图层的删除 代码:

        /// <summary>
/// 图层0和图层Defpoints不能被删除,当前图层不能被删除,图层上有块参照,实体时不能被删除
/// 删除前需刷新,使用LayerTableRecord.GenerateUsageData();
/// </summary>
public bool DeleteLayer(Database db, string layerName)
{ using (var trans = db.TransactionManager.StartTransaction())
{ var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForWrite) as LayerTable; if (!lyTbl.Has(layerName)) return false; if (layerName == "" || layerName == "Defpoints") return false; ObjectId oId = lyTbl[layerName]; if (oId == db.Clayer) return false; var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord; lyTbl.GenerateUsageData(); if (lyTblRec.IsUsed) return false; lyTblRec.UpgradeOpen(); lyTblRec.Erase(true); trans.Commit(); return true;
}
}

二、图层的增加:

public ObjectId AddLayer(Database db, string layerName)
{
ObjectId oId = ObjectId.Null; using (var trans = db.TransactionManager.StartTransaction())
{
var lyerTbl = db.LayerTableId.GetObject(OpenMode.ForWrite) as LayerTable; if (lyerTbl.Has(layerName))
{
trans.Commit();
return lyerTbl[layerName];
}
var lyerTblRec = new LayerTableRecord();
lyerTblRec.Name = layerName; lyerTbl.Add(lyerTblRec);
trans.AddNewlyCreatedDBObject(lyerTblRec, true); lyerTbl.DowngradeOpen(); trans.Commit(); return lyerTbl[layerName];
}
}

三、修改图层颜色:

 public bool SetLayerColor(Database db, string layerName, short colorIndexs)
{ using (var trans = db.TransactionManager.StartTransaction())
{ var lyTbl = db.LayerTableId.GetObject(OpenMode.ForRead) as LayerTable; if (lyTbl.Has(layerName))
{
var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForWrite) as LayerTableRecord; if (colorIndexs < || colorIndexs > )
{
colorIndexs = ;
}
lyTblRec.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndexs); lyTblRec.DowngradeOpen(); trans.Commit();
return true; }
else
{
return false;
}
}
}

四、遍历图层:

public List<LayerTableRecord> GetAllLayer(Database db)
{
List<LayerTableRecord> listLyTblRec = new List<LayerTableRecord>(); using (var trans = db.TransactionManager.StartTransaction())
{ var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; foreach (ObjectId oId in lyTbl)
{ var lyTblRec = trans.GetObject(oId, OpenMode.ForRead) as LayerTableRecord; listLyTblRec.Add(lyTblRec); } return listLyTblRec;
}
}

五、设置当前图层:

Databse.Clayer表示当前图层
public bool SetCurrentLayer(Database db, string layerName)
{ using (var trans = db.TransactionManager.StartTransaction())
{ var lyTbl = trans.GetObject(db.LayerTableId, OpenMode.ForRead) as LayerTable; if (!lyTbl.Has(layerName)) return false; //var lyTblRec = trans.GetObject(lyTbl[layerName], OpenMode.ForRead) as LayerTableRecord; if (db.Clayer != lyTbl[layerName])
{
db.Clayer = lyTbl[layerName];
}
return true;
} }

六、冻结图层:

 [CommandMethod("ECDLayerHide")]
public void HiddenSelectLayer()
{
var propSel = new PromptSelectionOptions(); var propRes = Ed.GetSelection(propSel); if (propRes.Status != PromptStatus.OK)
{ return; } ObjectId[] oIds = propRes.Value.GetObjectIds(); using(var trans = Db.TransactionManager.StartTransaction())
{ var lyTbl = trans.GetObject(Db.LayerTableId, OpenMode.ForRead) as LayerTable; var blkTbl = trans.GetObject(Db.BlockTableId, OpenMode.ForRead) as BlockTable; for (int i = ; i < oIds.Length; i++)
{ var ent = trans.GetObject(oIds[i], OpenMode.ForRead) as Entity; var layerId = ent.LayerId; var lyTblRec = trans.GetObject(layerId, OpenMode.ForWrite) as LayerTableRecord; if (lyTblRec.Name == "") { return; } lyTblRec.IsFrozen = true;
lyTblRec.IsHidden = true; }
trans.Commit(); } }

AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层的更多相关文章

  1. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  2. 1,下载和部署开发环境--AutoCAD二次开发

    环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...

  3. AutoCad 二次开发 文字镜像

    AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...

  4. AutoCad 二次开发 jig操作之标注跟随线移动

    AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...

  5. AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)

    AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...

  6. Nodejs之MEAN栈开发(九)---- 用户评论的增加/删除/修改

    由于工作中做实时通信的项目,需要用到Nodejs做通讯转接功能,刚开始接触,很多都不懂,于是我和同事就准备去学习nodejs,结合nodejs之MEAN栈实战书籍<Getting.MEAN.wi ...

  7. 我的AutoCAD二次开发之路 (一)

    原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...

  8. Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序

    在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...

  9. 承接 AutoCAD 二次开发 项目

    本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...

随机推荐

  1. Java ThreadLocal 的使用与源码解析

    GitHub Page: http://blog.cloudli.top/posts/Java-ThreadLocal-的使用与源码解析/ ThreadLocal 主要解决的是每个线程绑定自己的值,可 ...

  2. 上手Typescript,让JavaScript适用于大型应用开发

    Typescript Typescript是一个基于静态类型的,能编译为JavaScript的JavaScript的超集.也就是说任何JavaScript都可以看成是Typescript,IDE能够更 ...

  3. 如何巧妙地在基于 TCP Socket 的应用中实现用户注册功能?

    通常,在基于TCP的应用中(比如我开源的GGTalk即时通信系统),当TCP连接建立之后,第一个请求就是登录请求,只有登录成功以后,服务器才会允许客户端进行其它性质的业务请求.但是,注册用户这个功能比 ...

  4. HTTP Catcher

    HTTP Catcher HTTP Catcher 是一个 Web 调试工具.它可以拦截.查看.修改和重放来自 iOS 系统的 HTTP 请求. 你不需要连接电脑,HTTP Catcher 可以在后台 ...

  5. LeetCode刷题总结-递归篇

    递归是算法学习中很基本也很常用的一种方法,但是对于初学者来说比较难以理解(PS:难点在于不断调用自身,产生多个返回值,理不清其返回值的具体顺序,以及最终的返回值到底是哪一个?).因此,本文将选择Lee ...

  6. Leetcode(9)回文数

    Leetcode(9)回文数 [题目表述]: 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 第一次:直接全部转 执行用时:148 ms: 内存消耗:13.4 ...

  7. 2019.10.29 CSP%您赛第四场t2

    我太菜了我竟然不会分层图最短路 ____________________________________________________________________________________ ...

  8. Apache2的安装

    Apache2的安装 1.执行:sudo apt-get install apache2. 2.sudo vim /etc/apache2/apache2.conf在最后加上:ServerName l ...

  9. Tkinter 之Entry输入框标签

    一.参数说明 语法 作用 Entry(root,width=20) 组件的宽度(所占字符个数) Entry(root,fg='blue') 前景字体颜色 Entry(root,bg='blue') 背 ...

  10. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...