明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 917|回复: 14

[提问] lisp能否用通配符搜索图层名

[复制链接]
发表于 2024-7-2 08:47:05 | 显示全部楼层 |阅读模式
2明经币
  1. (tblsearch "LAYER" "家具" )
复制代码
想请教一下大家!

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

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

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

"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-7-2 09:01:43 | 显示全部楼层
lisp应该没有这种函数
回复

使用道具 举报

发表于 2024-7-2 09:12:44 | 显示全部楼层
图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧
回复

使用道具 举报

发表于 2024-7-2 10:26:47 | 显示全部楼层
随手,未测试
  1. (defun get_l  (pattern / tbl lst);_(get_l "*|家具")
  2.     (setq tbl (tblnext "layer" t))
  3.     (while tbl
  4.         (setq lst (cons (cdr (assoc 2 tbl)) lst)
  5.               tbl (tblnext "layer")))
  6.     (vl-remove-if-not (function (lambda (x) (wcmatch x pattern))) lst))
回复

使用道具 举报

 楼主| 发表于 2024-7-2 11:37:02 | 显示全部楼层
kozmosovia 发表于 2024-7-2 09:12
图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧

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

使用道具 举报

 楼主| 发表于 2024-7-2 11:39:59 | 显示全部楼层
kozmosovia 发表于 2024-7-2 09:12
图层列表是个表,最多也就几千个图层,lsp处理这种级别表会卡?搞笑呢吧

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

使用道具 举报

发表于 2024-7-2 11:55:06 | 显示全部楼层
如果非常卡可能要优化算法和思路
回复

使用道具 举报

 楼主| 发表于 2024-7-2 12:57:24 | 显示全部楼层
ssyfeng 发表于 2024-7-2 11:55
如果非常卡可能要优化算法和思路

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

使用道具 举报

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

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

使用道具 举报

 楼主| 发表于 2024-7-2 13:03:58 | 显示全部楼层
kozmosovia 发表于 2024-7-2 13:00
用vlax-for,层数量多时比tblsearch快

谢谢、我试试、刚刚想到另外一种方法、不去获取参照图层列表、直接获取当前文件内的参照名就行了、然后反向判断应该会好点
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-25 13:16 , Processed in 0.179103 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表