- UID
- 1
- 积分
- 16111
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-1-3
- 最后登录
- 1970-1-1
|
发表于 2002-10-17 23:33:23
|
显示全部楼层
给你贴个函数,获得一个XREF的路径名,遍历块表的就不提供了,你按照RAVE的方法遍历块表判断是否是XREF,然后用这个函数就能获得路径名了。
- [FONT=courier new]
- Acad::ErrorStatus getXrefPath( AcDbObjectId pId, char *&pName )
- {
- AcDbObject *pObj,*pRecObj;
- AcDbBlockReference *pBlkRef;
- AcDbObjectId pBTRId;
- AcDbBlockTableRecord* pRec;
- Acad::ErrorStatus es;
- // open entiry
- es = acdbOpenObject(pObj, pId, AcDb::kForRead);
- assert(es == Acad::eOk);
- if(pObj->isKindOf(AcDbBlockReference::desc())) // Is it a block
- reference?
- {
- pBlkRef = AcDbBlockReference::cast(pObj);
- assert( pBlkRef );
- // get ID of the block table record that pObj referenced.
- pBTRId = pBlkRef->blockTableRecord();
- pObj->close();
- // open the block table record that pObj referenced.
- es = acdbOpenObject(pRecObj, pBTRId, AcDb::kForRead);
- assert(es == Acad::eOk);
- if(pRecObj->isKindOf(AcDbBlockTableRecord::desc())) // Is it a
- block table record?
- {
- pRec = AcDbBlockTableRecord::cast(pRecObj);
- assert( pRec );
- if( pRec->isFromExternalReference() ) // Is it a XREF?
- {
- // The following lines apply to all conditions, retaining path information or
- not
- AcDbDatabase *pXrefDb;
- pXrefDb = pRec->xrefDatabase(true); //
- notice it is true, not false.
- assert( pXrefDb );
- pXrefDb->getFilename(pName);
- // The following line just apply to XREF retaining the path information
- when inserted
- // pRec->pathName(pName); // get path name if
- retained when insert
- if(pName)
- es = Acad::eOk;
- else
- es = Acad::eInvalidInput;
- }
- else
- es = Acad::eInvalidInput;
- }
- else
- es = Acad::eInvalidInput;
- }
- else
- {
- pObj->close();
- es = Acad::eInvalidInput;
- }
- pRecObj->close(); // close XREF object
- return es;
- }
- [/FONT]
复制代码 |
|