三视图功能实现(80%完成)
<A href="dispbbs.asp?boardID=14&ID=34741&page=2" target="_blank" >上次被问的</A>, 用ARX怎么实现三视图的效果.调试的结果是做三个viewport..
不过还有一个问题末有解决, 虽然看起来是三视图的架式..三个视口出来之后不会自动zoom到合适的大小位置..-__-
环境是ARX2000, 不知道2002以上版本的viewport是不是更好用一些..
void command_name<BR>{<BR> AcDbDatabase *pCurDb = acdbHostApplicationServices()->workingDatabase();<BR> // 取得当前数据库
AcDbViewportTable *pVPTable;<BR> pCurDb->getViewportTable(pVPTable, AcDb::kForWrite);<BR> // 取得当前视口配置表
AcDbViewportTableRecord *pVPLeft = new AcDbViewportTableRecord();<BR> AcDbViewportTableRecord *pVPRightUp = new AcDbViewportTableRecord();<BR> AcDbViewportTableRecord *pVPRightBtm = new AcDbViewportTableRecord();<BR> // 分配三个新视口记录
AcDbViewportTableRecord *pVPCurrent;<BR> // 默认的全屏视口记录, 等一下要删掉
AcGePoint2d upper_mid (0.5, 1.0);<BR> AcGePoint2d upper_right (1.0, 1.0);<BR> AcGePoint2d mid (0.5, 0.5);<BR> AcGePoint2d lower_left (0.0, 0.0);<BR> AcGePoint2d lower_mid (0.5, 0.0);<BR> AcGePoint2d right_mid (1.0, 0.5);<BR> // 三个新视口的左下角/右上角坐标, 从0到1(所谓normalized)
char* active_name = new char[];<BR> strcpy (active_name, "*ACTIVE");<BR> // ACAD默认当前所有显示的视口记录名字都为*ACTIVE
pVPLeft->setLowerLeftCorner(lower_left);<BR> pVPLeft->setUpperRightCorner(upper_mid);<BR> PVPLeft->setName(active_name);<BR> pVPLeft->setUcs(AcDb::kTopView);<BR> pVPLeft->setViewDirection(AcDb::kTopView);<BR> pVPLeft->setIconAtOrigin(TRUE);
pVPRightUp->...
pVPRightBtm->...
// 我懒了..都是和pVPLeft一样的..只是pVPRightUp的setUcssetViewDirection换成AcDb::kFrontView, pVPRightBtm换成AcDb::kLeftView..各位请举一反三吧..前两天就是因为不知道如果要使用ACAD内认的orthogonal view, 这两个函数一定要一起设定, 才弄得怎么都搞不定的..
pVPTable->getAt("*ACTIVE", pVPCurrent, AcDb::kForWrite);<BR> pVPCurrent->erase();<BR> pVPCurrent->close();<BR> // 删除默认全屏视口
pVPTable->add(pVPLeft);<BR> pVPTable->add(pVPRightUp);<BR> pVPTable->add(pVPRightBtm);
pVPLeft->close();<BR> pVPRightUp->close();<BR> pVPRightBtm->close();<BR> pVPTable->close();
acedVportTableRecords2Vports();<BR> // 至关重要的一句, 一定要在加好新视口记录关了viewport table之后才能操作, 不然ACAD不会显示新的视口
} 辛苦了 支持!好东西 <p>thanks a million.</p>
页:
[1]