乐筑天下

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

[编程交流] 选择集团的所有实例

[复制链接]

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 12:26:24 | 显示全部楼层 |阅读模式
大家好。。。
 
问题是。。。我经常使用lisp例程来选择拾取块的所有实例,但现在我意识到它不适用于动态块,因为它们的每个新副本或插入都会得到一个新的注释性名称。
 
我知道可以从动态块中添加有效块名。。但我不知道如何修改例程,使其同时适用于正常和动态。。。以下是两个代码。。。第一种是针对普通块的。。另一个是我在augi中找到的一系列线,它们与使用vla获得有效块名有关。
 
  1. (defun c:SB2 ()
  2. (COND (T (SETVAR "CMDECHO" 0)
  3. (SETQ L1 nil)
  4. (WHILE (= L1 nil)
  5.   (SETQ L1(ENTSEL "Pick BLOCK to acquire its instances in the drawing...")))
  6.   (SETQ L1 (ENTGET (CAR L1)) L1 (CDR (ASSOC 2 L1))L1 (SSGET "X" (LIST (CONS 2 L1))))
  7. (PRINC)
  8.   )
  9. )
  10. )

 
  1. (setq Sel (entsel "\n Select block to select likewise: "))
  2. (setq Obj (vlax-ename->vla-object (car Sel)))
  3. (= (vla-get-ObjectName Obj) "AcDbBlockReference")
  4. (= (vla-get-IsDynamicBlock obj) :vlax-true)
  5. (setq BlkName (vla-get-EffectiveName Obj)); end and

 
谁能让这个成为某人。lsp是否与动态块和正常块一起工作?
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-6 12:36:14 | 显示全部楼层
这应该满足您的需求:
 
  1. (defun c:getblk    (/ e name n out ss x rjp-getblockname)
  2. (defun rjp-getblockname (obj)
  3.    (if    (vlax-property-available-p obj 'effectivename)
  4.      (vla-get-effectivename obj)
  5.      (vla-get-name obj)
  6.    )
  7. )
  8. (if (setq x     (ssget '((0 . "INSERT")))
  9.        x     (ssname x 0)
  10.        name (rjp-getblockname (vlax-ename->vla-object x))
  11.        ss     (ssget "_X" '((0 . "INSERT")))
  12.        n     -1
  13.        out     (ssadd)
  14.      )
  15.    (while (setq e (ssname ss (setq n (1+ n))))
  16.      (if (= (rjp-getblockname (vlax-ename->vla-object e)) name)
  17.    (ssadd e out)
  18.      )
  19.    )
  20. )
  21. (sssetfirst nil out)
  22. (princ)
  23. )
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 12:39:03 | 显示全部楼层
 
嗯。。不是真的。。。实际上,它可以选择图形中的所有块。。。我想我需要更具体一点。。。
 
我使用的例程允许我选择一个块。。。然后将当前图形中选定块的所有实例放入autocad选择内存中。。。然后,我可以使用任何其他例程应用于所有对象,方法是在选择对象时使用“上一个”选项选择它们。。。
 
这很有用。。但不适用于动态块。。
 
你发布的这个。。。选择所有块(normal和dinamic),现在我认为它很有用。。但我想要的是一个类似的lisp,只获得一个选定块的所有实例,正常或动态。最好使用“previous”选项而不是夹点,因为我使用的一些lisp例程不接受夹点,只是在一些提示后进行常规选择。
回复

使用道具 举报

15

主题

687

帖子

169

银币

中流砥柱

Rank: 25

铜币
582
发表于 2022-7-6 12:43:14 | 显示全部楼层
你好
 
下面是一个根据动态特性值选择动态块的例程。
 
  1. ;;; SSD R2.3 (gile) 14/07/2008
  2. ;;; Select dynamic blocks according to dynamic properties values
  3. ;;; Using:
  4. ;;; To make a selection, enter ssd at command prompt or,
  5. ;;; within a modification command, type (ssd) at "Select objects: " prompt
  6. ;;; Select a source dynamic block
  7. ;;; Choose properties values to filter in the dialog box (an empty tile means "all vaue")
  8. (defun ssd (/ DynBlkPropValue ss blk name pop ret fuzz sel res)
  9. (vl-load-com)
  10. ;; DynBlkPropValue
  11. ;; Dialog box to choose dynamic properties values
  12. ;;
  13. ;; Argument : the dynamic properties list (vla-object list)
  14. (defun DynBlkPropValue (lst / tmp file pn av dcl_id val)
  15.    (setq tmp  (vl-filename-mktemp "Tmp.dcl")
  16.   file (open tmp "w")
  17.    )
  18.    (write-line
  19.      (strcat
  20. "DynBlkProps:dialog{label="Dynamic block filter";"
  21. ":text{label="Block name: ""
  22. (vl-prin1-to-string name)
  23. ";}spacer;:boxed_column{label="Dynamic properties";"
  24.      )
  25.      file
  26.    )
  27.    (foreach p lst
  28.      (setq pn (vla-get-PropertyName p))
  29.      (cond
  30. ((setq av (vlax-get p 'AllowedValues))
  31. (setq pop
  32.         (cons (cons pn (cons "" (mapcar 'vl-princ-to-string av)))
  33.               pop
  34.         )
  35. )
  36. (write-line
  37.    (strcat
  38.      ":popup_list{label="
  39.      (vl-prin1-to-string pn)
  40.      ";key="
  41.      (vl-prin1-to-string pn)
  42.      ";edit_width=25;allow_accept=true;}"
  43.    )
  44.    file
  45. )
  46. )
  47. ((/= pn "Origin")
  48. (setq fuzz (cons pn fuzz))
  49. (write-line
  50.    (strcat
  51.      ":row{:edit_box{label="
  52.      (vl-prin1-to-string pn)
  53.      ";key="
  54.      (vl-prin1-to-string pn)
  55.      ";edit_width=12;allow_accept=true;}"
  56.      ":edit_box{label="Fuzz";key="
  57.      (vl-prin1-to-string (strcat pn "_fuzz"))
  58.      ";value="0.0";edit_width=6;allow_accept=true;}}"
  59.    )
  60.    file
  61. )
  62. )
  63.      )
  64.    )
  65.    (write-line
  66.      (strcat
  67. "}spacer;:radio_row{key="selset";"
  68. ":radio_button{label="All drawing";key="all";value="1";}"
  69. ":radio_button{label="Selection";key="sel";}}"
  70. "spacer;ok_cancel;}"
  71.      )
  72.      file
  73.    )
  74.    (close file)
  75.    (setq dcl_id (load_dialog tmp))
  76.    (if        (not (new_dialog "DynBlkProps" dcl_id))
  77.      (exit)
  78.    )
  79.    (foreach p pop
  80.      (start_list (car p))
  81.      (mapcar 'add_list (cdr p))
  82.      (end_list)
  83.    )
  84.    (action_tile
  85.      "accept"
  86.      "(foreach p (mapcar 'vla-get-PropertyName lst)
  87.      (if (assoc p pop)
  88.      (setq val (nth (atoi (get_tile p)) (cdr (assoc p pop))))
  89.      (setq val (get_tile p)))
  90.      (if (and val (/= val ""))
  91.      (setq ret (cons (cons p val) ret))))
  92.      (setq fuzz (mapcar (function (lambda (x)
  93.      (cons x (get_tile (strcat x "_fuzz"))))) fuzz))
  94.      (and (not ret) (setq ret T))
  95.      (setq sel (get_tile "selset"))
  96.      (done_dialog)"
  97.    )
  98.    (action_tile "cancel" "(setq ret nil)")
  99.    (start_dialog)
  100.    (unload_dialog dcl_id)
  101.    (vl-file-delete tmp)
  102.    ret
  103. )
  104. ;;----------------------------------------------------;;
  105. (and
  106.    (or
  107.      (and
  108. (setq ss (cadr (ssgetfirst)))
  109. (= 1 (sslength ss))
  110. (setq blk (vlax-ename->vla-object (ssname ss 0)))
  111. (sssetfirst nil nil)
  112.      )
  113.      (and
  114. (sssetfirst nil nil)
  115. (setq blk (car (entsel)))
  116. (setq blk (vlax-ename->vla-object blk))
  117.      )
  118.    )
  119.    (= (vla-get-ObjectName blk) "AcDbBlockReference")
  120.    (= (vla-get-IsDynamicBlock blk) :vlax-true)
  121.    (setq name (vla-get-EffectiveName blk))
  122.    (DynBlkPropValue
  123.      (vlax-invoke blk 'getDynamicBlockProperties)
  124.    )
  125.    (if        (= sel "all")
  126.      (ssget "_X"
  127.      (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
  128.      )
  129.      (ssget (list '(0 . "INSERT") (cons 2 (strcat name ",`*U*")))
  130.      )
  131.    )
  132.    (setq res (ssadd))
  133.    (vlax-for b        (setq ss (vla-get-ActiveSelectionSet
  134.                    (vla-get-activeDocument
  135.                      (vlax-get-acad-object)
  136.                    )
  137.                  )
  138.         )
  139.      (if
  140. (and
  141.   (= (vla-get-EffectiveName b) name)
  142.   (or
  143.     (= ret T)
  144.     ((lambda (lst)
  145.        (apply
  146.          '=
  147.          (cons
  148.            T
  149.            (mapcar
  150.              (function
  151.                (lambda (p / n v l u f)
  152.                  (setq n (car p)
  153.                        l (assoc n lst)
  154.                        u (vla-get-UnitsType (caddr l))
  155.                  )
  156.                  (equal        (cond
  157.                           ((= 0 u) (cdr p))
  158.                           ((= 1 u) (angtof (cdr p)))
  159.                           (T (distof (cdr p)))
  160.                         )
  161.                         (cadr l)
  162.                         (if (and (setq f (cdr (assoc n fuzz)))
  163.                                  (numberp (read f))
  164.                             )
  165.                           (atof f)
  166.                           0.0
  167.                         )
  168.                  )
  169.                )
  170.              )
  171.              ret
  172.            )
  173.          )
  174.        )
  175.      )
  176.       (mapcar
  177.         (function
  178.           (lambda (p / n v)
  179.             (list
  180.               (setq n (vla-get-PropertyName p))
  181.               (vlax-get p 'Value)
  182.               p
  183.             )
  184.           )
  185.         )
  186.         (vlax-invoke b 'getDynamicBlockProperties)
  187.       )
  188.     )
  189.   )
  190. )
  191. (ssadd (vlax-vla-object->ename b) res)
  192.      )
  193.    )
  194.    (vla-delete ss)
  195. )
  196. res
  197. )
  198. ;;; Calling function
  199. (defun c:ssd ()
  200. (sssetfirst nil (ssd))
  201. (princ)
  202. )
回复

使用道具 举报

58

主题

3353

帖子

33

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1761
发表于 2022-7-6 12:53:04 | 显示全部楼层
这很奇怪。。。。我更新了上面的代码。现在试试看。
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 12:55:49 | 显示全部楼层
 
很好。。。我们要赢了。我想我可以留下来。
 
再一次关于我一直在制作的积木系列。。我一直在忙着为我的新房子浇混凝土。。。但是现在我有了所有的lisp工具来快速完成它。。。我希望再过两周就全部完成。。。
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 13:03:49 | 显示全部楼层
好啊
 
它正在工作。。。事实上,这就是我想要的。。Gilles的很好。。即使它有一些很好的选择。。。但我有点习惯于每天只为特定目的多次选择块类型,只需选择它。。。你的更快,所以我想我会用你的。。。
 
谢谢Ron。。。
 
这比我想象的要难。。。
 
 
回复

使用道具 举报

2

主题

24

帖子

22

银币

初来乍到

Rank: 1

铜币
10
发表于 2022-7-6 13:07:29 | 显示全部楼层
哇,很棒的剧本,真是节省时间!
它们应该在qs或filter imo中包含类似的内容。
回复

使用道具 举报

11

主题

117

帖子

133

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
52
发表于 2022-7-6 13:15:12 | 显示全部楼层
谢谢Gile的ssd。lsp我已经找了一段时间了。现在我不必孤立我的区块来计算它们。
回复

使用道具 举报

29

主题

196

帖子

168

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
145
发表于 2022-7-6 13:20:01 | 显示全部楼层
 
嘿,罗恩。。。
 
我不明白。。。昨天很好。。。但现在我得到了这个错误。。。
 
  1. ; error: no function definition: VLAX-ENAME->VLA-OBJECT

 
你知道会发生什么吗?
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

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

GMT+8, 2025-3-5 06:24 , Processed in 0.382277 second(s), 83 queries .

© 2020-2025 乐筑天下

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