欢迎来到TheSwamp。。下面是一个没有用户输入的快速示例,说明如何复制和增加每个布局选项卡上的修订块值。我添加了注释,以便您可以从中学习。
- (defun c:revs ;; Localized variables & functions
- (/ _dxf _copy _getattval _setattval blks co o rev ss)
- (vl-load-com)
- ;;
- (defun _dxf (code ename)
- (if (and ename (= (type ename) 'ename))
- (cdr (assoc code (entget ename '("*"))))
- )
- )
- (defun _getattval (block tag / att out)
- (foreach att (vlax-invoke block 'getattributes)
- (if (eq (strcase tag) (strcase (vla-get-tagstring att)))
- (setq out (vla-get-textstring att))
- )
- )
- out
- )
- (defun _setattval (block tag value / att out)
- (foreach att (vlax-invoke block 'getattributes)
- (if (eq (strcase tag) (strcase (vla-get-tagstring att)))
- (setq out (vla-put-textstring att value))
- )
- )
- out
- )
- (defun _copy (obj from to / out)
- (cond ((setq out (vlax-invoke obj 'copy)) (vlax-invoke out 'move from to) (vla-update out) out))
- )
- ;; Helper functions \ >
- ;;
- ;; Foreach paperspace tab
- (foreach tab (layoutlist)
- ;; If we find 'revblk'(s) on that tab
- (if (and (setq ss (ssget "_X" (list '(0 . "insert") (cons 410 tab) '(2 . "RevBlk"))))
- ;; Convert the selection set to a list
- (setq ss (mapcar 'cadr (ssnamex ss)))
- ;; Sort the blocks by greatest Y value & grab the first item
- (setq ss (car (vl-sort ss '(lambda (a b) (> (caddr (_dxf 10 a)) (caddr (_dxf 10 a)))))))
- ;; Add the first item ( greatest Y ) to a 'blks' list
- (setq blks (cons ss blks))
- )
- ;; Iterate the 'blks' list
- (foreach blk blks
- (if (and ;; Convert block from 'ename' to vla-object
- (setq o (vlax-ename->vla-object blk))
- ;; Make a copy + 0.127148 in the Y
- (setq co (_copy o '(0.0 0.0 0.0) '(0.0 0.127148 0.0)))
- )
- (progn ;; Check that the att value is a number
- (or (and (setq rev (_getattval o "R#"))
- (numberp (read rev))
- ;; Increment the value by 1
- (setq rev (itoa (1+ (atoi rev))))
- )
- ;; Or set it to 0
- (setq rev "0")
- )
- ;; Set new attribute values in the copied block
- (_setattval co "R#" rev)
- (_setattval co "REVl1" (strcat "DESCRIPTION FOR REV - " rev))
- (_setattval co "REVB" "YODA")
- (_setattval co "REVD" (menucmd "M=$(edtime,$(getvar,date),M"/"YY)"))
- )
- )
- )
- )
- )
- (princ)
- )
|