![]() |
【转帖】请问c#中如何插入一个已定义的块啊?
请问c#中如何插入一个已定义的块啊?
www.dimcax.com 请问c#中如何插入一个已定义的块啊? arxobject中好象找不到类似于insert这样的对象,dotnetarx中也只有关于如何定义block的说明,请帮助,谢谢! 有谁知道啊?能不能给点代码? 哈哈!终于在foreign friend帮助下,解决了我摸索多日的菜鸟问题,原来是用的是tablerecord,这个类很容易搞混淆,打开模型空间也是用这个类: blocktablerecord btr = (blocktablerecord)trans.getobject(bt[blocktablerecord.modelspace], openmode.forwrite, false); 打开块定义也是用这个类: blocktablerecord blkdefine= (blocktablerecord)trans.getobject(bt[blkname], openmode.forwrite, false); 真正要插入到dwg中时,要用到blockrefrence: blockrefrence blk = new blockrefrence(insertpt, blkdefine.objectid); 最后用: btr.appendentity(blk, true); 加入到模型空间,就搞定了! 希望大家多交流,高手多指点,大侠们的一句话,就顶得上菜鸟们郁闷几天了! 能不能把代码 贴全一点 获得blockid: private void getblockid() { blockid = objectid.null; using (transaction trans = transman.starttransaction()) //启动事务处理 { //看数据库中是否存在这样的块定义 blocktable bt = (blocktable)trans.getobject(currdb.blocktableid, openmode.forread, false); if (bt.has(blockname)) { blockid = bt[blockname]; return; } //读入定义 database blkdb = new database(false, false); try { blkdb.readdwgfile(pathname + blockname + ".dwg", system.io.fileshare.read, true, ""); } catch (system.exception exp) { blkdb.dispose(); tools.toolutils.alertmsg("无法找到块文件:" + blockname); return; } blockid = currdb.insert(blockname, blkdb, true); blkdb.dispose(); trans.commit(); } } 利用blockid插入到图形中: public override void draw() { try { getblockid(); if (blockid == objectid.null) //这个块文件无法调入 return; using (transaction trans = transman.starttransaction()) //启动事务处理 { blockreference blk = new blockreference(insertpt, blockid); blk.rotation = insertangle; blocktable bt = (blocktable)trans.getobject(currdb.blocktableid, openmode.forread, false); blocktablerecord btr = (blocktablerecord)trans.getobject(bt[blocktablerecord.modelspace], openmode.forwrite, false); objectid = btr.appendentity(blk); trans.addnewlycreateddbobject(blk, true); trans.commit(); } } finally { } } |
所有的时间均为北京时间。 现在的时间是 12:00 PM. |