![]() |
【转帖】插入外部图块时的错误,提示实体为空?????????
插入外部图块时的错误,提示实体为空?????????
插入外部图块时的错误,提示实体为空????????? acdocmanager->lockdocument( acdocmanager->curdocument(), acap::kwrite, null, null,true) ; ////////////////////////////////// acdbobjectid id; acdbobjectidarray list; acdbdatabase extdatabase( adesk::kfalse ); if (acad::eok != extdatabase.readdwgfile( "c:\\d.dwg")) //打开图库文件 // if (acad::eok != extdatabase.readdwgfile( dwgname )) { acedalert( "error reading dwg!" ); return; } acdbblocktable* pbt; if (acad::eok != extdatabase.getsymboltable( pbt, acdb::kforread )) { acedalert( "error getting blocktable of dwg" ); return; } acdbblocktablerecord* pbtr; acad::errorstatus es = pbt->getat( _t("bigblock"), pbtr, acdb::kforread ); //"bigblock"是要插入的块名 pbt->close(); if (acad::eok != es) { acedalert( "error getting the specific blockdef of dwg" ); return; } acdbblockreferenceiditerator *pitr; if (acad::eok != pbtr->newblockreferenceiditerator(pitr)) { acedalert( "error iterating" ); pbtr->close(); return; } for (pitr->start(); !pitr->done(); pitr->step()) { acdbobjectid blkrefid; if (acad::eok == pitr->getblockreferenceid(blkrefid)) { list.append(blkrefid); break; } } delete pitr; pbtr->close(); if (list.isempty()) { acedalert( "no entities found in model space of dwg" ); return; } acdbdatabase *ptempdb; if (acad::eok != extdatabase.wblock( ptempdb, list, acgepoint3d::korigin )) { acedalert( "wblock failed!" ); return; } if (acad::eok != acdbhostapplicationservices()->workingdatabase() ->insert( acgematrix3d::kidentity, ptempdb )) acedalert( "insert failed!" ); delete ptempdb; // 如果不需要插入块参照,将模型空间中的最后一个对象删除即可 ads_name lastent; if (acdbentlast(lastent) != rtnorm) { acedalert("获得模型空间最后一个实体失败!"); return; } acdbobjectid entid; es = acdbgetobjectid(entid, lastent); acdbentity *pent; es = acdbopenacdbentity(pent, entid, acdb::kforwrite); pent->erase(); pent->close(); ////////////////////////// //用窗口的时候 acdocmanager->unlockdocument( acdocmanager->curdocument());// 程序运行插入块时提示实体为空"no entities found in model space of dwg" ,应该是这里出错了,list.append(blkrefid); break;这两句没有执行,这是什么原因? pbtr中没有blockreference,应将pbtr中的所有entity insert to curdb 楼上的可以说的更详细一点好吗? acdbobjectid blkid = pbtrecord->objectid(); //将块写到一临时数据库中 acdbdatabase *ptempdb; extdatabase.wblock(ptempdb,blkid); 谢谢楼上的兄弟,问题已解决! 程序只是把该图块插入到当前图形的块表中,怎样把该图块画到当前图形中呀???????? 刚刚开始学习arx不就,请教楼主,如在当前图中何绘制该图块? 谢谢!qq:19154480 qq:19154480 msn:freejustinji@hotmail.com e-mail:justin3@citiz.net |
| 所有的时间均为北京时间。 现在的时间是 12:55 PM. |