andyzha 发表于 2019-12-11 10:48:02

请教视口的显示锁定和打开用一个命令循环切换怎么实现?

现在用两个命令能实现,能否用一个命令循环切换视口的锁定开关呢?

;;;图纸空间锁定视图
(DEFUN c:sd ()
(setvar "cmdecho" 0)
(command "mview" "l" "on" "all" "")
(princ)
)

;;;图纸空间解锁视图
(DEFUN c:kf ()
(setvar "cmdecho" 0)
(command "mview" "l" "off" "all" "")
(princ)
)

有点类似切换是否显示菜单栏这个lisp:
(defun c:AA ()
(if      (= 0 (getvar "menubar"))
(command "menubar" 1)
(command "menubar" 0))
(princ))


x_s_s_1 发表于 2019-12-12 19:55:12

如果对布局中所有视口(自己还有点没想明白,不过结果是没问题的),如下:
(defun c:vssa (/ name lock)
(vlax-for item
               (vlax-get-property
                   (vlax-get-property
                     (vlax-get-acad-object)
                     "activedocument"
                   )
                   "PaperSpace"
               )
    (setq name (vlax-get-property item "ObjectName"))
    (if        (= name "AcDbViewport")
      (progn (setq lock (vlax-get-property item "displaylocked"))
             (if (= lock :vlax-false)
             (vlax-put-property item "displaylocked" :vlax-true)
             (vlax-put-property item "displaylocked" :vlax-false)
             )
      )
    )
)
(princ)
)

x_s_s_1 发表于 2019-12-12 19:02:56

试试(defun c:vss (/ obj lock)
(setq        obj(vlax-ename->vla-object
             (ssname (ssget ":e:s" '((0 . "viewport"))) 0)
             )
        lock (vlax-get-property obj "displaylocked")
)
(if (= lock :vlax-false)
    (progn (vlax-put-property obj "displaylocked" :vlax-true)
           (alert "未锁变锁")
    )
    (progn (vlax-put-property obj "displaylocked" :vlax-false)
           (alert "锁变未锁")
    )
)
(princ)
)

andyzha 发表于 2019-12-11 18:02:12

期待大神出手修改一下

andyzha 发表于 2019-12-12 19:36:23

很完美,加弹窗提示更加清晰锁定状态。

andyzha 发表于 2019-12-12 20:55:54

x_s_s_1 发表于 2019-12-12 19:55
如果对布局中所有视口(自己还有点没想明白,不过结果是没问题的),如下:
多谢考虑如此周全,主要是总需要用布局出图,总会反复修改视口,而且不希望用两个快捷键来回解锁和锁定,你的lisp完美的解决了这个问题。再次感谢

start4444 发表于 2019-12-14 11:08:27

统一命令看似好其实没效率,比如你不知道这个视口是锁了还是开了,统一命令之后你是开了还是锁上了?你自己还要手动去验证,分开命令就可以明确的知道是全开还是全锁,随心所欲

圣天诺杰 发表于 2019-12-14 11:51:31

建议分开,视口锁定与视口解锁两个功能,方便实用。
如果再写个视口开/关来缓解视口多会卡,或者视口隔离(除选中视口外,其他视口关闭),视口恢复(打开所有视口,仅此布局选项卡)

andyzha 发表于 2019-12-14 16:30:00

start4444 发表于 2019-12-14 11:08
统一命令看似好其实没效率,比如你不知道这个视口是锁了还是开了,统一命令之后你是开了还是锁上了?你自己 ...
判断视口是否锁定很简单,双击视口进去滚轮缩放一下就知道了,合并命令主要是为了不想设置过多快捷键,基本上cad都是键盘快捷键驱动命令行,所以太多了记不住,也容易混淆。力求CAD绘图界面除了图层面板不关,其他的全部关闭。

maiko 发表于 2019-12-18 09:45:26

判断视口是否锁定可以在视口线上,以颜色区分
页: [1] 2
查看完整版本: 请教视口的显示锁定和打开用一个命令循环切换怎么实现?