博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【转载】获得当前的视图设置
阅读量:6106 次
发布时间:2019-06-21

本文共 2152 字,大约阅读时间需要 7 分钟。

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;

}

转载于:https://www.cnblogs.com/lihao102/archive/2013/04/14/3020266.html

你可能感兴趣的文章
60.使用Azure AI 自定义视觉服务实现物品识别Demo
查看>>
Oracle 冷备份
查看>>
jq漂亮实用的select,select选中后,显示对应内容
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
售前工程师的成长---一个老员工的经验之谈
查看>>
Get到的优秀博客网址
查看>>
dubbo
查看>>
【Git入门之四】操作项目
查看>>
老男孩教育每日一题-第107天-简述你对***的理解,常见的有哪几种?
查看>>
Python学习--time
查看>>
在OSCHINA上的第一篇博文,以后好好学习吧
查看>>
高利率时代的结局,任重道远,前途叵测
查看>>
Debian 6.05安装后乱码
查看>>