模型空间的视口和图纸空间的视口一样可以叠加
叠加玩法ARX代码
//复制重叠模型空间当前视口
AcDbDatabase *pDb=curDoc()->database();
if (NULL == pDb)
{
acutPrintf(_T("
获取数据库指针失败!"));
return;
}
AcDbViewportTablePointer pTbl(pDb,AcDb::kForWrite);
Acad::ErrorStatus es= pTbl.openStatus();
if (Acad::eOk != es)
{
acutPrintf(_T("
错误码= %s"),acadErrorStatusText(es));
return;
}
AcDbObjectId recordId;
//获取激活视口记录Id
es = pTbl->getAt(_T("*Active"),recordId);
if (Acad::eOk != es)
{
acutPrintf(_T("
错误码= %s"),acadErrorStatusText(es));
return;
}
//智能指针打开
AcDbViewportTableRecordPointer pRcd(recordId,AcDb::kForRead);
es = pRcd.openStatus();
if (Acad::eOk != es)
{
acutPrintf(_T("
错误码= %s"),acadErrorStatusText(es));
return;
}
//克隆激活视口记录
AcDbViewportTableRecord *pNewRcd=AcDbViewportTableRecord::cast(pRcd->clone());
if (NULL == pNewRcd)
{
acutPrintf(_T("
克隆激活视口记录失败!"));
return;
}
//添加到视口表
es = pTbl->add(pNewRcd);
if (Acad::eOk != es)
{
delete pNewRcd;
acutPrintf(_T("
错误码= %s"),acadErrorStatusText(es));
return;
}
pRcd->close();
//必须,clone的实体是写状态,需要close,便于acedVportTableRecords2Vports更新访问
pNewRcd->close();
//必须,AcDbViewportTable的实体是写状态,需要close,便于acedVportTableRecords2Vports更新访问
pTbl->close();
//更新视口表记录到视口
es =acedVportTableRecords2Vports();
if (Acad::eOk != es)
{
acutPrintf(_T("
错误码= %s"),acadErrorStatusText(es));
return;
}
实际效果
这样的方式是相当于模型空间的显示区域都有一个视口同时在显示。可以通过cvport命令来切换当前激活的视口。