asteffy 发表于 2022-7-6 07:38:20

命名块的Bcount lisp

是否有方法将bcount命令合并到lisp中,以仅计算名为“E”的块。在运行bcount命令之前,我需要以某种方式选择所有名为“E”的块。有什么建议吗?谢谢

Tharwat 发表于 2022-7-6 07:55:05


(if (setq ss (ssget "_x" '((2 . "E"))))
(sssetfirst nil ss)
)

MSasu 发表于 2022-7-6 08:09:23

此外,内置命令QSELECT和FILTER也可以帮您完成这项工作。

BIGAL 发表于 2022-7-6 08:18:47

Tharwat I被支持该代码只使用2的一个dxf代码。还有许多其他对象也使用2,是否最好添加仅搜索块(0。“插入”)作为使用ssget的更一般示例。
 
'((0 . "INSERT")(2 . "E"))

irneb 发表于 2022-7-6 08:36:16

这是可能的,尽管可能性很小。AttDefs(2=标记名)、图案填充(2=图案)、形状(2=形状名称)、维度(2=匿名块名-*D前缀)、表格(2=匿名块名-*T前缀)等在代码2项中可能有类似的内容。不过要确保你的方式更加完整和明确。

ketxu 发表于 2022-7-6 08:39:28

或者可能:(它也适用于动态块-使用一些acet函数快速且脏)
 
(defun c:bcc (/ table dcl lsblk nm ss tol)
;Ketxu 2012
(vl-load-com)
   (defun table (s / d r)
   (while (setq d (tblnext s (null d)))
   (setq r (cons (cdr (assoc 2 d)) r))
   )
   )
   (defun DCL(Title @ ThongTin lstVal / fl ret)   
      (setq fl (vl-filename-mktemp "mip" nil ".dcl"))
      (setqret (open fl "w"))
      (mapcar
       '(lambda (x) (write-line x ret))
       (list
       "mip_msg : dialog { "
       (strcat "label=\"" title "\"; width = 40;fixed_width = true;");
       ":popup_list {label = \"Block : \";key=\"kLst\";}"
       ": column {"
       ": row {"
       "    fixed_width = true;"
       "    alignment = centered;"
       ":button {label = \"\OK\"; is_cancel = true;fixed_width = true;width = 1;}"
       "    : spacer { width = 2; }"
       ":button {label = \"About\";fixed_width = true;width = 1;key = \"kThongTin\";}"
       "}"
       "}"
       " :text_part {alignment=centered;"
      (strcat "label=\"" @ "\";")
      "}}"
       )   
      ) ;_ end of mapcar
      (setq ret (close ret))
      (if (and (not (minusp (setq dcl_id (load_dialog fl))))
         (new_dialog "mip_msg" dcl_id)
      ) ;_ end of and
       (progn
       (start_list "kLst" 3)
       (mapcar '(lambda(x)(add_list x)) lstVal)
       (end_list)
       (action_tile "kLst" "(setq ret (nth (atoi $value) lstVal))")
       (start_dialog)
       ) ;_ end of progn
      ) ;_ end of if
      (unload_dialog dcl_id)
      (vl-file-delete fl)
      ret
   )
(setq lstBlk (vl-remove-if '(lambda(x)(wcmatch x "`**"))(acad_strlsort (table "Block"))))
(cond ((setq nm (DCL "Select block :" "@Ketxu" "Count choiced block @Ketxu" lstBlk))
(setqss(ssget (list (cons 0 "INSERT")(cons 2 (strcat nm ",`**"))))
tol (length (setq tmp (vl-remove-if-not '(lambda(x)(= (vla-get-EffectiveName (vlax-ename->vla-object x)) nm)) (acet-ss-to-list ss))))
)
))
(cond ((> tol 0)
(sssetfirst nil (acet-list-to-ss tmp))
(princ (strcat "Number of block " nm " in selection area : " (itoa tol) ))
)(T (princ "Nothing"))
)
(princ)
)
页: [1]
查看完整版本: 命名块的Bcount lisp