Lisp来排序我们不存在的
你好首先,我对lisp很陌生(一周的自学,以创建我的第一个自动化),但在这一点上我被卡住了
我的用例:
我从一家供应商那里得到了一张图纸,想根据图层修改一些对象。不幸的是,我只有一个我感兴趣的图层列表,可能在图纸中,但并非所有图层都在该供应商的每张图纸中。另外,图形中的一些对象位于图层上,不需要修改
更好理解的示例:
要修改的图层位于列表中:
(setq ltbm(列表“131”“144”“154”“204”“家具”“水”)
第一个图形中有以下图层:
(列出“1”“17”“131”“204”“石头”“家具”)
第二个图形使用了其他图层:
(列出“5”“76”“144”“154”“204”“空气”“水”)
问题是:
第一:
我需要找出使用了哪个有趣的层。
在第一种情况下:
(列出“131”“204”“家具”)
在第二种情况下:
(列出“144”“154”“204”“水”)
其次:
我需要选择该层上的所有对象。如果我手动执行选择命令。
第一种情况是:
(ssget mod(ssget“_X”'(-4.))
在第二种情况下:
(ssget mod(ssget“_X”'(-4.))
有了选择集mod,我可以自己继续。
所以我的问题是:
如何找出图形中使用的图层。而不是如何得到我感兴趣的层子集。以及如何在这些层上选择对象。
我希望有人能帮我。非常感谢。
顺致敬意,
马库斯 ssget过滤器可以包含图形中不存在的图层。你尝试做的很多事情都是不必要的。但通常建议检查ssget是否返回选择集而不是nil:
(if (setq mod (ssget "_X" (8 . "131,144,154,204,Furniture,Water")))
(progn
; Do something
)
)要检查层是否存在,可以使用以下选项:
(tblobjname "layer" "Water") 哦,真的。它的工作没有那么恶劣或太。当我试图在代码中放置一些不存在的层时,它返回了一个错误。看来我回到公司后还要再检查一遍
如果解决方案这么简单,那就太好了!!
提前谢谢!! 你可以使用你的图层列表,在警报中添加一点Roy_043建议,你可以添加图层等。
(setq ltbm (list "131" "144" "154" "204" "Furniture" "Water"))
(repeat (setq x (length ltbm))
(setq chk (tblobjname "layer" (nth (setq x (- x 1)) ltbm)))
(if (= chk nil)
(Alert (strcat "your layer " (nth x ltbm) "" "is missing"))
(princ (strcat "\n" (nth x ltbm)))
)
)
哦,不,如果我使用Roy_043建议的代码,我在加载lisp时会出错。
腐败的参数类型:consp“131,144,154,204,家具,水”
如何解决这个问题? 这段代码对找到的层上的所有对象进行处理,定义为“mod”
(defun C:CadTutor ( / )
(setq layerslist (list "layer1" "layer2" "layer3" "layer4"))
(foreach layer layerslist
(if (/= (tblsearch "LAYER" layer) nil)
(progn
(setq mod (ssget "_X" (list (cons 8 layer)))) ; selects all object on the found layers
; Code here to do something with the found layers
)
(progn
(princ (strcat "\nLayer: " layer " not found in drawing"))
)
)
)
(princ)
)
哎呀,我的错。代码应为:
(if (setq mod (ssget "_X" '((8 . "131,144,154,204,Furniture,Water"))))
(progn
; Do something
)
)
很好。
我刚刚评论了一些语句/代码供您参考,希望您不要介意。
不幸的是,罗伊的解决方案并没有像预期的那样奏效。它总是返回零。可能是因为它正在寻找一个在引号中包含字符的层。但Aftertouch提出的方法对我来说很有效。非常感谢! @Ament:
我不理解你的评论。ssget过滤器中的层与OP中您提供的层匹配。当然,如果它们不再适用,您必须更改它们。当然,你必须在我写的“做点什么”的地方添加代码。复制粘贴代码将返回零。
尝试:
(if (setq mod (ssget "_X" '((8 . "131,144,154,204,Furniture,Water"))))
(progn
(princ (strcat "\n" (itoa (sslength mod)) " entities in selection set "))
(princ)
; Do something
)
)
页:
[1]
2