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命令來切換當前激活的視口。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM