第2个回答 推荐于2017-09-30
1、用快速选择的方法,选择这个图层的所有对象,右键,绘图次序,【后置】。
2、由于块里面的对象无法快速选择,这个用程序就简单了很多。
3、(defun C:tes ( / blockdef dict doc lst obj sortents &tc1)
(setvar "cmdecho" 0)
(setvar "blipmode" 0)
(vl-load-com)
(if (setq &tc1 (entsel "\n请选择要把图层放在最上面的参考图层"))
(progn
(setq &tc1 (cdr (assoc 8 (entget (car &tc1)))))
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(vlax-for blockdef (vla-get-blocks doc)
(cond
((not (VL-CATCH-ALL-ERROR-P (setq sortents (VL-CATCH-ALL-APPLY 'vla-item (list (setq dict (vla-GetExtensionDictionary blockdef)) "ACAD_SORTENTS"))))))
((setq sortents (VL-CATCH-ALL-APPLY 'vla-AddObject (list dict "ACAD_SORTENTS" "AcDbSortentsTable"))))
)
(setq lst nil)
(vlax-for obj blockdef (if (= &tc1 (vla-get-layer obj)) (setq lst (cons obj lst))))
(if lst (progn (vla-MoveToBottom sortents (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst)))) lst)))));vla-MoveTotop为图层前置,vla-MoveToBottom为图层后置
)
(vla-regen doc :vlax-true)
)
)
(princ)
);复制到记事本,以【.lsp】为后缀命名,打开CAD加载了,命令【TES】,选择参考图层,那么这个图层的所有对象就置于最下层,包括块里面的对象也同时后置了。这个是以前写过图层前置的程序,要后置的话,修改一个函数就可以使用了。