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

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

转换前:

转换后:

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

附部分代码如下:

cs 复制代码
 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();
     }
 }

插件联系↓↓↓

相关推荐
想摆烂的不会研究的研究生1 小时前
每日八股——Redis(1)
数据库·经验分享·redis·后端·缓存
唐宋元明清21881 小时前
.NET 磁盘管理-技术方案选型
windows·c#·存储
码熔burning1 小时前
MySQL 8.0 新特性爆笑盘点:从青铜到王者的骚操作都在这儿了!(万字详解,建议收藏)
数据库·mysql
故事不长丨1 小时前
C#正则表达式完全攻略:从基础到实战的全场景应用指南
开发语言·正则表达式·c#·regex
猫头虎1 小时前
2025最新OpenEuler系统安装MySQL的详细教程
linux·服务器·数据库·sql·mysql·macos·openeuler
哈库纳玛塔塔2 小时前
放弃 MyBatis,拥抱新一代 Java 数据访问库
java·开发语言·数据库·mybatis·orm·dbvisitor
phltxy3 小时前
从零入门JavaScript:基础语法全解析
开发语言·javascript
天“码”行空3 小时前
java面向对象的三大特性之一多态
java·开发语言·jvm
@LetsTGBot搜索引擎机器人3 小时前
2025 Telegram 最新免费社工库机器人(LetsTG可[特殊字符])搭建指南(含 Python 脚本)
数据库·搜索引擎·机器人·开源·全文检索·facebook·twitter
计算机毕设VX:Fegn08954 小时前
计算机毕业设计|基于springboot + vue动物园管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计