- UID
- 5043
- 积分
- 1347
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2002-5-13
- 最后登录
- 1970-1-1
|
发表于 2004-6-6 01:13:57
|
显示全部楼层
最初由 easypower 发布
[B]經過查找資料,發現acedSSGet只對當前視窗範圍內實體有效,有沒有甚麼函數對所有模式都有效果呢??不會要自己遍歷數據庫,一個一個實體判斷吧???
解决如下:
AcDbExtents extents;
ads_name ssname;
... [/B]
1、SSGET屏幕外的只有X参数可以选到(选择全部实体),其他都做不到,因为SSGET是基于显示表结构的,只能选择屏幕内的实体。如果你想选择屏幕外的,只能遍历数据库。
2、保存当前视图,你应该实例一个AcDbViewTableRecord 对象:
AcDbViewTableRecord *pvRec=new AcDbViewTableRecord;
然后利用其下面的编辑方法,把一些视口的信息写到这个对象里面,最后把AcDbViewTableRecord 对象添加到AcDbViewTable表里面就可以了,需要保存的,下面:
[php]
ads_getvar("VIEWMODE", &var);
pvRec->setPerspectiveEnabled(var.resval.rint & 1);
pvRec->setFrontClipEnabled(var.resval.rint & 2);
pvRec->setBackClipEnabled(var.resval.rint & 4);
pvRec->setFrontClipAtEye(!(var.resval.rint & 16));
ads_getvar("BACKZ", &var);
pvRec->setBackClipDistance(var.resval.rreal);
ads_getvar("VIEWCTR", &var);
ads_trans(var.resval.rpoint, &UCS, &DCS, NULL, var.resval.rpoint);
pvRec->setCenterPoint(AcGePoint2d(var.resval.rpoint[X],
var.resval.rpoint[Y]));
ads_getvar("FRONTZ", &var);
pvRec->setFrontClipDistance(var.resval.rreal);
ads_getvar("LENSLENGTH", &var);
pvRec->setLensLength(var.resval.rreal);
ads_getvar("TARGET", &var);
ads_trans(var.resval.rpoint, &UCS, &WCS, NULL, var.resval.rpoint);
pvRec->setTarget(AcGePoint3d(var.resval.rpoint[X],
var.resval.rpoint[Y], var.resval.rpoint[Z]));
ads_getvar("VIEWDIR", &var);
ads_trans(var.resval.rpoint, &UCS, &WCS, TRUE, var.resval.rpoint);
pvRec->setViewDirection(AcGeVector3d(var.resval.rpoint[X],
var.resval.rpoint[Y], var.resval.rpoint[Z]));
ads_getvar("VIEWSIZE", &var);
pvRec->setHeight(var.resval.rreal);
double height=var.resval.rreal;
ads_getvar("SCREENSIZE", &var);
pvRec->setWidth(var.resval.rpoint[X]/var.resval.rpoint[Y]*height);
[/php] |
|