AutoCAD.NET 获取当前活动视口

本文介绍了一个使用C#编写的AutoCAD视口迭代器方法,该方法通过遍历所有视口并打印其名称,揭示了*Active名字在模型空间平铺视口中的普遍性。对于AutoCAD插件开发者来说,这是一个实用的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[CommandMethod("ViewportIterator")]
    public static void ViewportIterator_Method()
    {
      Database database = HostApplicationServices.WorkingDatabase;
      using (Transaction transaction = database.TransactionManager.StartTransaction())
      {
        SymbolTable symTable = (SymbolTable)transaction.GetObject(database.ViewportTableId, OpenMode.ForRead);
        foreach (ObjectId id in symTable)
        {
          ViewportTableRecord symbol = (ViewportTableRecord)transaction.GetObject(id, OpenMode.ForRead);

          //TODO: Access to the symbol
          MgdAcApplication.DocumentManager.MdiActiveDocument.Editor.WriteMessage(string.Format("\nName: {0}", symbol.Name));
        }

        transaction.Commit();
      }
    }

 

运行结果

Name: *Active

“*Active”这个名字不是唯一的,因为当前在模型空间里显示的所有平铺视口的名字都是“*Active”

 

### CAD二次开发中实现居中的方法 在CAD二次开发过程中,为了使图形窗内的特定区域或对象处于屏幕中心位置,通常会使用`Zoom`命令及其变体来调整图。对于AutoCAD平台上的VBA、.NET API(如C#)、ObjectARX等不同编程接而言,具体操作方式有所差异。 当采用.NET环境进行开发时,可以调用Document类下的Windows集合里的ActiveViewport属性获取当前活动窗实例,并通过设置其Target(目标点),CenterPoint(中心点坐标)以及利用Application.DocumentManager.MdiActiveDocument.SendStringToExecute发送指令字符串的方式完成区重定位与缩放效果[^1]: ```csharp using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; public static void ZoomExtents() { Document doc = Application.DocumentManager.MdiActiveDocument; Database db = doc.Database; // 发送_ZOOM _CENTER 命令并附加参数以达到指定位置为中心放大缩小的目的 string commandLine = "_ZOOM _CENTER 0,0 w " + (doc.WindowWidth / 2).ToString() + "," + (doc.WindowHeight / 2).ToString(); doc.SendStringToExecute(commandLine , true, false, false); } ``` 上述代码片段展示了如何向AutoCAD输入类似于“_ZOOM _CENTER X,Y W A,B”的控制序列,这里X,Y代表新的观察焦点;W表示相对单位宽度而A,B则是相对于绘图区尺寸的比例因子,在此例中即为半个窗大小,从而实现了基于坐标的精确聚焦[^2]。 另外一种更为直观的方法是直接应用内置的`_ZOOM`命令配合选项`_EXTENTS`自动适应整个图纸范围或将关注的对象集纳入野中央[^3]: ```csharp // 使用_ZOOM _EXTENTS 自动调整到最佳角 string cmdStr = "_ZOOM \n_EXTENTS\n"; doc.SendStringToExecute(cmdStr, true, false, false); ``` 这两种方案均能有效解决居中的需求,开发者可以根据实际应用场景灵活选用合适的技术路线。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值