- 积分
- 1320
- 明经币
- 个
- 注册时间
- 2005-3-7
- 在线时间
- 小时
- 威望
-
- 金钱
- 个
- 贡献
-
- 激情
-
|
上次被问的, 用ARX怎么实现三视图的效果.
调试的结果是做三个viewport..
不过还有一个问题末有解决, 虽然看起来是三视图的架式..三个视口出来之后不会自动zoom到合适的大小位置..-__-
环境是ARX2000, 不知道2002以上版本的viewport是不是更好用一些..
void command_name { AcDbDatabase *pCurDb = acdbHostApplicationServices()->workingDatabase(); // 取得当前数据库
AcDbViewportTable *pVPTable; pCurDb->getViewportTable(pVPTable, AcDb::kForWrite); // 取得当前视口配置表
AcDbViewportTableRecord *pVPLeft = new AcDbViewportTableRecord(); AcDbViewportTableRecord *pVPRightUp = new AcDbViewportTableRecord(); AcDbViewportTableRecord *pVPRightBtm = new AcDbViewportTableRecord(); // 分配三个新视口记录
AcDbViewportTableRecord *pVPCurrent; // 默认的全屏视口记录, 等一下要删掉
AcGePoint2d upper_mid (0.5, 1.0); AcGePoint2d upper_right (1.0, 1.0); AcGePoint2d mid (0.5, 0.5); AcGePoint2d lower_left (0.0, 0.0); AcGePoint2d lower_mid (0.5, 0.0); AcGePoint2d right_mid (1.0, 0.5); // 三个新视口的左下角/右上角坐标, 从0到1(所谓normalized)
char* active_name = new char[]; strcpy (active_name, "*ACTIVE"); // ACAD默认当前所有显示的视口记录名字都为*ACTIVE
pVPLeft->setLowerLeftCorner(lower_left); pVPLeft->setUpperRightCorner(upper_mid); PVPLeft->setName(active_name); pVPLeft->setUcs(AcDb::kTopView); pVPLeft->setViewDirection(AcDb::kTopView); pVPLeft->setIconAtOrigin(TRUE);
pVPRightUp->...
pVPRightBtm->...
// 我懒了..都是和pVPLeft一样的..只是pVPRightUp的setUcssetViewDirection换成AcDb::kFrontView, pVPRightBtm换成AcDb::kLeftView..各位请举一反三吧..前两天就是因为不知道如果要使用ACAD内认的orthogonal view, 这两个函数一定要一起设定, 才弄得怎么都搞不定的..
pVPTable->getAt("*ACTIVE", pVPCurrent, AcDb::kForWrite); pVPCurrent->erase(); pVPCurrent->close(); // 删除默认全屏视口
pVPTable->add(pVPLeft); pVPTable->add(pVPRightUp); pVPTable->add(pVPRightBtm);
pVPLeft->close(); pVPRightUp->close(); pVPRightBtm->close(); pVPTable->close();
acedVportTableRecords2Vports(); // 至关重要的一句, 一定要在加好新视口记录关了viewport table之后才能操作, 不然ACAD不会显示新的视口
} |
|