c# cad 二次开发 类库 netload 图层操作、创建图层、删除图层、设置当前图层等
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.Colors;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace _10图层操作
{
//添加图层的返回状态
public enum AddLayerStatuts
{
AddLayerOK,
IllegalLayerName,
LayerNameExist
}
//添加图层的返回值
public struct AddLayerResult
{
public AddLayerStatuts statuts;
public string layerName;
}
//修改图层属性的返回状态
public enum ChangeLayerPropertyStatus
{
ChangeOK,
LayerIsNotExist

}
public static partial class LayerTool
{/// <summary>/// 添加图层/// </summary>/// <param name="db">图形数据库</param>/// <param name="layerName">图层名</param>/// <returns>AddLayerResult</returns>public static AddLayerResult AddLayer(this Database db, string layerName){//声明AddLayerResult类型的数据,用户返回AddLayerResult res = new AddLayerResult() ;try{SymbolUtilityServices.ValidateSymbolName(layerName, false);}catch (Exception){res.statuts = AddLayerStatuts.IllegalLayerName;return res;}using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//新建层表记录if (!lt.Has(layerName)){LayerTableRecord ltr = new LayerTableRecord();//判断要创建的图层名是否已经存在,不存在则创建ltr.Name = layerName;//升级层表打开权限lt.UpgradeOpen();lt.Add(ltr);//降低层表打开权限lt.DowngradeOpen();trans.AddNewlyCreatedDBObject(ltr, true);trans.Commit();res.statuts = AddLayerStatuts.AddLayerOK;res.layerName = layerName;}else{res.statuts = AddLayerStatuts.LayerNameExist;} }return res;}/// <summary>/// 修改图层颜色/// </summary>/// <param name="db">图形数据库</param>/// <param name="LayerName">图层名</param>/// <param name="colorIndex">图层颜色</param>/// <returns>ChangeLayerPropertyStatus</returns>public static ChangeLayerPropertyStatus ChangeLayerColor(this Database db, string LayerName, short colorIndex){ChangeLayerPropertyStatus status;using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//判断指定的图形名是否存在if (lt.Has(LayerName)){LayerTableRecord ltr = (LayerTableRecord)lt[LayerName].GetObject(OpenMode.ForWrite);ltr.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex);trans.Commit();status = ChangeLayerPropertyStatus.ChangeOK;}else{status = ChangeLayerPropertyStatus.LayerIsNotExist;}}return status;}/// <summary>/// 锁定图层/// </summary>/// <param name="db">图形数据库</param>/// <param name="LayerName">图层名</param>/// <returns>bool</returns>public static bool LockLayer(this Database db, string LayerName){bool isOk = true;using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//判断指定的图形名是否存在if (lt.Has(LayerName)){LayerTableRecord ltr = (LayerTableRecord)lt[LayerName].GetObject(OpenMode.ForWrite);ltr.IsLocked = true;trans.Commit();}else{isOk = false;}}return isOk;}/// <summary>/// 解除锁定图层/// </summary>/// <param name="db">图形数据库</param>/// <param name="LayerName">图层名</param>/// <returns>bool</returns>public static bool UnLockLayer(this Database db, string LayerName){bool isOk = true;using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//判断指定的图形名是否存在if (lt.Has(LayerName)){LayerTableRecord ltr = (LayerTableRecord)lt[LayerName].GetObject(OpenMode.ForWrite);ltr.IsLocked = false;trans.Commit();}else{isOk = false;}}return isOk;}/// <summary>/// 修改图层的线宽/// </summary>/// <param name="db">图形数据库</param>/// <param name="LayerName">图层名</param>/// <param name="lineWeight">线宽</param>/// <returns>bool</returns>public static bool ChangleLineWeight(this Database db, string LayerName, LineWeight lineWeight){bool isOk = true;using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//判断指定的图形名是否存在if (lt.Has(LayerName)){LayerTableRecord ltr = (LayerTableRecord)lt[LayerName].GetObject(OpenMode.ForWrite);ltr.LineWeight = lineWeight;trans.Commit();}else{isOk = false;}}return isOk;}/// <summary>/// 设置当前图层/// </summary>/// <param name="db">图形数据库</param>/// <param name="LayerName">图层名</param>/// <returns>bool</returns>public static bool SetCurrentLayer(this Database db, string LayerName){bool isSetOk = false;using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);//判断要设置的图层名是否存在if (lt.Has(LayerName)){//获取指定图层名的ObjectIdObjectId layerId = lt[LayerName];//判断要设置的图形是否已是当前图层if (db.Clayer != layerId){db.Clayer = layerId; }isSetOk = true;}trans.Commit();}return isSetOk;}/// <summary>/// 返回所有层表记录/// </summary>/// <param name="db">图形数据库</param>/// <returns>List<LayerTableRecord></returns>public static List<LayerTableRecord> GetAllLayers(this Database db){List<LayerTableRecord> layerList = new List<LayerTableRecord>();using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);lt.GenerateUsageData();foreach (ObjectId item in lt){LayerTableRecord ltr = (LayerTableRecord)item.GetObject(OpenMode.ForRead);layerList.Add(ltr);}}return layerList;}/// <summary>/// 获取所有图层名/// </summary>/// <param name="db">图形数据库</param>/// <returns>List<string></returns>public static List<string> GetAllLayersName(this Database db){List<string> layerNamesList = new List<string>();using (Transaction trans = db.TransactionManager.StartTransaction()){//打开层表LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);foreach (ObjectId item in lt){LayerTableRecord ltr = (LayerTableRecord)item.GetObject(OpenMode.ForRead);layerNamesList.Add(ltr.Name);}}return layerNamesList;}/// <summary>/// 删除图形/// </summary>/// <param name="db">图形数据库</param>/// <param name="layerName">图层名</param>/// <returns>bool</returns>public static bool DeleteLayer(this Database db, string layerName){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 (!ltr.IsUsed && db.Clayer != lt[layerName]){ltr.Erase();isDeleteOK = true;}}else{isDeleteOK = true;}trans.Commit();}return isDeleteOK;}/// <summary>/// 删除所有未使用的图形/// </summary>/// <param name="db"></param>public static void DeleteNotUsedLayer(this Database db){using (Transaction trans = db.TransactionManager.StartTransaction()){LayerTable lt = (LayerTable)trans.GetObject(db.LayerTableId, OpenMode.ForRead);lt.GenerateUsageData();foreach (ObjectId item in lt){LayerTableRecord ltr = (LayerTableRecord)item.GetObject(OpenMode.ForWrite);if (!ltr.IsUsed){ltr.Erase();}}trans.Commit();}}/// <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;}/// <summary>/// 删除指定图形上的所有实体对象/// </summary>/// <param name="ltr"></param>public static void deleteAllEntityInLayer(this LayerTableRecord ltr){Database db = HostApplicationServices.WorkingDatabase;Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;TypedValue[] value = new TypedValue[]{new TypedValue((int)DxfCode.LayerName,ltr.Name)};SelectionFilter filter = new SelectionFilter(value);PromptSelectionResult psr = ed.SelectAll();if (psr.Status == PromptStatus.OK){ObjectId[] ids = psr.Value.GetObjectIds();using(Transaction trans = db.TransactionManager.StartTransaction()){for (int i = 0; i < ids.Length; i++){Entity ent = (Entity)ids[i].GetObject(OpenMode.ForWrite);ent.Erase();}trans.Commit();}}}
}

}

c# cad 二次开发 类库 netload 图层操作、创建图层、删除图层、设置当前图层等相关推荐

  1. c# cad 二次开发 类库 块的操作

    c# cad 二次开发 类库 块的操作 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServi ...

  2. c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格

    c# cad 二次开发 类库 CAD表格的操作,给CAD添加一个表格 using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCA ...

  3. c# CAD二次开发 类库 创建各种图形、直线、圆、多段线、正方形、点等

    c# CAD二次开发 类库 创建各种图形.直线.圆.多段线.正方形.点等 using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD ...

  4. c# cad 二次开发 类库 对话框 将frame界面添加到类库中

    c# cad 二次开发 类库 对话框 将frame界面添加到类库中 using System; using System.Collections.Generic; using System.Compo ...

  5. 关于objectArx /CAD二次开发中“属性块”操作

    关于objectArx /CAD二次开发中"属性块"操作 属性块就是在图块上附加一些文字属性(Attribute),这些文字可以非常方便地修改.属性块被广泛应用在工程设计和机械设计 ...

  6. 我的CAD二次开发程序中的操作excel的部分

    这是我的CAD二次开发程序中的操作excel的部分,特此分享 using System; using System.Collections.Generic; using System.Text; us ...

  7. CAD二次开发(Vba)------ 查找不同图层中(直线、多段线)的相交点,并进行标注、将编号、坐标点输出到excel文件中

    插件地址如下: https://download.csdn.net/download/AIABIUBIU/21004587?spm=1001.2014.3001.5503 插件使用方法 1.在cad中 ...

  8. CAD 二次开发 图层操作(1)创建图层

    CAD二次开发的资料比较少,除了李冠亿先生的<深居浅出AutoCAD二次开发>这本书之外,目前没有找到合适的参考资料.现将自己工作中用的的一些方法贴出来.方便各位网友快速入门. #regi ...

  9. CAD 二次开发 图层操作(3)取得指定图层下的所有对象id

    对于CAD二次开发的人来说,可能需要对某一图层下的实体(点,线,面域,块,三维实体)进行不同的操作.下面的方法,即可实现获取指定图层名称下的所有实体ID. 输入参数为图层名称: 返回值为:对象主键集合 ...

最新文章

  1. MIT工程师利用人工大脑突触(忆阻器)设计了“脑芯片“,未来可用于便携式设备
  2. 卷积神经网络算法的一个实现
  3. 如何在LOL中成功制造一颗飞弹?
  4. 算法:把数组排成最小的数
  5. private关键字 java 1613808402
  6. 【方便自己使用】KKT条件
  7. AMP (LAMP/WAMP)
  8. 如何理解什么是放射?
  9. 省选专练HAOI2015树上操作
  10. 不相交轮换的乘积怎么求_伽罗华理论基础_刘长安.pdf_(12)(123)(14)不相交的乘积,8.将10次置换表互不相交的循环置换的乘积,并且求出。的逆与。的阶-教育文档类资源...
  11. Python学习笔记(三)(图灵学院)
  12. 淮北晨刊报道我校学生募捐送温暖活动
  13. 使用Python库valuequant和利润表历史数据计算股权价值
  14. WIn10 1909 Windows Hello 指纹:出现错误,请稍后再试一次
  15. 阿里云服务器nginx配置ssl步骤htts
  16. Mac:VSCode 批量替换快捷键
  17. 编程_三大编程思想:POP、OOP、AOP
  18. 在Linux下使用程序实现ls -l 的功能
  19. 震惊!史上最菜的Oracle 11g教程(大佬勿进)
  20. sql%rowcount

热门文章

  1. C#获取WebService接口的所有可调用方法[WebMethod]
  2. fineprint key_使FinePrint在Vista RC1上运行
  3. Linux基本命令(学习笔记)零基础入门linux系统运维
  4. 谨慎转载《WAPI自主标准?》
  5. 这些面试题助你面试一臂之力
  6. (二)unity shader基础之——————shader一些专业术语的解释(OpenGL/DirectX、HLSL/GLSL/Cg、Draw Call、固定管线渲染等)
  7. 中国联通网上营业厅,12306式的网站?
  8. 解决 Xbox Series S/X 连接无线校园网的问题
  9. BZOJ3597: [Scoi2014]方伯伯运椰子
  10. vue关闭页面时停止计数器