xiaocainiao 发表于 2024-7-2 08:47:05

lisp能否用通配符搜索图层名

(tblsearch "LAYER" "家具" )想请教一下大家!

lisp中有没有方法可以用通配符来搜索图层名,
tblsearch函数貌似不支持通配符

例如:
文件中有 "平面|家具"和"立面|家具" 两个图层,
我想通过 "*|家具" 来直接搜索到这两个图层、

不知道能不能实现、之前是用遍历所有图层的方法、
但是图层多了以后、执行起来就会很卡

ssyfeng 发表于 2024-7-2 09:01:43

lisp应该没有这种函数

kozmosovia 发表于 2024-7-2 09:12:44

图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧

x_s_s_1 发表于 2024-7-2 10:26:47

随手,未测试
(defun get_l(pattern / tbl lst);_(get_l "*|家具")
    (setq tbl (tblnext "layer" t))
    (while tbl
        (setq lst (cons (cdr (assoc 2 tbl)) lst)
              tbl (tblnext "layer")))
    (vl-remove-if-not (function (lambda (x) (wcmatch x pattern))) lst))

xiaocainiao 发表于 2024-7-2 11:37:02

kozmosovia 发表于 2024-7-2 09:12
图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧

亲测会卡、我用的tblnext加while循环获取的参照图层列表、两千来个参照图层、需要2秒以上才能获取到图层列表、如果再判断图层是否再图层列表内、就更卡了、而且我还要循环判断一个图层列表、是否在当前文件的参照图层列表内、运行以后简直卡成狗

xiaocainiao 发表于 2024-7-2 11:39:59

kozmosovia 发表于 2024-7-2 09:12
图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧

当然我这个获取参照图层列表不仅仅是获取图层名、还把图层名进行了拆分处理、就是将参照图层名又拆分成3部分(参照图层名+参照名+去掉参照名后的图层名)、不知道是不是因为加了这个拆分处理才变卡的、晚点我去掉试一下

ssyfeng 发表于 2024-7-2 11:55:06

如果非常卡可能要优化算法和思路

xiaocainiao 发表于 2024-7-2 12:57:24

ssyfeng 发表于 2024-7-2 11:55
如果非常卡可能要优化算法和思路

现在就是再研究其他的方法、目前想到的都行不通

kozmosovia 发表于 2024-7-2 13:00:58

xiaocainiao 发表于 2024-7-2 11:37
亲测会卡、我用的tblnext加while循环获取的参照图层列表、两千来个参照图层、需要2秒以上才能获取到图层 ...

用vlax-for,层数量多时比tblsearch快

xiaocainiao 发表于 2024-7-2 13:03:58

kozmosovia 发表于 2024-7-2 13:00
用vlax-for,层数量多时比tblsearch快

谢谢、我试试、刚刚想到另外一种方法、不去获取参照图层列表、直接获取当前文件内的参照名就行了、然后反向判断应该会好点
页: [1] 2
查看完整版本: lisp能否用通配符搜索图层名