Sweety 发表于 2022-7-6 10:17:07

在图层列表中搜索

大家好。
 
如何在图层列表中搜索与图层相关的信息?
 
实例
 

(setq txt (getstring "\n Enter Descriptions to look for it :" T ))       
    (tblsearch "LAYER" ............................

 
希望很快收到你们的来信。
 
我善良的情感

Lt Dan's l 发表于 2022-7-6 10:21:47

...你在找wcmatch吗

BlackBox 发表于 2022-7-6 10:24:05

 
 
也许这会产生您想要的结果:
 

(if (and (setq lay (getstring T "\n Enter Layer Name: "))
      (setq layList (tblsearch "LAYER" lay)))
(setq result (cdr (assoc <Index> layList))))

Sweety 发表于 2022-7-6 10:29:12

 
非常感谢你
 
您已经更改了我在第一个getstring函数中的句子,尽管它询问的是可能包含在层中的任何层的描述。
 
请再看一次。。。

(setq txt (getstring "\n Enter Descriptions to look for it :" T ))       
    (tblsearch "LAYER" ............................

 
非常感谢,希望你能找到答案。

BlackBox 发表于 2022-7-6 10:31:17

我不明白你想做什么。。。您想输入图层描述的一部分,然后搜索它所属的图层?

Sweety 发表于 2022-7-6 10:34:55

谢谢你的好意。
 
我想根据相关描述搜索一个或多个层。
 
所以我会给出详细的描述,代码会指示到一个特定的层。
 
顺致敬意,

BlackBox 发表于 2022-7-6 10:38:00

 
 
如果你已经知道图层描述,那么你已经知道它是什么图层了,不是吗?
 
这可以归结为内部/外部层命名约定的问题。

Sweety 发表于 2022-7-6 10:39:32

我想寻找一个层,因为我不知道哪个层属于特定的描述。(我有很多层,包括描述)。
 
谢谢

BlackBox 发表于 2022-7-6 10:43:34

我相信其他人有一个绝妙的解决方案,但就目前而言,也许这会有所帮助:
 

(defun c:FOO(/ txt desc hits)
(vl-load-com)
(if (setq txt (strcase (getstring "\n Enter Descriptions to look for it :")))
   (progn
   (vlax-for lay(vla-get-layers
                      (vla-get-activedocument
                        (vlax-get-acad-object)))
       (if (vl-string-search
             txt
             (strcase (setq desc (vla-get-description lay))))
         (cond
         (hits
            (setq hits (append hits
                               (cons (vla-get-name lay) desc))))
         ((setq hits (list (cons (vla-get-name lay) desc)))))))
   (if hits
       (progn
         (textpage)
         (terpri)
         (prompt "\n>>Listing Possible Results... ")
         (foreach itemhits
         (prompt (strcat "\n\t\t** Layer Name = \""
                           (car item)
                           "\"\t** Description = \""
                           (cdr item)
                           "\"")))
         (terpri))
       (prompt "\n<!>No Results Found<!> "))))
(princ))

 
 
注意-为了搜索层描述,我需要将txt变量更改为仅接受单个单词。接受多个单词会让事情变得比我想说的更复杂。
 
希望这有帮助!

jammie 发表于 2022-7-6 10:47:56

你好
 
这是我的尝试,但我认为RenderMan的更合适
 

(defun filterLayersByDescription (<pattern> / layerCollection tempLIst)

(setq layerCollection (vla-get-layers (vla-get-activedocument (vlax-get-acad-object))))

(vlax-for <layer> layerCollection
   (if
   (wcmatch
(vla-get-description <layer>)
<pattern>
)
   (setq tempLIst (append tempLIst (list (vla-get-name <layer>))))))
tempLIst
)


;Layers that have no description
(filterLayersByDescription "")
;Return a layers that have a description
(filterLayersByDescription "~")

;Return a layers that begin with T
(filterLayersByDescription "T*")

 
过滤器将区分大小写,但可以修改例程以适应
页: [1] 2
查看完整版本: 在图层列表中搜索