当前位置: 首页 > news >正文

批量改CAD图层颜色——CAD c#二次开发

一个文件夹下大量图纸(几百甚至几千个文件)需要改图层颜色时,可采用插件实现,效果如下:

转换前:

转换后:

 

使用方式如下:netload加载此dll插件,输入xx运行。

附部分代码如下:

 public void ProcessDwgFile(string filePath, string savePath, string layerName, short colorIndex)
 {
     Database db = new Database(false, true); // 无文档模式

     try
     {
         // 读取DWG文件
         db.ReadDwgFile(filePath, FileOpenMode.OpenForReadAndAllShare, false, null);

         using (Transaction tr = db.TransactionManager.StartTransaction())
         {
             LayerTable lt = (LayerTable)tr.GetObject(db.LayerTableId, OpenMode.ForRead);

             // 用于存储找到的图层ID
             ObjectId layerId = ObjectId.Null;

             // 遍历所有图层名,进行不区分大小写的比较
             foreach (ObjectId id in lt)
             {
                 LayerTableRecord ltr = (LayerTableRecord)tr.GetObject(id, OpenMode.ForRead);
                 if (ltr.Name.Equals(layerName, StringComparison.OrdinalIgnoreCase))
                 {
                     layerId = id;
                     break;
                 }
             }

             // 如果未找到图层,跳过该文件
             if (layerId.IsNull)
             {
                 tr.Commit();
                 return;
             }

             LayerTableRecord ltrToModify = (LayerTableRecord)tr.GetObject(layerId, OpenMode.ForWrite);

             // 设置图层颜色(如果选择的不是ByLayer则设置图层颜色)
             if (colorIndex != 256)
             {
                 ltrToModify.Color = Color.FromColorIndex(ColorMethod.ByAci, colorIndex);
             }

             // 修改所有图元的颜色属性
             BlockTable bt = (BlockTable)tr.GetObject(db.BlockTableId, OpenMode.ForRead);
             BlockTableRecord btr = (BlockTableRecord)tr.GetObject(bt[BlockTableRecord.ModelSpace], OpenMode.ForRead);

             foreach (ObjectId entId in btr)
             {
                *****省略部分代码
             tr.Commit();
         }

         // 保存文件
         string fileName = Path.GetFileName(filePath);
         string saveFile = Path.Combine(savePath, fileName);
         db.SaveAs(saveFile, DwgVersion.Current);
     }
     catch (Exception ex)
     {
         MessageBox.Show($"处理文件 {filePath} 时出错: {ex.Message}");
     }
     finally
     {
         db.Dispose();
     }
 }

插件联系↓↓↓

相关文章:

  • Rocketmq2
  • 250207-MacOS修改Ollama模型下载及运行的路径
  • DHCP Snooping各种场景实验案例
  • 国外注册的商标如何在中国获得保护!
  • 深入理解矩阵乘积的导数:以线性回归损失函数为例
  • Lisp语言的安全协议
  • 计算机网络——VLAN虚拟局域网的概念与基本原理
  • 【百日精通JAVA | SQL篇 | 第四篇】约束
  • C++中的多态和模板
  • 3. go-zero中如何使用redis
  • C#“与AI的奇妙结合”
  • Immutable.js 完全指南:不可变数据的艺术与实践
  • 接口自动化学习五:mock工具使用
  • MyBatis查询语句专题、动态SQL、MyBatis的高级映射及延迟加载
  • Java线程生命周期探秘:六种状态的转换与核心机制
  • 【C语言】内存函数 (续)
  • 模拟算法(一):一维数组模拟
  • HTML零基础入门笔记:狂神版
  • 最短路基础模板题
  • ctfshow VIP题目限免(前10题)
  • 网站开发形象设计要求/上海网站推广优化
  • 聊城高端网站建设/如何让百度快速收录网站文章
  • 网站免费服务器/线上推广平台哪些好
  • 做网站卖掉/手机网站建设案例
  • VM2008 做网站/百度一下你就知道手机版
  • 济南网站建设外包公司/百度指数大数据