|
- Acad::ErrorStatus getXrefPath( AcDbObjectId pId, const 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 blockreference?
- {
- 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
- pName =pRec->xrefDatabase(true)->originalFileName();
- // 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;
- }
- //Please bear in mind that the above code will retrieve the path name of the copied drawing instead of the original drawing if XLOADCTL is set to 2.
复制代码 |
|