By Gopinath Taget
Đoạn mã nguồn sau đây trình bày cách tạo một UCS đặt tên và thiết lập nó thành UCS hiện hành. Có hai hàm cần phải nhớ là:
- acedVports2VportTableRecords() - Hàm này cần được gọi trước khi truy cập đến bảng các viewport.
- acedVportTableRecords2Vports() - Hàm này cần được gọi khi kết thúc chương trình để áp dụng các thay đổi lên bảng viewport.
// - asdkucsarx._test command (do not rename)
static void asdkucsarx_test(void)
{
Acad::ErrorStatus es;
AcDbUCSTableRecord *myUCS = new AcDbUCSTableRecord;
//define your own ucs
AcGePoint3d origin_point(0,0,0);
AcGeVector3d UCSXaxis(0,1,0);
AcGeVector3d UCSYaxis(1,0,0);
myUCS->setOrigin(origin_point);
myUCS->setXAxis(UCSXaxis);
myUCS->setYAxis(UCSYaxis);
es=myUCS->setName( _T("MyUCS"));
if (es != Acad::eOk)
{
acutPrintf(_T("\nFailed to set name"));
return;
}
AcDbObjectId UCSId;
AcDbSymbolTable *pUCSTable;
if (acdbHostApplicationServices()->workingDatabase()->
getUCSTable(pUCSTable,AcDb::kForWrite)==Acad::eOk)
{
es=pUCSTable->add(UCSId,myUCS);
es=pUCSTable->close();
es= myUCS->close();
}
else
{
acutPrintf(_T("\nFailed to get UCS table"));
return;
}
//To set the current UCS, I accessed
// the active AcDbViewportTableRecord
// and used setUCS to set the UCS I created as current.
AcDbViewportTable *pVT;
es = acedVports2VportTableRecords();
if (es != Acad::eOk)
{
acutPrintf(
_T("\nFailed to load vport info into vport table records"));
return;
}
es=acdbHostApplicationServices()->
workingDatabase()->getViewportTable(pVT,AcDb::kForRead);
if (es != Acad::eOk)
{
acutPrintf(_T("\nFailed to get vport table"));
pVT->close();
return;
}
AcDbViewportTableIterator* pIter = NULL;
es=pVT->newIterator(pIter);
if (es != Acad::eOk)
{
acutPrintf(_T("\nFailed to get vport table"));
pVT->close();
delete pIter;
return;
}
for (pIter->start();!pIter->done();pIter->step())
{
AcDbViewportTableRecord* pRec;
//it should be open for write mode
es=pIter->getRecord(pRec,AcDb::kForWrite);
if (es != Acad::eOk)
{
acutPrintf(
_T("\nFailed to get vport table record"));
pVT->close();
pRec->close();
delete pIter;
return;
}
TCHAR* name=NULL;
es=pRec->getName(name);
if (es != Acad::eOk)
{
acutPrintf(
_T("\nFailed to get name from vport table"));
pVT->close();
pRec->close();
delete pIter;
return;
}
if (_tcsicmp(name,_T("*ACTIVE"))==0)
{
es=pRec->setUcs(UCSId);
}
es=pRec->close();
}
es=acedVportTableRecords2Vports(); //force update
es=pVT->close();
delete pIter;
return ;
}
No comments:
Post a Comment