CrockettScience 发表于 2019-4-15 17:57:26

编辑在图纸空间布局内的视口中使用Command()

我们的目标基本上相当于在视口中单击并执行Zoom => Extents来捕获模型空间中的所有内容,但使用的是C#命令。问题是,只执行editor.command()会执行布局中的命令,而不是视口。有没有一种方法可以模拟在执行之前先“点击”到视图中?
**** Hidden Message *****

Bryco 发表于 2019-4-15 18:30:15

在LISP中,等效的是:
-将sysvar tilemode设置为0(如果尚未)
-将文档的mspace属性设置为true(如果尚未)
-将sysvar cvport设置为目标视口的id(如果尚未)
不需要命令调用。应该很容易在C#中复制。干杯。

CrockettScience 发表于 2019-4-15 19:51:19

acadApp.SetSystemVariable(“Tilemode”, 0);0 和 1 切换
ed。SwitchToModelSpace 使 vp 处于活动状态
。SwitchToPaperSpace();使纸空间处于活动状态

kdub 发表于 2019-4-16 14:18:15


因此,如果您有多个副总裁,您如何知道哪个副总裁将成为活动副总裁,以及如何在中指定?网?

Bryco 发表于 2019-4-16 15:50:32

看看这是否有助于https://help.autodesk.com/view/OARX/2019/ENU/?guid=GUID-5FA86EF3-DEFD-4256-BB1C-56DAC32BD868 。
acLayoutMgr.CurrentLayout = acLayout.LayoutName;。

CrockettScience 发表于 2019-4-16 18:47:34

这里有一个小代码。第一个视口总是纸质空间视口。
您可以按大小或比例等循环浏览视口以选择特定的
LayoutManager lm = LayoutManager.Current;
                Layout layout = tr.GetObject(lm.GetLayoutId(lm.CurrentLayout), OpenMode.ForRead) as Layout;
                ObjectIdCollection vpIds = layout.GetViewports();
                if (vpIds.Count < 2)
                {
                  MessageBox.Show("There are no viewports in this layout, exiting:");
                  return;
                }
                if (db.PaperSpaceVportId == ed.CurrentViewportObjectId)// in paperspace viewport
                {
                  if (vpIds.Count == 2)
                  {
                        vp = tr.GetObject(vpIds, OpenMode.ForWrite) as Viewport;
                        vp.Locked = false;
                        ed.SwitchToModelSpace();
                  }
                  else

Bryco 发表于 2019-4-17 14:52:58

我明白了,现在我明白了。谢谢。
页: [1]
查看完整版本: 编辑在图纸空间布局内的视口中使用Command()