AutoCAD模型空间多视口之叠加视口应用

模型空间的视口和图纸空间的视口一样可以叠加

叠加玩法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命令来切换当前激活的视口。

posted @ 2021-11-02 20:47  edata  阅读(493)  评论(0编辑  收藏  举报