明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 6022|回复: 14

[基础] C#开发CAD这么弱吗?zoom都这么难解决

[复制链接]
发表于 2015-7-28 17:56:21 | 显示全部楼层 |阅读模式
C#开发CAD这么弱吗?zoom都这么难解决
大家是怎么解决的?
发表于 2015-8-10 11:06:09 | 显示全部楼层
Autodesk.AutoCAD.Internal.Utils.ZoomAuto(1, 1, 1, 1, 1)
回复 支持 1 反对 0

使用道具 举报

发表于 2024-2-1 15:54:28 | 显示全部楼层
guohq 发表于 2015-8-1 15:41
_
    Private Shared Function acedCmd(ByVal rbp As IntPtr) As Integer
         

    Public Shared Sub ZoomAll()
        Dim res As New ResultBuffer From {
            New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "._ZOOM"),
            New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "_A")
        }
        acedCmd(res.UnmanagedObject)
    End Sub
    <DllImport("accore.dll", EntryPoint:="acedCmd", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.Cdecl)>
    Private Shared Function acedCmd(ByVal rbp As IntPtr) As Integer
    End Function

为何我这个zoomall没反应
发表于 2024-2-5 08:09:08 | 显示全部楼层
tiancao100 发表于 2024-2-1 15:54
Public Shared Sub ZoomAll()
        Dim res As New ResultBuffer From {
            New Typed ...

你用的CAD哪个版本?
发表于 2015-8-1 08:47:08 来自手机 | 显示全部楼层
可以调用com库的zoom×××
发表于 2015-8-1 15:41:18 | 显示全部楼层
<DllImport("acad.exe", EntryPoint:="acedCmd", CharSet:=CharSet.Auto, CallingConvention:=CallingConvention.Cdecl)> _
    Private Shared Function acedCmd(ByVal rbp As IntPtr) As Integer
         
    End Function


    Public Shared Sub ZoomWindow(ByVal Point1 As Point3d, ByVal Point2 As Point3d)

        Dim res As New ResultBuffer
        res.Add(New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "._ZOOM"))
        res.Add(New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "_W"))
        res.Add(New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Point3d, Point1))
        res.Add(New TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Point3d, Point2))
        acedCmd(res.UnmanagedObject)
    End Sub

平台调用,很方便!!
发表于 2015-9-6 20:46:07 | 显示全部楼层
guohq 发表于 2015-8-1 15:41
_
    Private Shared Function acedCmd(ByVal rbp As IntPtr) As Integer
         

guohp仁兄能否用C#改写下?感谢,感觉用.NET的ZE不准确,我都是通过com的
发表于 2015-9-9 10:37:36 | 显示全部楼层
  1. [DllImport("acad.exe", EntryPoint = "acedCmd", CharSet = CharSet.Auto, CallingConvention = CallingConvention.Cdecl)]
  2. private static extern int acedCmd(IntPtr rbp);




  3. public static void ZoomWindow(Point3d Point1, Point3d Point2)
  4. {
  5.         ResultBuffer res = new ResultBuffer();
  6.         res.Add(new TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "._ZOOM"));
  7.         res.Add(new TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Text, "_W"));
  8.         res.Add(new TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Point3d, Point1));
  9.         res.Add(new TypedValue(Autodesk.AutoCAD.Runtime.LispDataType.Point3d, Point2));
  10.         acedCmd(res.UnmanagedObject);
  11. }
发表于 2015-10-6 18:17:12 | 显示全部楼层
guohq 发表于 2015-9-9 10:37

Autodesk.AutoCAD.Runtime.LispDataType.Text

这介.net 4.0的功能吧?
.net 2.0显示没有这个
发表于 2015-10-8 09:07:59 | 显示全部楼层
这个……。NET相比较之前的ARX还是有很多地方没有完善的,如果不将之前的ARX打包,则自己实现起来就比较麻烦了
发表于 2016-1-13 21:10:54 | 显示全部楼层
C#没有这么弱。
Zoom,需要对底层的视口记录操作,如下面代码,获取到ViewTableRecord 对象后,对其CenterPoint、Width、Height属性进行设计即可。
  1.                         Autodesk.AutoCAD.ApplicationServices.Document doc = Autodesk.AutoCAD.ApplicationServices.Application.DocumentManager.MdiActiveDocument;
  2.                         Editor editor = doc.Editor;
  3.                         ViewTableRecord viewTableRecord = editor.GetCurrentView();
  4.                         try
  5.                         {
  6.                                 viewTableRecord.CenterPoint = center;
  7.                                 viewTableRecord.Height = (extents.MaxPoint.Y - extents.MinPoint.Y);
  8.                                 viewTableRecord.Width = (extents.MaxPoint.X - extents.MinPoint.X);
  9.                                 editor.SetCurrentView(viewTableRecord);
  10.                                 Autodesk.AutoCAD.ApplicationServices.Application.UpdateScreen();
  11.                         }

复制代码
发表于 2016-3-1 17:08:27 | 显示全部楼层
cairunbin 发表于 2016-1-13 21:10
C#没有这么弱。
Zoom,需要对底层的视口记录操作,如下面代码,获取到ViewTableRecord 对象后,对其Center ...

cad2006呢,Editor貌似没有GetCurrentView()和SetCurrentView()方法啊
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 04:38 , Processed in 0.188276 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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