AutoCad 二次开发 .net 之层表的增加 删除 修改图层颜色 遍历 设置当前层
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 之层表的增加 删除 修改图层颜色 遍历 设置当前层的更多相关文章
- AutoCAD二次开发——AutoCAD.NET API开发环境搭建
AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...
- 1,下载和部署开发环境--AutoCAD二次开发
环境需求为: AutoCAD 2020版 ObjectARX SDK 下载地址:https://www.autodesk.com/developer-network/platform-technolo ...
- AutoCad 二次开发 文字镜像
AutoCad 二次开发 文字镜像 参考:https://adndevblog.typepad.com/autocad/2013/10/mirroring-a-dbtext-entity.html 在 ...
- AutoCad 二次开发 jig操作之标注跟随线移动
AutoCad 二次开发 jig操作之标注跟随线移动 在autocad当中,我认为的jig操作的意思就是即时绘图的意思,它能够实时的显示出当前的操作,以便我们直观的感受到当前的绘图操作是什么样子会有什 ...
- AutoCAD二次开发-使用ObjectARX向导创建应用程序(HelloWorld例子)
AutoCAD2007+vs2005 首先自己去网上搜索下载AutoCAD2007的ARX开发包. 解压后如下 打开后如下 classmap文件夹为C++类和.net类的框架图,是一个DWG文件. d ...
- Nodejs之MEAN栈开发(九)---- 用户评论的增加/删除/修改
由于工作中做实时通信的项目,需要用到Nodejs做通讯转接功能,刚开始接触,很多都不懂,于是我和同事就准备去学习nodejs,结合nodejs之MEAN栈实战书籍<Getting.MEAN.wi ...
- 我的AutoCAD二次开发之路 (一)
原帖地址 http://379910987.blog.163.com/blog/static/33523797201011184552167/ 今天在改代码的时候,遇到了AddVertexAt方法的用 ...
- Autocad中使用命令来调用python对Autocad二次开发打包后的exe程序
在Autocad中直接调用Python二次开发程序是有必要的,下面介绍一种方法来实现这个功能: 其基本思路是:先将二次开发的程序打包为可执行程序exe,然后编写lsp文件,该文件写入调用exe程序的语 ...
- 承接 AutoCAD 二次开发 项目
本人有多年的CAD开发经验,独立完成多个CAD二次开发项目.熟悉.net及Asp.net开发技术,和Lisp开发技术. 现在成立了工作室,独立承接CAD二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- slf4j+logback&logback.xml
添加maven依赖 <dependencies> <!--https://mvnrepository.com/artifact/org.slf4j/slf4j-api --> ...
- 清除SQL Server Management Studio的最近服务器列表
C:\Users\dell\AppData\Roaming\Microsoft\SQL Server Management Studio\12.0\SqlStudio.bin
- Ubuntu安装Chrome浏览器及解决启动no-sandbox问题
1.安装浏览器 # apt-get install gonme # apt-get update # apt-get install google-chrome-stable 2.启动Chrome浏览 ...
- python基本数据类型及常用功能
1.数字类型 int -int(将字符串转换为数字) a = " print(type(a),a) b = int(a) print(type(b),b) num = " v = ...
- 【TencentOS tiny】深度源码分析(2)——调度器
温馨提示:本文不描述与浮点相关的寄存器的内容,如需了解自行查阅(毕竟我自己也不懂) 调度器的基本概念 TencentOS tiny中提供的任务调度器是基于优先级的全抢占式调度,在系统运行过程中,当有比 ...
- 如何在Linux服务器上部署Mysql
一.安装mysql 1.通过文件上传工具,将mysql安装包上传到linux服务器上 2.卸载mariadb包,由于系统中存在mariadb包会导致mysql安装时报错mariadb-libs被mys ...
- 神奇的Java僵尸(defunct)进程问题排查过程
现象描述 大概1个月多以前 在启动脚本中增加了tail -f 用来启动后追踪日志判断是否启动成功 后发现无法执行shutdown.sh(卡住 利用curl) 然后无奈使用kill -9 但通过ps - ...
- Stack Overflow 上 250W 浏览量的一个问题:你对象丢了
在逛 Stack Overflow 的时候,发现最火的问题竟然是:什么是 NullPointerException(java.lang.NullPointerException),它是由什么原因导致的 ...
- [NOIp2011] luogu P1311 选择客栈
我妈的抽象歌曲真 nb. 题目描述 给你 nnn 个点,每个点有两个参数 ci,dic_i,d_ici,di,给你一个数 DDD.定义一种方案合法,当且仅当你选出整数 i,j∈[1,n],i< ...
- 我家很管事的猫——mycat初步部署实践与问题排查
mycat,阿里出品的mysql中间件,提供读写分离和分库分表方案.项目中主要使用的是其读写分离功能. [如何部署?] 本文只采用并测试了双主从模式,配置看这一篇足矣: https://www.cnb ...