几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量  


返回   几何尺寸与公差论坛------致力于产品几何量公差标准GD&T (GDT:ASME)|New GPS(ISO)研究/CAD设计/CAM加工/CMM测量 » 仿射空间:CAX软件开发(三)二次开发与程序设计 » CAD二次开发 » AutoCAD二次开发 » ObjectARX(VB.NET/C#)
用户名
密码
注册 帮助 会员 日历 银行 搜索 今日新帖 标记论坛为已读


 
 
主题工具 搜索本主题 显示模式
旧 2009-04-20, 09:59 PM   #1
yang686526
高级会员
 
注册日期: 06-11
帖子: 14579
精华: 1
现金: 224494 标准币
资产: 234494 标准币
yang686526 向着好的方向发展
默认 如何从外部dwg文件插入实体到原坐标,并获取所插入的每个实体的id?

如何从外部dwg文件插入实体到原坐标,并获取所插入的每个实体的id?
www.dimcax.com
如何从外部dwg文件插入实体到原坐标,并获取所插入的每个实体的id?
,
如何从外部dwg文件插入实体到原坐标,并获取所插入的每个实体的id?
我知道将外部文件作为一个块插入;
也可以将外部文件只加入到当前模型空间;
但是无法实现:将外部文件的实体复制到当前模型空间,并获取每个实体的id(因为需要对所复制的实体作修改);
请教一下高手,如何实现?;
说思路或提供代码都可以,非常感谢!
补充一下
我的开发环境是vs attname, string[] attvalue)
{
acadappser.document doc = acadappser.application.documentmanager.mdiactivedocument;
editor ed = doc.editor;
try
{
if (!file.exists(filename))
{
//filename = hostapplicationservices.current.findfile(filename, doc.database, findfilehint.default);
ed.writemessage("\n 不存在文件:" + filename + "\n");
return;
}
using (database db = new database(false, true)) //从文件读取时第一个为false ,第二个表 不关联到当前文档,
{
//读dwg文件
db.readdwgfile(filename, fileshare.read, true, null);
//为了让插入块的函数在多个图形文件打开的情况下起作用,你必须使用下面的函数把dwg文件关闭
db.closeinput(true);
objectidcollection list = new objectidcollection();
using (acadappser.documentlock doclock = doc.lockdocument()) //多文档要先这样
{
using (transaction trans = doc.transactionmanager.starttransaction())
{
//把源数据库模型空间中的实体插入到当前数据库的一个新的块表记录中
objectid idbtr = doc.database.insert(blockname, db, false);
//打开块表
blocktable bt = (blocktable)trans.getobject(doc.database.blocktableid, openmode.forread);
//打开块表记录
blocktablerecord btrinserted = (blocktablerecord)trans.getobject(bt[blockname], openmode.forwrite);
//获取blockname块的遍历器,以实现对块中对象的访问 blocktablerecordenumerator
//system.collections.ienumerator iterator = btrinserted.getenumerator(); //这句是遍历的另一方法
foreach (objectid id in btrinserted)
{
list.add(id);
entity ent = trans.getobject(id, openmode.forwrite) as entity;
ent.layer = layername;
blocktablerecord btr = (blocktablerecord)trans.getobject(bt[blocktablerecord.modelspace], openmode.forwrite);
btr.appendentity(ent ); //在当前空间加入创建的块参照
trans.addnewlycreateddbobject(ent, true); //通知事务处理加入创建的块参照
}
}
}
}
}
catch (exception ex)
{
ed.writemessage("\nerror during insertblockrefwithattfromdwgfile: " + ex.message);
}
}
在执行到这一句: btr.appendentity(ent );
会报错
请教是什么原因?
yang686526离线中   回复时引用此帖
GDT自动化论坛(仅游客可见)
 


主题工具 搜索本主题
搜索本主题:

高级搜索
显示模式

发帖规则
不可以发表新主题
不可以回复主题
不可以上传附件
不可以编辑您的帖子

vB 代码开启
[IMG]代码开启
HTML代码关闭



所有的时间均为北京时间。 现在的时间是 04:07 AM.


于2004年创办,几何尺寸与公差论坛"致力于产品几何量公差标准GD&T | GPS研究/CAD设计/CAM加工/CMM测量"。免责声明:论坛严禁发布色情反动言论及有关违反国家法律法规内容!情节严重者提供其IP,并配合相关部门进行严厉查处,若內容有涉及侵权,请立即联系我们QQ:44671734。注:此论坛须管理员验证方可发帖。
沪ICP备06057009号-2
更多