xiaomm250
发表于 2023-4-4 11:23:28
本帖最后由 xiaomm250 于 2023-4-4 11:29 编辑
xiaomm250 发表于 2023-4-4 10:49
你的这个简直就是宝库,我从那儿把你代码复制粘贴过来了
(vl-load-com)
;子函数,布局名列表,按照当前屏幕显示的顺序返回所有布局名称
(defun c:lolist(/ a lst newlst out x y xx)
(setq lst nil);初始赋值
;vlax获取所有的布局的顺序号、布局名称,两列,获得这个列表
(vlax-for Layout (vla-get-Layouts(vla-get-ActiveDocument(vlax-get-acad-object)))
(setq lst (cons (list (vla-get-TabOrder Layout)(vla-get-name Layout)) lst))
)
;重新排序,按照第1列(TabOrder)从小到大的顺序排列
(setq newlst (vl-sort lst (function(lambda(x y)(<(car x)(car y))))))
;只取第二列的元素,也就是布局的名称
(setq out (mapcar(function(lambda(xx)(nth 1 xx))) newlst))
;第一个是模型名称,因此删除
(setq out (cdr out))
)
我把你的代码改一改!
完善你的代码,让你的代码能独立工作,并且让代码可读性进一步提升!
陨落
发表于 2023-4-4 12:51:34
这个问题不闭合---从模型空间到图纸空间,不仅涉及到“哪个布局”的问题,还涉及到“哪个视口的问题”。要说这个功能,leemac早就写过了。
vitalgg
发表于 2023-4-4 12:54:48
本帖最后由 vitalgg 于 2023-4-4 13:00 编辑
xiaomm250 发表于 2023-4-4 11:03
你的*layouts*又是什么东西?我总感觉你这代码不对,
你有你这lst似乎缺乏初值,还有vla-get-taborder, ...
不需要复制函数,只需安装 @lisp ,这些函数就自动加载到CAD了。
*layouts* 是布局的对象集 的 ActiveX
xiaomm250
发表于 2023-4-4 13:57:37
vitalgg 发表于 2023-4-3 17:58
(ssget "x" (list '(0 . "图元类型")'(410 . "布局名") '(-4 . ">,>,*") '(10X1 Y1 Z1)'(-4 . “
(ssget "x" (list '(0 . "图元类型")'(410 . "布局名") '(-4 . ">,>,*") '(10X1 Y1 Z1)'(-4 . “<,<,*")'(10X2 Y2 Z2)))选中是能选中了,但是删除不掉
(command"_ERASE" ss "")
我用这个命令,删除不掉,
ss是ssget得到的选择集,但是我删除不掉不在当前空间里面的图元
xiaomm250
发表于 2023-4-6 08:48:48
xiaomm250 发表于 2023-4-4 13:57
选中是能选中了,但是删除不掉
(vla-delete(vlax-ename->vla-object (ssname ss i)))
用这个能把看见的、看不见的都删除掉!
xiaomm250
发表于 2023-4-6 14:47:01
陨落 发表于 2023-4-4 12:51
这个问题不闭合---从模型空间到图纸空间,不仅涉及到“哪个布局”的问题,还涉及到“哪个视口的问题”。要 ...
你很牛,居然想到leemac的代码有这个功能,不过他的代码基本都是天书,送给我看我也看不懂