批量修改cad图名(图框属性块内图名修改为指定文字)——cad c#二次开发

如图,当一个dwg图内有大量图框,属性块中包含块名,块名改为图框下方的文字,采用此插件可一键完成。

替换前:

替换后:

效果如下:

 

附部分代码如下:

 

 public void 替换属性块中图名为下方最近文字()
 {
     Document doc = Application.DocumentManager.MdiActiveDocument;
     Database db = doc.Database;
     Editor ed = doc.Editor;

     using (Transaction tr = db.TransactionManager.StartTransaction())
     {
         int processedCount = 0;  // 成功处理计数器
         int errorCount = 0;      // 失败计数器

         try
         {
             // 获取块表和模型空间
             BlockTable blockTable = tr.GetObject(db.BlockTableId, OpenMode.ForRead) as BlockTable;
             BlockTableRecord modelSpace = tr.GetObject(
                 blockTable[BlockTableRecord.ModelSpace],
                 OpenMode.ForRead
             ) as BlockTableRecord;

             // 遍历模型空间所有实体
             foreach (ObjectId objId in modelSpace)
             {
                 // 跳过非块参照对象
                 if (objId.ObjectClass.Name != "AcDbBlockReference")
                     continue;

                 BlockReference blkRef = null;
                 try
                 {
                     blkRef = tr.GetObject(objId, OpenMode.ForRead) as BlockReference;
                 }
                 catch
                 {
                     ed.WriteMessage($"\n无法访问对象 {objId.Handle}");
                     errorCount++;
                     continue;
                 }

                 // 检查是否为属性块
                 if (!IsAttributeBlock(tr, blkRef))
                     continue;

                 // 检查是否包含目标属性
                 if (!HasTargetAttribute(tr, blkRef, "图名"))
                     continue;

                 try
                 {
                     // 执行自定义操作(示例)
                     if (!ProcessBlockReference(blkRef, db, ed, tr)) continue;
                     processedCount++;
                 }
                 catch (Exception ex)
                 {
                     ed.WriteMessage($"\n处理块 {blkRef.Handle} 失败:{ex.Message}");
                     errorCount++;
                 }
             }

             ed.WriteMessage($"\n操作完成:成功处理 {processedCount} 个块,失败 {errorCount} 个");
            tr.Commit();
         }
         catch (Exception ex)
         {
             ed.WriteMessage($"\n严重错误:{ex.Message}");
             tr.Abort();
         }
     }
 }

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值