kucha007 发表于 2025-8-11 14:45:00

【K:SendToBack】块内目标对象置底

源码来自Lee mac,仅做一些小修改

用法:

;填充和区域覆盖置底
(K:SendToBack BlkNam (list "AcDbHatch" "AcDbWipeout"))


(defun K:SendToBack (BlkNam TypNam / LM:SortentsTable obj objLst)
    ;重新排序的空间
    (defun LM:SortentsTable (space / dict result)
      (cond
      ((not
          (vl-catch-all-error-p
            (setq result (vl-catch-all-apply
                            'vla-item
                            (list (setq dict (vla-GetExtensionDictionary space)) "ACAD_SORTENTS")
                        )
            )
          )
      )
      result
      )
      ((vla-AddObject dict "ACAD_SORTENTS" "AcDbSortentsTable"))
      )
    )
    (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlkNam)
      (if (member (vla-get-objectname obj) TypNam)
            (setq objLst (cons obj objLst))
      )
    );收集目标对象
    (if objLst
      (vla-movetobottom
          (LM:SortentsTable (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlkNam))
          (vlax-make-variant
            (vlax-safearray-fill
                (vlax-make-safearray vlax-vbobject (cons 0 (1- (length objLst))))
                objLst
            )
          )
      )
    );置底
)

kucha007 发表于 2025-8-11 15:46:09

czb203 发表于 2025-8-11 15:05
感谢大嘴巴苦茶大神

:lol:lol:lol

czb203 发表于 2025-8-11 15:05:50

感谢大嘴巴苦茶大神

panliang9 发表于 2025-8-12 09:37:37

如果需要一个特定的块放到最底层,能不能改呢,麻烦 kucha 帮我看下这个,我有一大堆块,块中均有一个名为“background” 的块,需要一次选定,将它放到最底层。



kucha007 发表于 2025-8-12 17:24:26

panliang9 发表于 2025-8-12 09:37
如果需要一个特定的块放到最底层,能不能改呢,麻烦 kucha 帮我看下这个,我有一大堆块,块中均有一个名为 ...

试试这个:

(defun C:TT (/ K:BlkToBack CurDoc obj)
    (setq CurDoc (vla-get-activedocument (vlax-get-acad-object)))
    (defun K:BlkToBack (BlkNam / LM:SortentsTable obj objLst)
      ;重新排序的空间
      (defun LM:SortentsTable (space / dict result)
          (cond
            ((not
            (vl-catch-all-error-p
                (setq result (vl-catch-all-apply
                              'vla-item
                              (list (setq dict (vla-GetExtensionDictionary space)) "ACAD_SORTENTS")
                              )
                )
            )
            )
            result
            )
            ((vla-AddObject dict "ACAD_SORTENTS" "AcDbSortentsTable"))
          )
      )
      (vlax-for obj (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlkNam)
            (if
                (and
                  (wcmatch (vla-get-objectname obj) "*Block*");是块
                  (eq (strcase (vla-get-Name obj)) "BACKGROUND")
                )
                (setq objLst (cons obj objLst))
            )
      );收集目标对象
      (if objLst
            (vla-movetobottom
            (LM:SortentsTable (vla-item (vla-get-blocks (vla-get-activedocument (vlax-get-acad-object))) BlkNam))
            (vlax-make-variant
                (vlax-safearray-fill
                  (vlax-make-safearray vlax-vbobject (cons 0 (1- (length objLst))))
                  objLst
                )
            )
          )
      );置底
    )
    (setq obj (vlax-ename->vla-object (ssname (ssget ":e:s") 0)))
    (if (wcmatch (vla-get-objectname obj) "*Block*");是块
      (K:BlkToBack
            (if (vlax-property-available-p obj 'EffectiveName);动态块
                (vla-get-EffectiveName obj)
                (vla-get-Name obj)
            );块名(含动态块)
      )
    )(vla-Regen CurDoc 1)
)


页: [1]
查看完整版本: 【K:SendToBack】块内目标对象置底