Hi,
I want to change my UCS to a named UCS in all viewports.
To do this I do the following steps:
1) Look for the AcDbObjectId of the named UCS.
2) Call acedVports2VportTableRecords();
3) Run over all AcDbViewportTableRecord objects in the AcDbViewportTable obtained by AcDbDatabase->getSymbolTable(AcDbViewportTable,AcDb::kForRead)
4) For every AcDbViewportTableRecord object call AcDbViewportTableRecord->setUcs(AcDbObjectId)
5) Call acedVportTableRecords2Vports();
But at calling acedVportTableRecords2Vports(); AutoCAD crashes.
I ran this on AutoCAD 2012 and AutoCAD 2013.
Is this the correct method for changing UCS in all viewports?
Thanks for helping me.
Erik.
---------------------------------------------------------------
void
WcArxNamedUcs_SetCurrentInAllViewports(AcDbDatabase* db,const WcString ucsName){
AcDbObjectId currentUcs = WcArxNamedUcs_Get(db,ucsName);
WcArxCES(acedVports2VportTableRecords());
AcDbViewportTable* pViewportTbl;
WcArxCES(db->getSymbolTable(pViewportTbl,AcDb::kForRead));
try{ // pViewportTbl open
AcDbViewportTableIterator * pViewportTblRecIterator;
WcArxCES(pViewportTbl->newIterator(pViewportTblRecIterator));
try{ // pViewportTbl open, pViewportTblRecIterator allocated
for(pViewportTblRecIterator->start();!pViewportTblRecIterator->done();pViewportTblRecIterator->step()){
AcDbViewportTableRecord * pViewportTblRec;
WcArxCES(pViewportTblRecIterator->getRecord(pViewportTblRec,AcDb::kForWrite));
try{ // pViewportTbl open, pViewportTblRecIterator allocated, pViewportTblRec open
WcArxCES(pViewportTblRec->setUcs(currentUcs));
}catch(WcException& e){
pViewportTblRec->close();
throw(e);
}
WcArxCES(pViewportTblRec->close());
}
}catch(WcException& e){
delete pViewportTblRecIterator;
throw(e);
}
delete pViewportTblRecIterator;
}catch(WcException& e){
pViewportTbl->close();
throw(e);
}
WcArxCES(pViewportTbl->close());
WcArxCES(acedVportTableRecords2Vports());
return;
}