乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 190|回复: 9

c#怎么实现zoom?????或者类似zoom缩放窗口的命令???????

[复制链接]

3

主题

9

帖子

3

银币

初来乍到

Rank: 1

铜币
21
发表于 2012-3-30 07:13:00 | 显示全部楼层 |阅读模式
困扰好长事件了,看过和帮助文件了,但是上面的方法老是提示错误,哪位高手帮帮忙,给个简单的小例子就行,小生先在这里谢过了,谢谢谢谢谢谢谢谢!!!!!!
回复

使用道具 举报

75

主题

306

帖子

10

银币

中流砥柱

Rank: 25

铜币
606
发表于 2012-3-31 01:30:00 | 显示全部楼层

Sub ZoomW(ByVal PT1 As Point2d, ByVal PT2 As Point2d, ByVal dScale As Double)
        Using Trans As Transaction = DB.TransactionManager.StartTransaction
            Dim VT As ViewTable = Trans.GetObject(DB.ViewTableId, Autodesk.AutoCAD.DatabaseServices.OpenMode.ForWrite)
            Dim MinX As Double = New Double() {PT1.X, PT2.X}.Min
            Dim MinY As Double = New Double() {PT1.Y, PT2.Y}.Min
            Dim MaxX As Double = New Double() {PT1.X, PT2.X}.Max
            Dim MaxY As Double = New Double() {PT1.Y, PT2.Y}.Max
            If MaxX > MinX And MaxY > MinY Then
                Dim newVtr As New ViewTableRecord
                newVtr.CenterPoint = New Point2d((MaxX + MinX) / 2.0, (MaxY + MinY) / 2.0)
                Dim newHeight As Double = MaxY - MinY, newWidth As Double = MaxX - MinX
                If dScale > 0 Then
                    newHeight = newHeight / dScale
                    newWidth = newWidth / dScale
                End If
                Dim CurVtr As ViewTableRecord = ED.GetCurrentView
                If newHeight / CurVtr.Height > newWidth / CurVtr.Width Then
                    newVtr.Height = newHeight
                Else
                    newVtr.Width = newWidth
                End If
                ED.SetCurrentView(newVtr)
                ED.UpdateScreen()
            End If
            Trans.Commit()
        End Using
    End Sub
贴个VB的,希望对你有点用处
回复

使用道具 举报

22

主题

99

帖子

2

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
187
发表于 2012-4-1 09:26:00 | 显示全部楼层
public static void SendStringToExecute(string command)    {      Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;                if (!command.EndsWith(" ")) {//确保命令后面有空格,相当于需要回车后执行命令,否则命令不执行        command = command + " ";      }      doc.SendStringToExecute(command, true, false, false);    }
调用的时候
SendStringToExecute("._zoom _all ");
就可以了。
回复

使用道具 举报

29

主题

503

帖子

8

银币

中流砥柱

Rank: 25

铜币
619
发表于 2012-4-1 10:51:00 | 显示全部楼层

看一下3楼
回复

使用道具 举报

0

主题

2

帖子

2

银币

初来乍到

Rank: 1

铜币
2
发表于 2012-6-27 14:39:00 | 显示全部楼层
autocad2006+vs2005好象没有这个方法  ED.SetCurrentView(newVtr)?
回复

使用道具 举报

20

主题

73

帖子

3

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
153
发表于 2012-6-27 15:37:00 | 显示全部楼层
搞NET开发,建议你用AutoCAD2008版本以上的,2006的Bug太多。
回复

使用道具 举报

1

主题

10

帖子

1

银币

初来乍到

Rank: 1

铜币
14
发表于 2012-7-20 11:11:00 | 显示全部楼层
Application.DocumentManager.MdiActiveDocument.SendStringToExecute("_zoom _all",true,false,false);这样可以吗?
回复

使用道具 举报

2

主题

9

帖子

2

银币

初来乍到

Rank: 1

铜币
17
发表于 2012-7-24 15:37:00 | 显示全部楼层
利用发射也是可以的,比SetCurrentView速度快
using System.Reflection;  //注意引用这个
using AcadApp = Autodesk.AutoCAD.ApplicationServices.Application;
public static void ZoomExtents()  
        {
            object acad = AcadApp.AcadApplication;
            acad.GetType().InvokeMember("ZoomExtents", BindingFlags.InvokeMethod, null, acad, null);
        }
        public static void ZoomAll()
        {
            object acad = AcadApp.AcadApplication;
            acad.GetType().InvokeMember("ZoomAll", BindingFlags.InvokeMethod, null, acad, null);
        }
        public static void ZoomWindowReflection(Point3d p1, Point3d p2)
        {
            object acad = AcadApp.AcadApplication;
            object[] pts = { p1.ToArray(), p2.ToArray() };
            acad.GetType().InvokeMember("ZoomWindow", BindingFlags.InvokeMethod, null, acad, pts);
        }
回复

使用道具 举报

72

主题

2726

帖子

9

银币

社区元老

Rank: 75Rank: 75Rank: 75

铜币
3014
发表于 2012-7-24 17:47:00 | 显示全部楼层
反射Com类也算是一种简单方法 呵呵
回复

使用道具 举报

3

主题

11

帖子

1

银币

初来乍到

Rank: 1

铜币
23
发表于 2012-7-27 12:40:00 | 显示全部楼层
我正在用的程序是
doc.SendStringToExecute("'_zoom _e\n", false, false, true);
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-6-29 14:11 , Processed in 0.700831 second(s), 73 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表