【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
)
)
)
);置底
)
czb203 发表于 2025-8-11 15:05
感谢大嘴巴苦茶大神
:lol:lol:lol 感谢大嘴巴苦茶大神 如果需要一个特定的块放到最底层,能不能改呢,麻烦 kucha 帮我看下这个,我有一大堆块,块中均有一个名为“background” 的块,需要一次选定,将它放到最底层。
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]