只是快速:
- (defun c:RoomTag ( / ss tl ip bn)
- (vl-load-com)
- (princ "\n<<< Select Mtexts >>> ")
- (if (and (setq ss (ssget '((0 . "MTEXT")))) (setq ss (sss ss))
- (tblsearch "block" (setq bn "Room_Tag")))
- (progn
- (setq tl (mapcar '(lambda (x) (cdr (assoc 1 (entget x)))) ss)
- ip (cdr (assoc 10 (entget (car ss)))))
- (setvar "ATTREQ" 0)(command-s "-insert" bn ip 1 1 0)
- (mapcar '(lambda (att val) (wai bn att val)) '("RM_TAG" "RM_VENT" "RM_NO." "RM_AREA") tl)
- (mapcar 'entdel ss)
- )
- )
- )
- (defun sss ( %ss )
- (vl-sort
- (vl-remove-if 'listp (mapcar 'cadr (ssnamex ss)))
- '(lambda (x y) (> (caddr (assoc 10 (entget x))) (caddr (assoc 10 (entget y)))))
- )
- )
- (defun wai (b a v)
- (setq a (strcase a) b (ent->vla b))
- (vl-some '(lambda (x)(if (= a (strcase (vla-get-tagstring x)))(progn (vla-put-textstring x v) v)))
- (vlax-invoke b 'getattributes)))
- (defun ent->vla ( e )
- (cond ((= (type e) 'VLA-OBJECT) e)
- ((= (type e) 'ENAME)(vlax-ename->vla-object e))
- ((and (= (type e) 'STR) (tblsearch "block" e))
- (ent->vla (ssname (ssget "x" (list (cons 0 "INSERT")(cons 2 e))) 0)))
- (t nil)
- )
- )
我知道,它还有改进的空间。。。
gr.RLX |