找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 919|回复: 9

[求助]:如何在Arx中实现zoom/e的功能?

[复制链接]
发表于 2006-5-18 10:42:12 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
我想在Arx中实现Zoom/e的功能,不知Arx中有没有提供对应的函数?谢谢!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2006-5-18 10:49:00 | 显示全部楼层
acedCommand(RTSTR, "_zoom", RTSTR, "_e", RTNONE);
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 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);
}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2006-5-18 12:20:44 | 显示全部楼层
谢谢ddpo1982  和RedCAD!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-18 13:37:29 | 显示全部楼层
RedCAD ,写的不错
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-19 08:22:12 | 显示全部楼层
RedCAD说的不错,可与调用acedcommand(...)函数相比,有些麻烦。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-22 11:15:47 | 显示全部楼层
对,能用AutoCAD本身的功能实现就用本身的功能!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-26 14:11:19 | 显示全部楼层
强啊!    顶
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 14:17:29 | 显示全部楼层
我用3楼楼主提供的函数
在最后语名acedSetCurrentView(&view,NULL); 时出错,不知是何原因
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2006-5-29 17:12:07 | 显示全部楼层
学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-15 04:43 , Processed in 0.462647 second(s), 49 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表