模型空間的視口和圖紙空間的視口一樣可以疊加
疊加玩法ARX代碼
//復制重疊模型空間當前視口
AcDbDatabase *pDb=curDoc()->database();
if (NULL == pDb)
{
acutPrintf(_T("\n獲取數據庫指針失敗!"));
return;
}
AcDbViewportTablePointer pTbl(pDb,AcDb::kForWrite);
Acad::ErrorStatus es= pTbl.openStatus();
if (Acad::eOk != es)
{
acutPrintf(_T("\n錯誤碼= %s"),acadErrorStatusText(es));
return;
}
AcDbObjectId recordId;
//獲取激活視口記錄Id
es = pTbl->getAt(_T("*Active"),recordId);
if (Acad::eOk != es)
{
acutPrintf(_T("\n錯誤碼= %s"),acadErrorStatusText(es));
return;
}
//智能指針打開
AcDbViewportTableRecordPointer pRcd(recordId,AcDb::kForRead);
es = pRcd.openStatus();
if (Acad::eOk != es)
{
acutPrintf(_T("\n錯誤碼= %s"),acadErrorStatusText(es));
return;
}
//克隆激活視口記錄
AcDbViewportTableRecord *pNewRcd=AcDbViewportTableRecord::cast(pRcd->clone());
if (NULL == pNewRcd)
{
acutPrintf(_T("\n克隆激活視口記錄失敗!"));
return;
}
//添加到視口表
es = pTbl->add(pNewRcd);
if (Acad::eOk != es)
{
delete pNewRcd;
acutPrintf(_T("\n錯誤碼= %s"),acadErrorStatusText(es));
return;
}
pRcd->close();
//必須,clone的實體是寫狀態,需要close,便於acedVportTableRecords2Vports更新訪問
pNewRcd->close();
//必須,AcDbViewportTable的實體是寫狀態,需要close,便於acedVportTableRecords2Vports更新訪問
pTbl->close();
//更新視口表記錄到視口
es =acedVportTableRecords2Vports();
if (Acad::eOk != es)
{
acutPrintf(_T("\n錯誤碼= %s"),acadErrorStatusText(es));
return;
}
實際效果
這樣的方式是相當於模型空間的顯示區域都有一個視口同時在顯示。可以通過cvport命令來切換當前激活的視口。
