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二次开发项目.结项后提供源码及开发文档,有需要的 ...
随机推荐
- 从xxe-lab来深入学习xxe漏洞
这几天,想复习一下xxe的知识,于是把以前的一个靶场拿过来玩玩,顺便审计一下代码2333,靶场地址:https://github.com/c0ny1/xxe-lab 首先先练习的是php-xxe: 我 ...
- 04-04 AdaBoost算法代码(鸢尾花分类)
目录 AdaBoost算法代码(鸢尾花分类) 一.导入模块 二.导入数据 三.构造决策边界 四.训练模型 4.1 训练模型(n_e=10, l_r=0.8) 4.2 可视化 4.3 训练模型(n_es ...
- 2016 10月15日java的动手动脑
(1) 编写一个方法,使用以上算法生成指定数目(比如1000个)的随机整数. 源程序: //随机数的产生 //zhanxinwu,October,15,2016 public class Recur ...
- C语言入门-结构类型
一.声明结构类型 #include <stdio.h> int main(int argc, char const *argv[]) { // 声明结构类型 struct date { i ...
- Jenkins基本使用
Jenkins安装 安装基本上属于傻瓜式安装了 选择安装路径不要包含中文 点击install 找到默认密码 选择插件安装 点击无,然后再选择安装 创建一个管理员 Jenkins配置任务 新建工程 输入 ...
- [JZOJ5456]【NOIP2017提高A组冲刺11.6】奇怪的队列
Description nodgd的粉丝太多了,每天都会有很多人排队要签名.今天有
- hadoop-3.1.2启动httpfs
最近有一个需求,要求使用httpfs读取数据,一开始看到httpfs这个词,第一感觉是不是多了个f,是不是https,后来百度一下,其实不然. httpfs其实是使用http协议访问hdfs文件系统: ...
- css3实现饼状图进度及环形进度条
1 <!-- 饼图 --> <div class="pie"></div> <hr /> <!-- 环形图 --> &l ...
- mysql 二十余种报错注入姿势
1.floor() floor 和group by 搭配使用 利用group by 的key唯一性 和mysql 编码执行顺序导致二次执行产生不同key ))) ) 数值型注入时 不用闭合‘ 进行 ...
- sql注入100种姿势过waf(一):waf 了解
仅供学习交流如果你有更好的思路可以一起分享,想一起学习的进我主页 首先WAF(Web Application Firewall),俗称Web应用防火墙,主要的目的实际上是用来过滤不正常或者恶意请求包, ...