乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 43|回复: 2

在当前打开的绘图中具有不稳定性

[复制链接]

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2015-6-10 23:34:26 | 显示全部楼层 |阅读模式
我正在编写一个程序来更新两个图形之间的块。 一个将与动态块一起使用的图形,并且除了在AutoCAD会话中打开要更新的图形之外,它进展顺利。 块表记录得到正确更新,块参照也在更新,这意味着它们显示正确的几何图形(属性尚无代码)。 而且,如果您尝试插入新块表记录的新块参照,它将使 aCAD 崩溃。 如果我不擦除旧的块表记录,那么aCAD不会崩溃。
问题是:当图形打开时,块引用不会重新引用到新的块表记录,这意味着如果使用GetBlockReferenceIds方法,它将返回一个空集合,即使它看起来像(并且它们确实)引用新的块表记录。 如果保存并关闭图形并再次打开它,则块参照将在块表记录中参照。 我无法在帮助文档中找到任何类型的解决方案。
这个程序只是为了让我的大脑在夏天工作,所以如果需要,我可以发布代码。
提前致谢。

本帖以下内容被隐藏保护;需要你回复后,才能看到!

游客,如果您要查看本帖隐藏内容请回复
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2015-6-11 16:14:15 | 显示全部楼层
我猜你在使用SwapIdBy,但你提到了两个绘图之间,并且在交换时它们是同一数据库中的块吗?
回复

使用道具 举报

28

主题

249

帖子

7

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
361
发表于 2015-6-11 16:22:52 | 显示全部楼层
我猜你在使用SwapIdAnd,但是你提到了在两个绘图之间,当它们被交换时,它们是同一数据库中的块吗?是的。我使用db.Insert将新的块表记录插入到绘图中(我能找到的唯一方法是使用它们的属性传输动态块),一旦新记录在绘图中,我就在旧记录和新记录之间调用SwapIdAnd。我看到他们的是一个SwapReduce,这听起来像是它可能工作,但在这个例子中它不适合我。谢谢,编辑:添加了代码,从这一点开始。public bool CopBlock(Database aCallingDb, string aFromPath, string aFromName, string aToPath, string aToName){。
来自Doc的文档;。
DocumentLock from mLock=null;。
ObjectId from mId;。

文档到Doc;。
DocumentLock toLock=null;。
ObjectId告诉;。

字符串tName=“a”;。
string oldName="b";。
ObjectId tId;。
BlockTable记录btr;。

从Db的数据库=GetDatabase aseAtPath(aFromPath, aCallingDb,FileShare.ReadWrite,FindFileHint.XRefDrawing, out from mDoc);。
if(from mDoc!=null&&fromDoc.LockMode () == DocumentLockMode.NotLocked)from mLock=fromDoc.LockDocument();。
FromId=GetnonErasedTableRecordId(fromDb.BlockTableId,aFromName);。
如果(fromId.IsNull)返回false;。

数据库toDb=GetDatabase aseAtPath(aToPath, aCallingDb,FileShare.ReadWrite,FindFileHint.XRefDrawing, out toDoc);。
if(toDoc!=null&&toDoc.LockMode () == DocumentLockMode.NotLocked)toLock=toDoc.LockDocument();。
=GetnonErasedTableRecordId(toDb.BlockTableId,aToName);。
如果(toId.IsNull)返回false;。

使用(Database tDb=new Database(true, true ) ) {。
tDb.Insert("RanonAssTempNameYes3344882", from mDb, true);。
if(FromDoc==null)fromDb.Dispose();。
否则如果(FromLock!=null)fromLock.Dispose();。
擦除所有记录,除了(tDb.BlockTableId,一个名称);。
while(!(tId=GetnonErasedTableRecordId(toDb.BlockTableId, tName)). IsNull)tName+=tName;。
while(!(tId=GetnonErasedTableRecordId(toDb.BlockTableId, oldName)). IsNull)oldName+=oldName;。
使用(Transaction to Trans=toDb.TransactionManager.StartTransaction () ) {。
btr=toTrans.GetObject(toId,OpenMode.ForWrite, false, true)as BlockTableReport;。
btr.Name=oldName;。
btr.DowngradeOpen();。
tId=toDb.Insert(tName, tDb, true);。
如果(tId.IsNull)返回false;。
btr=toTrans.GetObject(tId,OpenMode.ForWrite, false, true)作为BlockTableReport;。
btr.Erase();。
btr.DowngradeOpen();。
FromId=GetnonErasedTableRecordId(toDb.BlockTableId,aFromName);。
如果(fromId.IsNull)返回false;。
btr=toTrans.GetObject(from mId,OpenMode.ForWrite, false, true)作为BlockTableReport;。
btr.SwapIdWith(告诉,假,假);。
if(string.Equals(btr.Name, aToName,StringComparison.OrdinalIgnoreCase ) ) {。
btr.Name=aToName;。
updateXData(btr.XData,1001,"AcDbBynamicBlockTrueName", new TypeValue(1000, aFromName), new TypeValue(1000, aToName ) );。
}。
btr.DowngradeOpen();。
btr=toTrans.GetObject(from mId,OpenMode.ForWrite, false, true)作为BlockTableReport;。
btr.Erase();。
btr.DowngradeOpen();。
toTrans.Commit();。
if(toDoc==null)toDb.SaveAs(aToPath, false,DwgVersion.Current,toDb.SecurityParameters);。
}。
}。
if(toDoc==null)toDb.Dispose();。
否则如果(toLock!=null)toLock.Dispose();。
返回true;。
}。
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-2-5 00:53 , Processed in 0.393225 second(s), 69 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表