golfdogz 发表于 2022-7-5 19:42:18

选择相似的可见性统计

我找到了根据匹配的可见性状态选择块的附加代码。我对其进行了轻微修改,因此它始终假设可见性参数称为默认的“Visibility1”
 
第一个主命令VSDB要求选择一个块,但它仍然需要命令行输入所需的可见性状态(变量“visstat”)。我想让它读取所选块的。
 
以下命令TDB将返回块可见性状态的名称
 
我的问题是如何将它们组合在一起,只需键入vsdb并选择块,然后完成-选择所有具有匹配可见性状态名称的块。
可见性选择。lsp

pBe 发表于 2022-7-5 20:02:33

(defun c:demo (/ LM:getvisibilityparametername _curvis curvis e en ess ssvis)

;; Get Visibility Parameter Name-Lee Mac
;; Returns the name of the Visibility Parameter of a Dynamic Block (if present)
;; blk - VLA Dynamic Block Reference object
;; Returns: Name of Visibility Parameter, else nil

(defun LM:getvisibilityparametername (blk / vis)
   (if
   (and
(vlax-property-available-p blk 'effectivename)
(setq blk
       (vla-item
       (vla-get-blocks (vla-get-document blk))
       (vla-get-effectivename blk)
       )
)
(= :vlax-true (vla-get-isdynamicblock blk))
(= :vlax-true (vla-get-hasextensiondictionary blk))
(setq vis
       (vl-some
       '(lambda (pair)
          (if
              (and
                (= 360 (car pair))
                (= "BLOCKVISIBILITYPARAMETER"
                   (cdr (assoc 0 (entget (cdr pair))))
                )
              )
             (cdr pair)
          )
          )
       (dictsearch
           (vlax-vla-object->ename (vla-getextensiondictionary blk))
           "ACAD_ENHANCEDBLOCK"
       )
       )
)
   )
      (cdr (assoc 301 (entget vis)))
   )
)
(defun _curvis (_e _vn)
   (vlax-get
   (vl-some '(lambda        (l)
          (if (eq _vn (vla-get-propertyname l))
          l
          )
        )
       (vlax-invoke _e 'GetDynamicBlockProperties)
   )
   'Value
   )
)
(if
   (and (setq e (ssget "_:S:E" '((0 . "INSERT"))))
(setq
   en (vla-item        (vla-get-blocks
                  (vla-get-ActiveDocument (vlax-get-acad-object))
                )
                (setq effname
                     (vla-get-EffectiveName
                       (setq e (vlax-ename->vla-object (ssname e 0)))
                     )
                )
      )
)
(minusp (vlax-get en 'IsDynamicBlock))
(setq visname (LM:getvisibilityparametername e))
(setq curvis (_curvis e visname))
(setq ssvis (ssadd)
       ssx   (ssget "X" (list (cons 2 (strcat effname ",`*U*"))))
)
   )

    (repeat (setq i (sslength ssx))
      (if (and        (eq (vla-get-EffectiveName
              (setq es (vlax-ename->vla-object
                       (setq ess (ssname ssx (setq i (1- i))))
                     )
              )
          )
          effname
        )
        (eq (_curvis es visname) curvis)
   )
(ssadd ess ssvis)
      )
    )
)
(if curvis
   (sssetfirst nil ssvis)
)
(princ)
)
 
感谢LM提供-->getvisibilityparametername
 
HTH公司

golfdogz 发表于 2022-7-5 20:22:05

太棒了-这就是生意!非常感谢

Lee Mac 发表于 2022-7-5 20:29:27

 
干杯pBe!

mdouglass 发表于 2022-7-5 20:55:17

你介意上传你最后的Lisp程序吗?这正是我要找的,但我不擅长lisp创建。
页: [1]
查看完整版本: 选择相似的可见性统计