pandoram 发表于 2005-4-19 15:25:00

三视图功能实现(80%完成)

<A href="dispbbs.asp?boardID=14&amp;ID=34741&amp;page=2" target="_blank" >上次被问的</A>, 用ARX怎么实现三视图的效果.


调试的结果是做三个viewport..


不过还有一个问题末有解决, 虽然看起来是三视图的架式..三个视口出来之后不会自动zoom到合适的大小位置..-__-


环境是ARX2000, 不知道2002以上版本的viewport是不是更好用一些..


void command_name<BR>{<BR>       AcDbDatabase *pCurDb = acdbHostApplicationServices()-&gt;workingDatabase();<BR>       // 取得当前数据库


       AcDbViewportTable *pVPTable;<BR>       pCurDb-&gt;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-&gt;setLowerLeftCorner(lower_left);<BR>       pVPLeft-&gt;setUpperRightCorner(upper_mid);<BR>       PVPLeft-&gt;setName(active_name);<BR>       pVPLeft-&gt;setUcs(AcDb::kTopView);<BR>       pVPLeft-&gt;setViewDirection(AcDb::kTopView);<BR>       pVPLeft-&gt;setIconAtOrigin(TRUE);


       pVPRightUp-&gt;...


       pVPRightBtm-&gt;...


       // 我懒了..都是和pVPLeft一样的..只是pVPRightUp的setUcssetViewDirection换成AcDb::kFrontView, pVPRightBtm换成AcDb::kLeftView..各位请举一反三吧..前两天就是因为不知道如果要使用ACAD内认的orthogonal view, 这两个函数一定要一起设定, 才弄得怎么都搞不定的..


       pVPTable-&gt;getAt("*ACTIVE", pVPCurrent, AcDb::kForWrite);<BR>       pVPCurrent-&gt;erase();<BR>       pVPCurrent-&gt;close();<BR>       // 删除默认全屏视口


       pVPTable-&gt;add(pVPLeft);<BR>       pVPTable-&gt;add(pVPRightUp);<BR>       pVPTable-&gt;add(pVPRightBtm);


       pVPLeft-&gt;close();<BR>       pVPRightUp-&gt;close();<BR>       pVPRightBtm-&gt;close();<BR>       pVPTable-&gt;close();


       acedVportTableRecords2Vports();<BR>       // 至关重要的一句, 一定要在加好新视口记录关了viewport table之后才能操作, 不然ACAD不会显示新的视口


}

glowz 发表于 2005-4-20 10:44:00

辛苦了 支持!好东西

tecson 发表于 2008-3-18 22:11:00

<p>thanks a million.</p>
页: [1]
查看完整版本: 三视图功能实现(80%完成)