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的代码有这个功能,不过他的代码基本都是天书,送给我看我也看不懂
页: 1 2 [3]
查看完整版本: 用lisp如何实现把一个图元从模型空间复制到布局空间呀