明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1737|回复: 2

[源码] CAD自动增减编号的代码及使用方法分享

[复制链接]
发表于 2022-9-11 08:30:59 | 显示全部楼层 |阅读模式
使用方法
1、输入命令ATTDEF定义编号,标记为TAG,
2、创建块,名称为block
3、加载插件,窗口加载也可以,APPLOAD加载LSP文件也可以
4、输入VLIDE命令,新建一个文件,把代码粘贴进去,保存为LSP文件
5、有变动后,需要重生成模型

;;—————–=={ AutoLabel Attributes }==—————;;
;;                                                            ;;
;;  Automatically labels a specific attribute in a set of     ;;
;;  blocks, renumbering if blocks are added, copied or        ;;
;;  erased.                                                   ;;
;;————————————————————;;
;;  Author: Lee Mac, Copyright ?2011 – www.lee-mac.com       ;;
;;————————————————————;;
;;  Version 1.0    –    14-09-2011                            ;;
;;————————————————————;;
;;————————————————————;;
;;                         Settings                           ;;
;;————————————————————;;
;; [Note: Block names and Attribute Tags are *not* case-sensitive]
(setq *blockname* “block”  ;; Name of Block to be Updated
*blocktag*  “TAG”    ;; Attribute Tag to be Updated
)
;;————————————————————;;
;;                      Main Program                          ;;
;;————————————————————;;
(defun ObjectReactorCallback:RenumberBlocks ( object reactor params )
(setq *reactor* reactor)
(vlr-command-reactor “temp” ‘((:vlr-commandended . CommandReactorCallback:RenumberBlocks)))
(vlr-remove  reactor)
(princ)
)
;;————————————————————;;
(defun CommandReactorCallback:RenumberBlocks ( reactor params / e f i l n s )
(if reactor (vlr-remove reactor))
(if
(and
(not *undoflag*)
(setq s (ssget “_X” *filter*))
)
(progn
(setq n 0)
(repeat (setq i (sslength s))
(if (eq *blockname*
(AutoLabel:EffectiveName
(setq o (vlax-ename->vla-object (setq e (ssname s (setq i (1- i))))))
)
)
(progn
(setq e (entnext e)
l (entget  e)
f nil
)
(while (and (not f) (eq “ATTRIB” (cdr (assoc 0 l))))
(if (eq *blocktag*  (strcase (cdr (assoc 2 l))))
(setq f (entmod (subst (cons 1 (itoa (setq n (1+ n)))) (assoc 1 l) l)))
)
(setq e (entnext e)
l (entget  e)
)
)
(if (and *reactor* (not (member o (vlr-owners *reactor*))))
(vlr-owner-add *reactor* o)
)
)
)
)
)
)
(if *reactor*
(progn (vlr-add *reactor*) (setq *reactor* nil))
)
(princ)
)
;;————————————————————;;
(defun CommandReactorCallback:UndoCheck ( reactor params )
(setq *undoflag* (wcmatch (strcase (car params)) “*U,*UNDO”))
(princ)
)
;;————————————————————;;
(defun CommandReactorCallback:BlockInserted ( reactor params / e l )
(if
(and
(not *undoflag*)
(wcmatch (strcase (car params)) “*I,*INSERT,*EXECUTETOOL”)
(setq e (entlast))
(setq l (entget e))
(eq “INSERT” (cdr (assoc 0 l)))
(= 1 (cdr (assoc 66 l)))
(eq *blockname* (AutoLabel:EffectiveName (vlax-ename->vla-object e)))
)
(AutoLabel:GetNewNumber e)
)
(princ)
)
;;————————————————————;;
(defun AutoLabel:GetNewNumber ( ent / e f i l n r s )
(if (setq s (ssget “_X” *filter*))
(progn
(setq n 0)
(repeat (setq i (sslength s))
(if (eq *blockname*
(AutoLabel:Effectivename
(vlax-ename->vla-object (ssname s (setq i (1- i))))
)
)
(setq n (1+ n))
)
)
(setq e (entnext ent)
l (entget e)
)
(while (and (not f) (eq “ATTRIB” (cdr (assoc 0 l))))
(if (eq *blocktag*  (strcase (cdr (assoc 2 l))))
(setq f (entmod (subst (cons 1 (itoa n)) (assoc 1 l) l)))
)
(setq e (entnext e)
l (entget  e)
)
)
(if
(setq r
(vl-some
(function
(lambda ( r ) (if (eq *reacdata* (vlr-data r)) r))
)
(cdar (vlr-reactors :vlr-object-reactor))
)
)
(vlr-owner-add r (vlax-ename->vla-object ent))
)
)
)
(princ)
)
;;————————————————————;;
(defun AutoLabel:EffectiveName ( obj )
(strcase
(if (vlax-property-available-p obj ‘effectivename)
(vla-get-effectivename obj)
(vla-get-name obj)
)
)
)
;;————————————————————;;
;;                   Loading Expressions                      ;;
;;————————————————————;;
(vl-load-com)
(
(lambda ( / i s l o )
(setq
*blocktag*  (strcase *blocktag*)
*blockname* (strcase *blockname*)
*reacdata*  “AutoBlockLabel”
*reactor*   nil
*undoflag*  nil
)
(foreach r1 (vlr-reactors)
(foreach r2 (cdr r1)
(if (eq *reacdata* (vlr-data r2)) (vlr-remove r2))
)
)
(if
(setq s
(ssget “_X”
(setq *filter*
(list
‘(0 . “INSERT”)
‘(66 . 1)
(cons 2 (strcat “`*U*,” *blockname*))
(cons 410 (getvar ‘CTAB))
)
)
)
)
(progn
(repeat (setq i (sslength s))
(if (eq *blockname*
(AutoLabel:EffectiveName
(setq o (vlax-ename->vla-object (ssname s (setq i (1- i)))))
)
)
(setq l (cons o l))
)
)
(CommandReactorCallback:RenumberBlocks nil nil)
(vlr-object-reactor l *reacdata*
(list
(cons :vlr-erased   ‘ObjectReactorCallback:RenumberBlocks)
(cons :vlr-copied   ‘ObjectReactorCallback:RenumberBlocks)
(cons :vlr-unerased ‘ObjectReactorCallback:RenumberBlocks)
)
)
(vlr-command-reactor *reacdata*
(list
(cons :vlr-commandwillstart ‘CommandReactorCallback:UndoCheck)
(cons :vlr-commandended     ‘CommandReactorCallback:BlockInserted)
)
)
)
)
)
)
(princ)
;;————————————————————;;
;;                         End of File                        ;;
;;————————————————————;;

"觉得好,就打赏"
还没有人打赏,支持一下
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-2-23 11:30 , Processed in 0.197218 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表