乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 51|回复: 15

[编程交流] 查找块中的属性

[复制链接]

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:05:59 | 显示全部楼层 |阅读模式
我想问一下cad专家是否有关于查找属性的代码。我不熟悉lisp,所以我不知道从哪里开始。
 
我想在一个或多个块中搜索2个属性。像这样的事情:
 
“输入要搜索的第一个属性:”。。。。
“输入要搜索的第二个属性:”。。。
 
在执行lisp之前,例程将搜索图形中具有这两个属性的所有块,并放大到具有相同viewsize(变量)的块,并在每个具有这些字符串的块上停止,直到列表结束或用户按escape。
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:12:58 | 显示全部楼层
查找存在两个特定标记的块?
或者块不一定只有2个属性,只要两个标记都存在于该块上?
 
放大位置并提示编辑?
 
试试这个:
  1. (defun FindTagEdit ( Tag1 Tag2 / dcledit TagVal a b c TagCheck blk str)
  2. ;;;       pBe 29July2011  ;;;
  3. (vl-load-com)      
  4. (defun dcledit (txt / attlist NewTxt ddatt_dcl)
  5.    (and
  6.      (setq oldtxt txt
  7.            dcl    (load_dialog "ACAD")
  8.      )
  9.      (new_dialog "acad_txtedit" dcl)
  10.      (set_tile "text_edit" txt)
  11.      (action_tile "text_edit" "(setq txt $value)")
  12.      (action_tile "cancel" "(setq txt oldtxt)")
  13.      (start_dialog)
  14.      (unload_dialog dcl)
  15.    )
  16.    txt
  17. )
  18. (defun TagVal  (ent nme)
  19.      (mapcar '(lambda (j)
  20.                     (vl-list* (vla-get-tagstring j) j))
  21.              (vlax-invoke (vlax-ename->vla-object ent) 'GetAttributes)
  22.              )
  23.      )      
  24. (cond ((and
  25. (while
  26.      (setq a (tblnext "BLOCK" (null a)))
  27.           (if (equal '(70 . 2) (assoc 70 a))
  28.                 (setq b (cons (cdr (assoc 2 a)) b)
  29.                       )))
  30. (foreach
  31.       AtBlk  b
  32.      (if (setq c (ssget "_X"
  33.                         (list (cons 2 AtBlk)
  34.                               (cons 410 (getvar 'CTAB)))))
  35.            (progn
  36.                  (setq TagCheck
  37.                             (mapcar 'car
  38.                                     (Tagval (ssname c 0) AtBlk)))
  39.                  (if (and (member Tag1 TagCheck)
  40.                           (member Tag2 TagCheck))
  41.                        (repeat (sslength c)
  42.                              (vla-getboundingbox
  43.                                    (
  44.                                     vlax-ename->vla-object
  45.                                          (setq blk
  46.                                                     (ssname c 0)))
  47.                                    'LL
  48.                                    'UR)
  49.                              (vla-ZoomWindow
  50.                                    (vlax-get-acad-object)
  51.                                    ll
  52.                                    ur)
  53.                              (foreach
  54.                                     Tag  (list Tag1 Tag2)
  55.                                    (vla-put-textstring
  56.                                          (setq str  (cdr  (assoc
  57.                                                                 tag
  58.                                                                 (Tagval blk AtBlk)
  59.                                                                 )))
  60.                                          (dcledit
  61.                                                (vla-get-textstring
  62.                                                      str)))
  63.                                    )
  64.                              (setq c (ssdel blk c)))))
  65.                                    )
  66.                              )
  67.                      )
  68.                  )
  69.          )
  70.      (princ)
  71.      )

 
用法:
(FindTagEdit“Tagname1”Tagname2)
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:14:26 | 显示全部楼层
我会尝试这样的方式:
 
  1. [b][color=BLACK]([/color][/b]defun c:findmatt [b][color=FUCHSIA]([/color][/b]/ i tn tl en ed an ad ss[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq i 1[b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]while [b][color=NAVY]([/color][/b]or [b][color=MAROON]([/color][/b]not tn[b][color=MAROON])[/color][/b]
  4.             [b][color=MAROON]([/color][/b]/= tn [color=#2f4f4f]""[/color][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  5.         [b][color=NAVY]([/color][/b]setq tn
  6.           [b][color=MAROON]([/color][/b]strcase
  7.             [b][color=GREEN]([/color][/b]getstring
  8.               [b][color=BLUE]([/color][/b]strcat [color=#2f4f4f]"\nTag "[/color] [b][color=RED]([/color][/b]itoa i[b][color=RED])[/color][/b] [color=#2f4f4f]" To Serach [b][color=RED]([/color][/b] Enter To Exit [b][color=RED])[/color][/b]:  "[/color][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  9.         [b][color=NAVY]([/color][/b]if [b][color=MAROON]([/color][/b]/= tn [color=#2f4f4f]""[/color][b][color=MAROON])[/color][/b]
  10.             [b][color=MAROON]([/color][/b]setq tl [b][color=GREEN]([/color][/b]cons tn tl[b][color=GREEN])[/color][/b]
  11.                    i [b][color=GREEN]([/color][/b]1+ i[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  12. [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearching For Tagnames: "[/color][b][color=FUCHSIA])[/color][/b]
  13. [b][color=FUCHSIA]([/color][/b]prin1 tl[b][color=FUCHSIA])[/color][/b]
  14. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]66 . 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  15.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  16.              [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  17.                    an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  18.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b]
  19.                    i 0[b][color=MAROON])[/color][/b]
  20.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  21.                     [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]member [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 2 ad[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] tl[b][color=BLUE])[/color][/b]
  22.                         [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  23.                     [b][color=GREEN]([/color][/b]setq an [b][color=BLUE]([/color][/b]entnext an[b][color=BLUE])[/color][/b]
  24.                           ad [b][color=BLUE]([/color][/b]entget an[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  25.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]= i [b][color=BLUE]([/color][/b]length tl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  26.                  [b][color=GREEN]([/color][/b]progn
  27.                    [b][color=BLUE]([/color][/b]command [color=#2f4f4f]"_.ZOOM"[/color] [color=#2f4f4f]"_C"[/color] [b][color=RED]([/color][/b]trans [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 10 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] en 1[b][color=RED])[/color][/b] [color=#2f4f4f]""[/color][b][color=BLUE])[/color][/b]
  28.                    [b][color=BLUE]([/color][/b]redraw en 3[b][color=BLUE])[/color][/b]
  29.                    [b][color=BLUE]([/color][/b]getstring [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 2 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  30.                                       [color=#2f4f4f]" Press Enter To Continue..."[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  31.              [b][color=MAROON]([/color][/b]ssdel en ss[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  32. [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearch Complete   "[/color][b][color=FUCHSIA])[/color][/b]
  33. [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b]
  34. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
 
希望块和插入在单个定义中没有重复的标记名。
 
-大卫
回复

使用道具 举报

pBe

32

主题

2722

帖子

2666

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
211
发表于 2022-7-6 09:19:53 | 显示全部楼层
很好,大卫,
 
在我的帖子里。我想我放大得太大了,以至于你看不到这个街区周围的实体
你的方法更好
 
 
顺便说一句:
  1. (strcat "\nTag[b][color=blue] "[/color][/b] (itoa i) [color=blue][b]" [/b][/color]To Serach ( Enter To Exit ):  ")
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:24:25 | 显示全部楼层
 
接得好谢谢!
 
我不太擅长阅读VL代码。看起来你正在做一个要缩放的边界框。我本以为这会奏效-大卫
回复

使用道具 举报

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:27:45 | 显示全部楼层
谢谢你的代码,但由于某种原因,我不知道如何在PBE上调用该命令。我出错了。
 
我喜欢David的代码,但它能在不选择对象的情况下找到块吗?我的块有两个以上的属性,通常是4或6。下面是我用了很长一段时间,我喜欢它。唯一的问题是,当我寻找一个属性时,我必须一个接一个地处理所有的块,直到找到正确的块。我认为这段代码也是由David编写的。
 
如果我想找到“VAV”和“M2”。它将自动缩放该块。有了这个代码,我将不得不逐步通过所有的VAV,直到我找到VAV M2。
 
  1. (defun c:find2 (/ ov ss i en ed an ad)
  2. (while (not ov)
  3.         (setq ov (getstring t "\nATTRIB Value To Search For:   ")))
  4. (and (setq ss (ssget "X" (list (cons 0 "INSERT")
  5.                                 (cons 66 1)
  6.                                 (if (getvar "CTAB")
  7.                                     (cons 410 (getvar "CTAB"))
  8.                                     (cons 67 (- 1 (getvar "TILEMODE")))))))
  9.        (setq i (sslength ss))
  10.        (while (not (minusp (setq i (1- i))))
  11.               (setq en (ssname ss i)
  12.                     ed (entget en)
  13.                     an (entnext en)
  14.                     ad (entget an))
  15.               (while (/= "SEQEND" (cdr (assoc 0 ad)))
  16.                      (if (= (strcase ov)
  17.                             (strcase (cdr (assoc 1 ad))))
  18.                          (progn
  19.                             (command "_.ZOOM" "_C" (cdr (assoc 10 ed)) "")
  20.                             (getstring "\nPress Enter To Continue Searching...")))
  21.                      (setq an (entnext an)
  22.                            ad (entget an)))))
  23. (prin1))
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:30:39 | 显示全部楼层
这应该搜索所有插入并放大包含“VAV”和“M2”的插入:
 
  1. [b][color=BLACK]([/color][/b]defun c:findkatt [b][color=FUCHSIA]([/color][/b]/ i tl en ed an ad ss[b][color=FUCHSIA])[/color][/b]
  2. [b][color=FUCHSIA]([/color][/b]setq tl '[b][color=NAVY]([/color][/b][color=#2f4f4f]"VAV"[/color] [color=#2f4f4f]"M2"[/color][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  3. [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearching For Tagnames: "[/color][b][color=FUCHSIA])[/color][/b]
  4. [b][color=FUCHSIA]([/color][/b]prin1 tl[b][color=FUCHSIA])[/color][/b]
  5. [b][color=FUCHSIA]([/color][/b]and [b][color=NAVY]([/color][/b]setq ss [b][color=MAROON]([/color][/b]ssget [color=#2f4f4f]"X"[/color] '[b][color=GREEN]([/color][/b][b][color=BLUE]([/color][/b]0 . [color=#2f4f4f]"INSERT"[/color][b][color=BLUE])[/color][/b][b][color=BLUE]([/color][/b]66 . 1[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b]
  6.       [b][color=NAVY]([/color][/b]while [b][color=MAROON]([/color][/b]setq en [b][color=GREEN]([/color][/b]ssname ss 0[b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  7.              [b][color=MAROON]([/color][/b]setq ed [b][color=GREEN]([/color][/b]entget en[b][color=GREEN])[/color][/b]
  8.                    an [b][color=GREEN]([/color][/b]entnext en[b][color=GREEN])[/color][/b]
  9.                    ad [b][color=GREEN]([/color][/b]entget an[b][color=GREEN])[/color][/b]
  10.                    i 0[b][color=MAROON])[/color][/b]
  11.              [b][color=MAROON]([/color][/b]while [b][color=GREEN]([/color][/b]/= [color=#2f4f4f]"SEQEND"[/color] [b][color=BLUE]([/color][/b]cdr [b][color=RED]([/color][/b]assoc 0 ad[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  12.                     [b][color=GREEN]([/color][/b]if [b][color=BLUE]([/color][/b]member [b][color=RED]([/color][/b]cdr [b][color=PURPLE]([/color][/b]assoc 2 ad[b][color=PURPLE])[/color][/b][b][color=RED])[/color][/b] tl[b][color=BLUE])[/color][/b]
  13.                         [b][color=BLUE]([/color][/b]setq i [b][color=RED]([/color][/b]1+ i[b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  14.                     [b][color=GREEN]([/color][/b]setq an [b][color=BLUE]([/color][/b]entnext an[b][color=BLUE])[/color][/b]
  15.                           ad [b][color=BLUE]([/color][/b]entget an[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  16.              [b][color=MAROON]([/color][/b]if [b][color=GREEN]([/color][/b]= i [b][color=BLUE]([/color][/b]length tl[b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b]
  17.                  [b][color=GREEN]([/color][/b]progn
  18.                    [b][color=BLUE]([/color][/b]command [color=#2f4f4f]"_.ZOOM"[/color] [color=#2f4f4f]"_C"[/color] [b][color=RED]([/color][/b]trans [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 10 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b] en 1[b][color=RED])[/color][/b] [color=#2f4f4f]""[/color][b][color=BLUE])[/color][/b]
  19.                    [b][color=BLUE]([/color][/b]redraw en 3[b][color=BLUE])[/color][/b]
  20.                    [b][color=BLUE]([/color][/b]getstring [b][color=RED]([/color][/b]strcat [color=#2f4f4f]"\n"[/color] [b][color=PURPLE]([/color][/b]cdr [b][color=TEAL]([/color][/b]assoc 2 ed[b][color=TEAL])[/color][/b][b][color=PURPLE])[/color][/b]
  21.                                       [color=#2f4f4f]" Press Enter To Continue..."[/color][b][color=RED])[/color][/b][b][color=BLUE])[/color][/b][b][color=GREEN])[/color][/b][b][color=MAROON])[/color][/b]
  22.              [b][color=MAROON]([/color][/b]ssdel en ss[b][color=MAROON])[/color][/b][b][color=NAVY])[/color][/b][b][color=FUCHSIA])[/color][/b]
  23. [b][color=FUCHSIA]([/color][/b]princ [color=#2f4f4f]"\nSearch Complete   "[/color][b][color=FUCHSIA])[/color][/b]
  24. [b][color=FUCHSIA]([/color][/b]redraw[b][color=FUCHSIA])[/color][/b]
  25. [b][color=FUCHSIA]([/color][/b]prin1[b][color=FUCHSIA])[/color][/b][b][color=BLACK])[/color][/b]

 
为不同的标记名操作列表的tl。在前面的例程中,您可以简单地对选择查询说“全部”。它应该相应地过滤掉插入。
 
-大卫
回复

使用道具 举报

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:36:18 | 显示全部楼层
我试了几次不同的画,但都没用。知道吗?
 
回复

使用道具 举报

26

主题

1495

帖子

20

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
118
发表于 2022-7-6 09:39:42 | 显示全部楼层
VAV ans M2是标记名还是块名?
回复

使用道具 举报

6

主题

23

帖子

17

银币

初来乍到

Rank: 1

铜币
30
发表于 2022-7-6 09:43:49 | 显示全部楼层
它们是属性。我正在寻找类似post#6的内容,但会在一个块中找到2个属性。
 
具体来说,我有一个具有2、4或6个属性的块。它们是我的设备标签。
你在6号帖子中编码的那个很好,但每次我都需要按enter键,直到找到一个带有“VAV”属性的块。所以现在我正在寻找一个可以在一个块中同时找到两个属性的块,这样它就会自动缩放到它,或者如果有多个块具有相同的属性,它就会自动缩放到下一个块。试试张贴在帖子#6上的代码,以便更好地理解我的请求。对不起,我的英语很差,这不是我的母语。谢谢大卫抽出时间,我真的很感激。
 
100604uavpr8x8ozrqhgrd.jpg
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-7 08:33 , Processed in 0.953885 second(s), 74 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表