如何批量地将多个文件中的外部参照全部绑定
<font face="宋体" size="2">大家好,我在此向各位请教一个问题:<br/>假设有一个d:\a的文件夹,里面有上百个dwg文件,每个文件都有一个图框,而且这个图框是在布局里插入的外部参照,现在要将这些文件拷到别的机子上,但那些机子上没有外部参照的源文件,会造成显示不出的问题,于是我想将所有的dwg文件中的外部参照都绑定起来,但一个一个地操作又太慢,那么用vc作一个arx文件来完成这个任务应该是不成问题的吧,我就请教该如何写这个代码?我是一个objectarx的初学者,请大家给我详细耐心地指导,我将不胜感激,谢谢</font> 我也想知道。。。 我从来不用布局,也很少用到外部参照,没有遇到楼主所说的问题。呵呵。。。 又没人讨论啦?高手高手,你们在哪里啊? 可以用图纸集,里面有电子传递,可以批量绑定。但是不能选择插入,所以绑后图层变态的多,不知怎么解决 这个问题我已解决,给你一段小代码void BindXref2()
{
AcDbDatabase *pDb = acdbHostApplicationServices()->workingDatabase();
BindXref2(pDb);
}
void BindXref2(AcDbDatabase *pDb)
{
Acad::ErrorStatus es;
AcDbObjectIdArray objIdArr;
AcDbBlockTable *pBlockTable;
AcDbBlockTableRecord * pBlockTableRecord;
es = pDb->getSymbolTable(pBlockTable, AcDb::kForRead);
if (es != Acad::eOk) return;
AcDbBlockTableIterator *pBlockTableIterator;
es = pBlockTable->newIterator(pBlockTableIterator);
if (es != Acad::eOk) {
pBlockTable->close();
return;
}
pBlockTable->close();
//遍历一个图块表中所有图块
for (; !pBlockTableIterator->done();
pBlockTableIterator->step(true,true)) //skipDeleted = true
{
es = pBlockTableIterator->getRecord (pBlockTableRecord, AcDb::kForRead);
if (es != Acad::eOk) continue;
if(pBlockTableRecord->isFromExternalReference() == Adesk::kTrue)
{
objIdArr.append(pBlockTableRecord->objectId( )); //记录外部参照
}
pBlockTableRecord->close();
}//---for
delete pBlockTableIterator;
if (objIdArr.length() > 0){
Do_BindXref2(pDb, objIdArr);
}
}
//===================================================================================
void Do_BindXref2(AcDbDatabase *pDb, AcDbObjectIdArray& objIdArr)
{
if (objIdArr.length()==0) {
return;
}
Acad::ErrorStatus es;
long i;
for(i=0; i<objIdArr.length(); i++)
{
//打开这个外部参照图块物体
AcDbObject *pObj;
AcDbBlockTableRecord *pBlkRcd;
es = acdbOpenObject(pObj, objIdArr, AcDb::kForWrite);
if (es != Acad::eOk) {
continue;
}
pBlkRcd = AcDbBlockTableRecord::cast(pObj);
if (pBlkRcd == NULL) {
pObj->close();
continue;
}
TCHAR *Blkname;
es = pBlkRcd->getName(Blkname);
pObj->close();
//开始替换外部参照
es = acedXrefReload(Blkname,true,pDb); //必须先Reload,否则pDb为非当前显式打开文档时不成功或崩溃
if(es == Acad::eOk){
es = acedXrefBind(Blkname,false,true,pDb); //必须先关闭这个块表
}
}
} 有没有人开发一个lisp啊,我也很想实现这个功能啊,以后说不定啥地方就用上了啊,求助 romao 发表于 2011-11-12 12:04 static/image/common/back.gif
这个问题我已解决,给你一段小代码
这个程序怎么用啊,大侠 这个程序怎么用啊,大侠
这是 ObjectARX 程序代码,先花半年时间啃下ObjectARX吧,前提是还要精通 C++
页:
[1]