- UID
- 281509
- 积分
- 1054
- 精华
- 贡献
-
- 威望
-
- 活跃度
-
- D豆
-
- 在线时间
- 小时
- 注册时间
- 2005-6-21
- 最后登录
- 1970-1-1
|
发表于 2006-5-18 11:05:22
|
显示全部楼层
有两个系统变量记录图纸最左下角点和最右上角点的坐标
acedGetVar("EXTMIN",&rb);
rb.restype=RTPOINT;
winPt1.x=rb.resval.rpoint[X];
winPt1.y=rb.resval.rpoint[Y];
acedGetVar("EXTMAX",&rb);
rb.restype=RTPOINT;
winPt2.x=rb.resval.rpoint[X];
winPt2.y=rb.resval.rpoint[Y];
得到这两点后就可以调用以下函数
void CGenericFun::ArxZoom(AcGePoint3d point1,AcGePoint3d point2)
{
AcDbViewTableRecord view;
ads_point vpDir;
ads_point wdcsmax, wdcsmin;
AcGeVector3d viewDir;
AcGePoint2d cenPt;
ads_real lenslength,viewtwist,frontz,backz;
ads_point target;
int viewmode,tilemode,cvport;
struct resbuf rb;
struct resbuf wcs, dcs, ccs;
ads_point wmin, wmax;
ads_point pt1, pt2;
pt1[X]=point1.x;
pt1[Y]=point1.y;
pt2[X]=point2.x;
pt2[Y]=point2.y;
if (pt1[X] >= pt2[X])
{
wmax[X] = pt1[X];
wmin[X] = pt2[X];
}
else
{
wmax[X] = pt2[X];
wmin[X] = pt1[X];
}
if (pt1[Y] >= pt2[Y])
{
wmax[Y] = pt1[Y];
wmin[Y] = pt2[Y];
}
else
{
wmax[Y] = pt2[Y];
wmin[Y] = pt1[Y];
}
wmax[Z] = 0.0;
wmin[Z] = 0.0;
wcs.restype = RTSHORT;
wcs.resval.rint = 0;
ccs.restype = RTSHORT;
ccs.resval.rint = 1;
dcs.restype = RTSHORT;
dcs.resval.rint = 2;
// Get the 'VPOINT' direction vector
ads_getvar("VIEWDIR", &rb);
ads_trans(rb.resval.rpoint, &ccs, &wcs, 0, vpDir);
viewDir.set(vpDir[X], vpDir[Y], vpDir[Z]);
// convert upper right window corner to DCS
ads_trans(wmax, &ccs, &dcs, 0, wdcsmax);
// convert lower left window corner to DCS
ads_trans(wmin, &ccs, &dcs, 0, wdcsmin);
// calculate and set view center point
cenPt.set(wdcsmin[X] + ((wdcsmax[X] - wdcsmin[X]) / 2.0),
wdcsmin[Y] + ((wdcsmax[Y] - wdcsmin[Y]) / 2.0));
view.setCenterPoint(cenPt);
// set view height and width and direction
view.setHeight(fabs(wdcsmax[Y] - wdcsmin[Y]));
view.setWidth(fabs(wdcsmax[X] - wdcsmin[X]));
view.setViewDirection(viewDir);
// get and set other properties
ads_getvar("LENSLENGTH", &rb);
lenslength = rb.resval.rreal;
view.setLensLength(lenslength);
ads_getvar("VIEWTWIST", &rb);
viewtwist = rb.resval.rreal;
view.setViewTwist(viewtwist);
ads_getvar("FRONTZ", &rb);
frontz = rb.resval.rreal;
ads_getvar("BACKZ", &rb);
backz = rb.resval.rreal;
ads_getvar("VIEWMODE", &rb);
viewmode = rb.resval.rint;
view.setPerspectiveEnabled(viewmode & 1);
view.setFrontClipAtEye(!(viewmode & 16));
ads_getvar("TILEMODE", &rb);
tilemode = rb.resval.rint;
ads_getvar("CVPORT", &rb);
cvport = rb.resval.rint;
bool paperspace=((tilemode==0)&&(cvport==1))?true:false;
view.setIsPaperspaceView(paperspace);
if (!paperspace)
{
view.setFrontClipDistance(frontz);
view.setBackClipDistance(backz);
}
else
{
view.setFrontClipDistance(0.0);
view.setBackClipDistance(0.0);
}
ads_getvar("TARGET", &rb);
ads_trans(rb.resval.rpoint, &ccs, &wcs, 0, target);
view.setTarget(AcGePoint3d(target[X], target[Y], target[Z]));
acedSetCurrentView(&view,NULL);
} |
|