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二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- python编程基础之二十
字符串的其他常用方法: ord(char) # 返回char字符对应的码值,可以是中文字符 chr(x) # 输入一个unicode码,返回对应的字符 eval(str) # 将str 中的内容 ...
- 从一道ctf看php反序列化漏洞的应用场景
目录 0x00 first 前几天joomla爆出个反序列化漏洞,原因是因为对序列化后的字符进行过滤,导致用户可控字符溢出,从而控制序列化内容,配合对象注入导致RCE.刚好今天刷CTF题时遇到了一个类 ...
- tesseract 测试样例
该图片的链接为https://raw.githubusercontent.com/Python3WebSpider/TestTess/master/image.png,可以直接保存或下载. 首先用命令 ...
- Html中解决点击 a 标签刷新的问题,实现点击时不刷新
Html中解决点击 a 标签刷新的问题 我们可以在 <a href=""></a>中,将地址属性href设置为“#” 例如 <a href=" ...
- 《java编程思想》P125-P140(第七章复用类部分)
1.类的成员默认的是包访问权限.允许包内成员访问 2.super.scrub() 调用基类的scrub方法 3.继承并不是复制基类的接口.当创建了一个导出类(子类)对象时,该对象包含了一个基类的子对象 ...
- Ubuntu16.04 安装apache+mysql+php(LAMP)
记录下ubuntu环境下安装apache+mysql+php(LAMP)环境. 0x01安装apache sudo apt-get update sudo apt-get install apache ...
- HMLT clear 属性
原文 : http://www.zhangxinxu.com/wordpress/2014/06/understand-css-clear-left-right-and-use/ clear 的四个值 ...
- phpstorm 新加入项目的文件--全局搜索不到 ctrl + shift + R
通过文件名查找文件 ,能搜到其他的现有文件,只是新加入的文件,无法出现在搜索到的结果中 . 总不可能在搜索的关键词一直拼写错误吧 , 那能想到的只有缓存出问题了. 新加入的文件,新加入的文件.... ...
- PHP get_parent_class
<?php class D { } class A extends D { } class B extends A { } function getAncestor($class){ $pare ...
- Vue核心之数据劫持
前瞻 当前前端界空前繁荣,各种框架横空出世,包括各类mvvm框架横行霸道,比如Anglar,Regular,Vue,React等等,它们最大的优点就是可以实现数据绑定,再也不需要手动进行DOM操作了, ...