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;
}