CAD工具之家's Archivers

From boitboy on 2013-10-19 21:45:55

获得当前的视图设置

AcDbViewTableRecord GetCurrentView() { AcDbViewTableRecord view; struct resbuf rb; struct resbuf wcs, ucs, dcs; // 转换坐标时使用的坐标系统标记   wcs.restype = RTSHORT; wcs.resval.rint = 0; ucs.restype = RTSHORT; ucs.resval.rint = 1; dcs.restype = RTSHORT; dcs.resval.rint = 2;   // 获得当前视口的“查看”模式 acedGetVar("VIEWMODE", &rb); view.setPerspectiveEnabled(rb.resval.rint & 1); view.setFrontClipEnabled(rb.resval.rint & 2); view.setBackClipEnabled(rb.resval.rint & 4); view.setFrontClipAtEye(!(rb.resval.rint & 16));   // 当前视口中视图的中心点(UCS坐标) acedGetVar("VIEWCTR", &rb); acedTrans(rb.resval.rpoint, &ucs, &dcs, 0, rb.resval.rpoint); view.setCenterPoint(AcGePoint2d(rb.resval.rpoint[X],    rb.resval.rpoint[Y]));   // 当前视口透视图中的镜头焦距长度(单位为毫米) acedGetVar("LENSLENGTH", &rb); view.setLensLength(rb.resval.rreal);   // 当前视口中目标点的位置(以 UCS 坐标表示) acedGetVar("TARGET", &rb); acedTrans(rb.resval.rpoint, &ucs, &wcs, 0, rb.resval.rpoint); view.setTarget(AcGePoint3d(rb.resval.rpoint[X],    rb.resval.rpoint[Y], rb.resval.rpoint[Z])); // 当前视口的观察方向(UCS) acedGetVar("VIEWDIR", &rb); acedTrans(rb.resval.rpoint, &ucs, &wcs, 1, rb.resval.rpoint); view.setViewDirection(AcGeVector3d(rb.resval.rpoint[X],    rb.resval.rpoint[Y], rb.resval.rpoint[Z]));   // 当前视口的视图高度(图形单位) acedGetVar("VIEWSIZE", &rb); view.setHeight(rb.resval.rreal); double height = rb.resval.rreal;   // 以像素为单位的当前视口的大小(X 和 Y 值) acedGetVar("SCREENSIZE", &rb); view.setWidth(rb.resval.rpoint[X] / rb.resval.rpoint[Y] * height);   // 当前视口的视图扭转角 acedGetVar("VIEWTWIST", &rb); view.setViewTwist(rb.resval.rreal);   // 将模型选项卡或最后一个布局选项卡置为当前 acedGetVar("TILEMODE", &rb); int tileMode = rb.resval.rint; // 设置当前视口的标识码 acedGetVar("CVPORT", &rb); int cvport = rb.resval.rint;   // 是否是模型空间的视图 bool paperspace = ((tileMode == 0) && (cvport == 1)) ? true : false; view.setIsPaperspaceView(paperspace); if (!paperspace) {    // 当前视口中前向剪裁平面到目标平面的偏移量    acedGetVar("FRONTZ", &rb);    view.setFrontClipDistance(rb.resval.rreal);       // 获得当前视口后向剪裁平面到目标平面的偏移值    acedGetVar("BACKZ", &rb);    view.setBackClipDistance(rb.resval.rreal); } else {    view.setFrontClipDistance(0.0);    view.setBackClipDistance(0.0); }   return view; } 缺陷是这个方法只能获取当前文档的视图设置,但是,如果我只有一个AcDbDatabase,我想获取它的视图设置就比较麻烦了。

查看完整版本: 获得当前的视图设置

Tags: CAD二次开发, ObjectArx


©CAD工具之家
创办于:2013年5月24日