乐筑天下

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

。BricsCAD V15至V18中的NET WblockCloneObjects(动态块)

[复制链接]

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-9 15:40:35 | 显示全部楼层 |阅读模式
您好,
Bellow是从其他DWG导入块的典型代码部分。
使用BricsCAD V13、V14和AutoCAD,它也可以完美地处理动态块。
我很惊讶它不适用于BricsCAD V15到V18。
什么原因?如何解决?
ObjectId重要性块(数据库目标Db,字符串源文件名,字符串块名)
{
使用(var源文件名=new Database(false, true))
{
sourceDb.ReadDwgFile(源文件名,FileOpenMode.OpenForReadAndAllShare,假,空);
var id=ObjectId.Null;
使用(var tr=sourceDb.TransactionManager.StartTransaction())
{
var bt=(BlockTable)tr.GetObject(sourceDb.BlockTableId,OpenMode.ForRead);
if(!bt.Has(block Name))
返回ObjectId.Null;
id=bt[block Name];
tr.Commit();
}
var id=new ObjectIdCollection();
ids.Add(id);
var映射=new IdMap();
sourceDb.WblockCloneObjects(id,targetDb.BlockTableId,映射,DuplicateRecordCloning.Replace, false);
返回映射[id]. value;
}
}
同样的情况是当我尝试以下代码时:
http://through-the-interface.typepad.com/through_the_interface/2006/08/import_blocks_f.html
在附件中,您可以找到带有动态块的示例源DWG。
提前谢谢你。

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

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

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-1-9 16:17:55 | 显示全部楼层

嗨kiki,
有什么错误?
我不喜欢挑剔,但发布显然曾经工作过的代码,而没有给我们任何错误报告或线索,不会给你带来太多帮助。
如果没有这些信息,您基本上是在要求我们创建一个项目来使用您的代码,然后在可能来自任何地方的绘图上测试它,我知道我没有那么多空闲时间。
有了一些错误消息,除了阅读您的片段之外,有人可能无需做任何进一步的工作就可以看到问题。
让我们知道您尝试了什么以及发生了什么,这将有助于我们帮助您
干杯
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-9 17:07:19 | 显示全部楼层
嗨,MickD,
BricsCAD V15 - V18只是在blocktable中看不到块名称。
没有错误消息。块不会导入到目标数据库。
此外,Kean的代码在这些BricsCAD版本中也不起作用。
我很惊讶,因为BricsCAD V18在动态块上工作得很好。
所有 AutoCAD 2009 - 2018 和 BricsCAD V13 - V14 都可以正常工作。
回复

使用道具 举报

69

主题

875

帖子

15

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1146
发表于 2018-1-9 17:29:00 | 显示全部楼层
好的
您可以在源图中选择并检查这些实体吗?这可能会为如何获得它们进行克隆提供更多线索。还可以与早期版本进行尝试,并进行比较,看看是否有细微的差异。
hth
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-1-9 21:29:26 | 显示全部楼层
我的理解是Bricscad对动态块不太好。
我很惊讶13和14没有问题,很好奇你是否能让它工作。
Bricscad 18可以看到块表中的源块,所以块应该显示在那里。
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-10 08:28:04 | 显示全部楼层
使用WBlockCloneObject导入块时出现问题
我已经测试了sourceDWG。AutoCAD ArxDbg工具中的dwg。请参阅附件
然后我遍历表中的块。请参阅btr。名称生成以下程序:
AutoCAD和BricsCAD V13,V14:
*Model_Space
*Paper_Space0
U2
AD_8GK4851-5KK00i
BricsCAD V15-V18:Model_ Space
*Paper_ Space
这是块未导入的主要原因。
回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-1-10 13:28:25 | 显示全部楼层
我记得在实现Bricscad时,我不得不为WblockCloneObjects调整代码。如果我没记错的话,我更改了实现DocumentLock的方式,以及 duplicaterecordconcloning 参数。看看这段代码,看看其中是否有对您有帮助的内容。  /// 。
///从指定图形中获取块,并将其添加到激活图形的块表中..。
/// 。
/// 块名,。
/// 要从中提取块的dwg/dwt的路径,。
私有静态bool GetBlockFromDWG(string block name,string path)。
{。
使用(Database openDb = new Database(false,true))。
{。
openDb,ReadDwgFile(路径,。
系统,IO.FileShare.ReadWrite,true,“”;。

objectid collection ids = new objectid collection();。
使用(Transaction tr = openDb,transaction manager . start transaction())。
{。
var bt = (BlockTable)tr,GetObject(openDb,BlockTableId,OpenMode。for read);。

如果(bt,Has(blockName))。
{。
身份证,add(Bt[block name]);。
}。
trcommit();。
}。

//如果找到,则添加该块。
if (ids,数数!= 0)。
{。
//获取当前图形数据库。

使用(DocumentLock acLock = Active,Document.LockDocument())。
{。
id mapping iMap = new id mapping();。
激活,database . WblockCloneObjects(ids,Active。Database.BlockTableId。
iMap,DuplicateRecordCloning。忽略,假);。

}。
返回true。
}。
否则。
{。
调试,Print($“在{path}”)中找不到块{ block name };。
返回false。
}。
}。
}。

回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-10 14:44:56 | 显示全部楼层
感谢您的回复。
您的代码适用于经典块。
不幸的是,导入动态块(V15-V18)不起作用。
此条件将被绕过,因为BlockTable中没有这样的名称:
if(bt.Has(block Name))
{
ids.Add(bt[block Name]);
}
即使我删除此条件,动态块也不会导入...
回复

使用道具 举报

1

主题

5

帖子

1

银币

初来乍到

Rank: 1

铜币
9
发表于 2018-1-24 03:55:17 | 显示全部楼层
嗨,试一试[命令方法("doit")]。
公共无效doit()。
{。
文档文档=Application.DocumentManager.MdiActiveDocument;。
编辑doc.Editor。
数据库db=doc.Database;。
使用(数据库源Db=新数据库(false, true))。
{。
尝试。
{。
字符串源文件名=@"C:\用户\丹\桌面\D_Block\sourceDWG.dwg";。
sourceDb.ReadDwgFile,System.IO.FileShare.Read, "");。
ObjectIdCollection块=new ObjectIdCollection();。

使用(BlockTable bt=(BlockTable)sourceDb.BlockTableId.Open(OpenMode.ForRead))。
{。
foreach(bt中的ObjectId btrId)。
{。
使用(BlockTableRecord btr=(BlockTableRecords)btrId.Open(OpenMode.ForRead))。
{。
如果(btr.IsDynamicBlock)。
blockIds.Add(btrId);。
}。
}。
}。
sourceDb.CloseInput(真);。
使用(IdMap映射=new IdMap())。
{。
mapping.DestinationDatabase目录。
destDb.WblockCloneObjects(块,destDb.BlockTableId,映射,DuplicateRecordCloning.Ignore,false);。
}。
ed.WriteMessage("\n复制"。
+blockIds.Count.ToString()。
+"块定义来自"。
+源文件名。
+"到当前绘图,");。
}。
捕获(System.Exceptionex)。
{。
ed.WriteMessage(\n复制时出错:+ex.Message);。
}。
}。
}。

回复

使用道具 举报

85

主题

404

帖子

7

银币

中流砥柱

Rank: 25

铜币
751
发表于 2018-1-24 14:15:15 | 显示全部楼层
哇!
谢谢。它在V17和V18中工作!
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-2-4 10:51 , Processed in 0.432862 second(s), 88 queries .

© 2020-2025 乐筑天下

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