找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 2645|回复: 2

[分享] 窗口缩放 实现 Zoom W 功能

[复制链接]
发表于 2013-5-13 11:08:36 | 显示全部楼层 |阅读模式

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

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

×
[pcode=vbnet,true] ''' <summary>
    ''' 窗口缩放
    ''' </summary>
    ''' <param name="Pt1"></param>
    ''' <param name="Pt2"></param>
    ''' <param name="dScale">放大倍数  大于 0 </param>
    ''' <param name="OffestCenterX">中心偏移量X</param>
    ''' <param name="OffestCenterY">中心偏移量Y</param>
    ''' <remarks></remarks>
    Public Sub ZoomW(ByVal Pt1 As Point3d, ByVal Pt2 As Point3d, Optional ByVal dScale As Double = 1.0, Optional ByVal OffestCenterX As Double = 0, Optional ByVal OffestCenterY As Double = 0)
        '状态:20130417-2333测试通过
        Dim MinX As Double = Math.Min(Pt1.X, Pt2.X)
        Dim MinY As Double = Math.Min(Pt1.Y, Pt2.Y)
        Dim MaxX As Double = Math.Max(Pt1.X, Pt2.X)
        Dim MaxY As Double = Math.Max(Pt1.Y, Pt2.Y)
        If MaxX > MinX AndAlso MaxY > MinY Then
            Dim ViewR As ViewTableRecord = New ViewTableRecord()
            Dim OldView As ViewTableRecord = Doc.Editor.GetCurrentView
            If dScale <= 0 Then
                dScale = 1
            End If
            Dim newWidth As Double = (MaxX - MinX) / dScale
            Dim newHeight As Double = (MaxY - MinY) / dScale

            If (newHeight / OldView.Height) > (newWidth / OldView.Width) Then
                ViewR.Height = newHeight
            Else
                ViewR.Width = newWidth
            End If
            ViewR.CenterPoint = New Point2d((MaxX + MinX) / 2 + OffestCenterX, (MaxY + MinY) / 2 + OffestCenterY)
            Doc.Editor.SetCurrentView(ViewR)
            Doc.Editor.UpdateScreen()
        End If
    End Sub[/pcode]

评分

参与人数 1D豆 +6 收起 理由
XDSoft + 6 很给力!经验;技术要点;资料分享奖!

查看全部评分

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

使用道具 举报

已领礼包: 1632个

财富等级: 堆金积玉

发表于 2013-10-4 21:28:46 | 显示全部楼层
转成C#的写法便于大家学习

  1. /// <summary>
  2. /// 窗口缩放
  3. /// </summary>
  4. /// <param name="Pt1"></param>
  5. /// <param name="Pt2"></param>
  6. /// <param name="dScale">放大倍数  大于 0 </param>
  7. /// <param name="OffestCenterX">中心偏移量X</param>
  8. /// <param name="OffestCenterY">中心偏移量Y</param>
  9. /// <remarks></remarks>
  10. public void ZoomW(Point3d Pt1, Point3d Pt2, double dScale = 1.0, double OffestCenterX = 0, double OffestCenterY = 0)
  11. {  
  12. double MinX = Math.Min(Pt1.X, Pt2.X);
  13. double MinY = Math.Min(Pt1.Y, Pt2.Y);
  14. double MaxX = Math.Max(Pt1.X, Pt2.X);
  15. double MaxY = Math.Max(Pt1.Y, Pt2.Y);
  16. if (MaxX > MinX && MaxY > MinY)
  17. {  
  18. ViewTableRecord ViewR = new ViewTableRecord();  
  19. ViewTableRecord OldView = Doc.Editor.GetCurrentView;  
  20. if (dScale <= 0)
  21. {   
  22. dScale = 1;  
  23. }  
  24. double newWidth = (MaxX - MinX) / dScale;  
  25. double newHeight = (MaxY - MinY) / dScale;  
  26. if ((newHeight / OldView.Height) > (newWidth / OldView.Width))
  27. {   
  28. ViewR.Height = newHeight;  
  29. }
  30. else
  31. {   
  32. ViewR.Width = newWidth;  
  33. }  
  34. ViewR.CenterPoint = new Point2d((MaxX + MinX) / 2 + OffestCenterX, (MaxY + MinY) / 2 + OffestCenterY);  Doc.Editor.SetCurrentView(ViewR);  
  35. Doc.Editor.UpdateScreen();
  36. }
  37. }

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-7 10:31 , Processed in 0.165048 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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