cad图层置顶的lisp_cad中如何将一个图层置于上层

通过LISP程序,可以实现CAD中选择特定图层的所有对象置顶的功能。用户选择目标图层,程序会将该图层包括块内的所有对象移动到最上层,使用 entsel 命令获取图层,然后通过 VLA 接口操作图层排序。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

选择了这个32313133353236313431303231363533e78988e69d8331333337396332图层的所有对象,右键,绘图次序,【前置】

用程序来解决,

(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-MoveTotop sortents (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbobject (cons 0 (1- (length lst)))) lst)))))

)

(vla-regen doc :vlax-true)

)

)

(princ)

);复制到记事本,以【.lsp】为后缀命名,打开CAD加载了,命令【TES】,选择参考图层,那么这个图层的所有对象就置于最上层,包括块里面的对象也同时前置了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值