setView的实现

原创 2006年05月30日 15:07:00

    昨天文章中提到的setView的函数,采用了如下代码实现。其中,先获取当前DwgView的尺寸,然后在保证pt1/pt2的显示范围的前提下,以指定矩形中心点为中心,计算出符合当前DwgView比例的范围,然后再外扩,从而得到相关的显示范围。以下代码权作备份吧,如果有开发类似的也可以以此作参考。

//设置当前显示范围
void setView(AcGePoint2d Pt1, AcGePoint2d Pt2, double ex_ratio)
{
 AcGePoint2d CenterPt;

 //若X坐标或Y坐标重合,判为意外,不进行SetView操作
 if ((fabs(Pt1.x-Pt2.x)<1e-6)||(fabs(Pt1.y-Pt2.y)<1e-6))
  return;

 //确保两个坐标点分别为左上角和右下角
 if (Pt1.x>Pt2.x) {
  double tmp;
  tmp = Pt1.x;
  Pt1.x = Pt2.x;
  Pt2.x = tmp;
 }
 if (Pt2.y>Pt1.y) {
  double tmp;
  tmp = Pt1.y;
  Pt1.y = Pt2.y;
  Pt2.y = tmp;
 }
 
 //获取当前DwgView的尺寸
 CRect CADrect;
 acedGetAcadDwgView()->GetClientRect(&CADrect);

 double width,height,ratio;

 ratio = (double)(CADrect.right-CADrect.left)/(double)(CADrect.bottom-CADrect.top);

 if (fabs(ratio)<1e-6)
  return;

 if ((Pt2.x-Pt1.x)/(Pt1.y-Pt2.y) > ratio) {
  width = Pt2.x-Pt1.x;
  height = width/ratio;
 }else{
  height = Pt1.y-Pt2.y;
  width = height * ratio;
 }

 //设置当前视图中心点
 CenterPt.x = (Pt1.x+Pt2.x)/2;
 CenterPt.y = (Pt1.y+Pt2.y)/2;
 
 //改变当前视图
 AcDbViewTableRecord pVwRec;
 pVwRec.setCenterPoint(CenterPt);
 pVwRec.setWidth(width * ex_ratio);
 pVwRec.setHeight(height * ex_ratio);
 acedSetCurrentView( &pVwRec, NULL );
}

 

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

百度员工离职总结:如何做个好员工

2014年7月4日,我从百度离职了。   这是第一次,我不是因为和老板闹翻而离职;   这是第一次,我带着晋升的喜悦而离职;   这是第一次,我带着满满的收获而离职。   我曾...

好的产品经理是怎样炼成的?

摘要:最近在网上疯传《产品经理是条狗》,在现实生活中真有这么悲催吗?周鸿祎曾说过一名优秀的产品经理,最重要是具备强大的心理素质,不怕骂,而且善于从骂声中找到改善产品的机会。那么好的产品经理是如何炼成的...

并不是所有的程序员都适合做技术管理

摘要:这是曾经的技术高手,如今却是名职业经理人分享的内容。他称,相信很多程序员都想做管理,一方面是高薪,另一方面则是做管理很风光、工作也轻松,但实际上并不是所有人都适合做管理,技术和管理是两完全不同的...

从Perforce到Git的迁移

公司经过多次兼并、收购之后,开发团队使用的工具自然会出现鱼龙混杂的现象。就拿源代码管理工具来说,我们同时在使用的就有Perforce、Team Foundation、Subversion等。为了节省成...

从程序员到技术总监,分享10年开发经验

http://blog.csdn.net/smarttony/article/details/6697617 在中国有很多人都认为IT行为是吃青春饭的,如果过了30岁就很难有机会再发展下去!其实...

自动生成html文件

C# code using System; using System.Data; using System.Configuration; using System.Web; using System....

今天上班可以放羊

如果你受雇于谷歌,那你只须拿80%的时间用在本职工作上。而另外20%的时间,你可以用来做任何你想做的事情——前提是,你所做的事会以某种方式帮助谷歌进步。至少理论上是这样的。 到目前为止,谷歌的20%...

专访蒋宇捷:技术管理者应具备哪些能力?

编程初体验 CSDN:你何时开始接触计算机,又如何走上编程道路的? 蒋宇捷:小学的时候,父母单位的苹果机、386和586都可以让我在空闲时候使用。而在那时代彩色显示器非常少见,即使一个小小的黑白屏...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)