cvport变量问题
我正在绘制一个只有两个视口的图形,因此cvport对于paperspace窗口应为1,对于第一个视口应为2,对于第二个视口应为3,但最后一个视口为4。当我尝试转到cvport 3时,它显示输入无效。当我输入(length(vports))时,它返回一个3。你知道这是为什么吗?还有什么方法可以纠正吗?
它搞乱了我的一个脚本,该脚本执行一个函数,并在所有视口完成后退出,因此它在退出时没有执行第二个视口,即cvport#3。 我认为模型空间本身被视为CVPORT列表的“视口”条目,如果这有帮助的话。 当您在模型中的线(长度(Vport))为1时,它确实返回一个整数,但这并不影响视口设置为cvport的数量。此外,这是我在这一期中看到的唯一一幅图画。具有典型的一个模型选项卡和一个布局选项卡的每个其他图形都会正确返回数字。有一个命名视图,我将其删除,关闭并重新打开图形,但数字仍然相同。 是否有可以看到错误的if语句?
例如,当我将cvport更改为3时,如果返回错误,请转到cvport 4? CVPORT只是通过其各自的标识号在视口之间切换,因此如果创建两个视口,您将得到如下结果:
((1 (blah blah)) (2 (blah blah)) (3 (blah blah)))
但是,如果现在删除一个视口并创建另一个视口,则会出现以下情况:
((1 (blah blah)) (2 (blah blah)) (4 (blah blah)))
所以,你可以看到为什么数字会不同 至于使用CVPORT变量进行切换,不确定是否可以使用以下内容:
(foreach v (vports)
(setvar "CVPORT" (car v))
do something here
)
当图形保持打开状态时,删除的视口的cvport不再有效,但当图形关闭并重新打开时,编号系统会自行重置。因此视口编号将是2 3和4,而不是2 3和5。 我发现了问题。该布局选项卡中有其他已关闭的视口。他们没有给(length(vports))添加值,但为变量“cvport”保留了一个插槽。视口与外部边界匹配,外部边界为白色,因此不可见。我假设在创建图形集时,该用户将标题栏从一个图形复制到另一个图形,但将视口带到了一起。擦除视口修复了该问题。
有没有办法在当前布局选项卡中找到所有关闭的视口并将其删除(以避免将来出现类似情况)? 这应该可以做到:
(defun c:test (/ ss)
(if (setq ss (ssget "X" (list (cons 0 "VIEWPORT")
(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach Obj (mapcar 'vlax-ename->vla-object
(mapcar 'cadr
(ssnamex ss)))
(if (eq :vlax-false (vla-get-ViewportOn Obj))
(if (vl-catch-all-error-p
(vl-catch-all-apply
'vla-delete (list Obj)))
(princ "\n<!> Object on Locked Layer <!>")))))
(princ "\n<!> No Viewports Found <!>"))
(princ))
一个旧职位,但。。。。。。。
我正在搜索一个简单的lisp来检查布局中关闭的任何视口。我通过搜索找到了这个帖子。我用if语句对其进行了一些修改,以查看是否有任何视口被关闭。它可以工作,但我相信它可以改进,还希望收到一条消息,通知所有视口都打开了。
(defun c:test (/ ss dfg)
(if (setq ss (ssget "X" (list (cons 0 "VIEWPORT")
(if (getvar "CTAB")(cons 410 (getvar "CTAB"))
(cons 67 (- 1 (getvar "TILEMODE")))))))
(progn
(foreach Obj (mapcar 'vlax-ename->vla-object
(mapcar 'cadr
(ssnamex ss)))
(if (eq :vlax-false (vla-get-ViewportOn Obj))
(setq dfg T)
(if (= dfg T)
(alert "WARNING! Some or ALL Viewports are turned OFF!"))
)))
)
(princ))
谢谢你的帮助。
页:
[1]
2