明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1384|回复: 12

[基础] WblockCloneObjects 写块的问题

[复制链接]
发表于 2022-12-3 19:23 | 显示全部楼层 |阅读模式
public static void WblockFromDwg(ObjectIdCollection IdCollection,ref Database newDataBase)
        {
            Document document = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
            Database database = document.Database;
            Editor editor = document.Editor;

            newDataBase = new Database(true, true);
            ObjectId oid = new ObjectId();
            IdMapping map = new IdMapping();
            using (Transaction trans = newDataBase.TransactionManager.StartTransaction())
            {
                BlockTable blocktable = trans.GetObject(newDataBase.BlockTableId, OpenMode.ForRead) as BlockTable;
                BlockTableRecord modelSpace = trans.GetObject(blocktable[BlockTableRecord.ModelSpace], OpenMode.ForRead) as BlockTableRecord;
                oid = modelSpace.ObjectId;
                trans.Commit();
            }
            database.WblockCloneObjects(IdCollection, oid, map, DuplicateRecordCloning.Replace, false);
            //newDataBase.SaveAs(fileName, DwgVersion.Current);
        }

如上图代码 做了一个写块的方法,但是在运行时 部分图形会出现如下错误:
eDuplicateRecordName:   at Autodesk.AutoCAD.DatabaseServices.Database.WblockCloneObjects(ObjectIdCollection identifiers, ObjectId id, IdMapping mapping, DuplicateRecordCloning cloning, Boolean deferTranslation) at DataProcess.ClsAppMethod.WblockFromDwg(ObjectIdCollection IdCollection, Database& newDataBase)
求教 是什么原因

发表于 2022-12-7 21:36 | 显示全部楼层

        Dim NewDb As Database = New Database(True, True) '目标数据库对象

        Dim NewBtrId As New ObjectId() '目标数据库的块表Id

        Using NewTrans As Transaction = NewDb.TransactionManager.StartTransaction()

            Dim NewBt As BlockTable = NewTrans.GetObject(NewDb.BlockTableId, OpenMode.ForRead)
            Dim NewBtr As BlockTableRecord = NewTrans.GetObject(NewBt(BlockTableRecord.ModelSpace), OpenMode.ForRead)
            NewBtrId = NewBtr.ObjectId
            NewTrans.Commit()
        End Using
      
        db.WblockCloneObjects(blockIds, NewBtrId, New IdMapping(), DuplicateRecordCloning.Replace, False)
        NewDb.SaveAs(strBlockName, DwgVersion.Current)
        'NewDb.SaveAs(strBlockName,  DwgVersion.AC1800)
发表于 2022-12-7 14:06 | 显示全部楼层
这是我测试成功的代码
  1. Document doc = Env.Document;
  2.         var db = doc.Database;
  3.         var r1 = doc.Editor.GetSelection();
  4.         if (r1.Status != PromptStatus.OK) return;
  5.         ObjectIdCollection oidc = new(r1.Value.GetObjectIds());
  6.         var newdb = new Database(true, true);
  7.         using var tr = newdb.TransactionManager.StartTransaction();
  8.         var bt = tr.GetObject(newdb.BlockTableId, OpenMode.ForRead) as BlockTable;
  9.         IdMapping idm = new();
  10.         db.WblockCloneObjects(oidc, bt![BlockTableRecord.ModelSpace], idm, DuplicateRecordCloning.Replace, false);
  11.         newdb.SaveAs(Environment.GetFolderPath(Environment.SpecialFolder.Desktop) + "\\123.dwg",DwgVersion.AC1800);


发表于 2022-12-7 22:04 | 显示全部楼层
也可以直接用这个
                NewDb = db.Wblock(blockIds, db.Ucsorg)
                '以当前正使用的CAD版本格式保存数据库
                NewDb.SaveAs(strBlockName, DwgVersion.Current)
发表于 2022-12-5 18:15 | 显示全部楼层
重复记录名称错误的信息,估计是重复的块名或者文件名导致错误吧。
发表于 2022-12-6 16:42 | 显示全部楼层
看看ifox内有没有注释
发表于 2022-12-6 21:10 | 显示全部楼层
可能是没锁定文档
DocumentCollection acDocMgr = Application.DocumentManager;
using (DocumentLock acLckDoc = acNewDoc.LockDocument())
发表于 2022-12-7 21:46 | 显示全部楼层
是不是你的图层 冻结 隐藏
 楼主| 发表于 2022-12-9 22:04 | 显示全部楼层
没有隐藏图层 也没有冻结图层 文档也是锁定状态,我从一个大图上 批量分割300个小图,出错跳过输出一个文档看,有20个多个图形输出不了 其他的270多个正常 挺奇怪的  
发表于 2022-12-14 23:32 | 显示全部楼层

也可以直接用这个
                NewDb = db.Wblock(blockIds, db.Ucsorg)
                '以当前正使用的CAD版本格式保存数据库
                NewDb.SaveAs(
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-4-20 10:07 , Processed in 2.911133 second(s), 24 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表