I hope you find time to look into the code below :
I tried to put together the box code and the obj2blk. I get strange results. When I launch the second time (the first time it works) it gets into a loop - I think.
(fools rush in where angles ..)
Besides I need to add "num" to the final block as an attribute.
- (defun c:Bf (/ *error* LWPoly Text ENT FLOOR GRP I LAY MA MI NNUM NUM OFFSET POLY PTS SS THGT TOBJ UFLAG) (vl-load-com) ;; Lee Mac ~ 24.02.10 (setq lay "My Boxing Layer" ;; Layer offset 0.01 ;; Offset thgt 0.08 ;; Text Height ) (defun *error* (msg) (and uFlag (vla-EndUndomark *doc)) (or (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*") (princ (strcat "\n** Error: " msg " **"))) (princ)) (defun Line (pt1 pt2) (entmakex (list (cons 0 "LINE") (cons 10 pt1) (cons 11 pt2)))) (defun LWPoly (lst cls) (entmakex (append (list (cons 0 "LWPOLYLINE") (cons 100 "AcDbEntity") (cons 100 "AcDbPolyline") (cons 8 lay) (cons 90 (length lst)) (cons 70 cls)) (mapcar (function (lambda (p) (cons 10 p))) lst)))) (defun Text (pt hgt str) (entmakex (list (cons 0 "TEXT") (cons 8 lay) (cons 10 pt) (cons 40 hgt) (cons 1 str) (cons 72 1) (cons 73 2) (cons 11 pt)))) (setq *doc (cond (*doc) ((vla-get-ActiveDocument (vlax-get-acad-object))))) (if (setq ss (ssget)) (progn (setq uFlag (not (vla-StartUndoMark *doc))) (vlax-for obj (setq ss (vla-get-ActiveSelectionSet *doc)) (vla-getBoundingbox obj 'Mi 'Ma) (setq pts (cons (vlax-safearray->list Mi) (cons (vlax-safearray->list Ma) pts)))) (vla-delete ss) (setq Mi (apply (function mapcar) (cons 'min pts)) Ma (apply (function mapcar) (cons 'max pts))) (setq Poly (LwPoly (list (list (- (car Mi) offset) (- (cadr Mi) Offset) 0.) (list (- (car Mi) offset) (+ (cadr Ma) offset) 0.) (list (+ (car Ma) offset) (+ (cadr Ma) offset) 0.) (list (+ (car Ma) offset) (- (cadr Mi) offset) 0.)) 1)) (setq num (if (setq i -1 floor 1 ss (ssget "_X" (list (cons 0 "TEXT") (cons 8 lay)))) (progn (while (setq ent (ssname ss (setq i (1+ i)))) (if (< floor (setq nNum (atoi (cdr (assoc 1 (entget ent)))))) (setq floor nNum))) (itoa (1+ floor))) "1")) (setq TObj (Text (list (/ (+ (car Mi) (car Ma)) 2.) (- (cadr Mi) (+ Offset tHgt)) 0.) thgt num)) (if (not (vl-catch-all-error-p (setq Grp (vl-catch-all-apply (function vla-Add) (list (vla-get-Groups *doc) (strcat "BoxNumber_" num)))))) (vla-AppendItems Grp (vlax-make-variant (vlax-safearray-fill (vlax-make-safearray vlax-vbObject '(0 . 1)) (mapcar (function vlax-ename->vla-object) (list Poly tObj))))) (princ (strcat "\n** Error Creating Group: " (vl-catch-all-error-message Grp) " **"))) (setq uFlag (vla-EndUndoMark *doc))))(princ (strcat "\n the number is : " num)) (setq x1 (- (car Mi) (* 2 offset))) (setq y1 (- (cadr Mi) (* 2 offset))) (setq x2 (+ (car Ma) (* 2 offset))) (setq y2 (- (cadr Ma) (* 2 offset))) (setq pt1 (list x1 y1)) (setq pt2 (list x2 y2)) (line pt1 pt2) (setq ss (ssget "W" pt1 pt2)) (setq bNme "RH_") ; BLOCK IS ALWAYS REDEFINED (setq i -1) (entmake (list (cons 0 "BLOCK") (cons 10 pt1) (cons 2 bNme) (cons 70 0))) (while (setq ent (ssname ss (setq i (1+ i)))) (entmake (entget ent)) (and (= 1 (cdr (assoc 66 (entget (setq sub ent))))) (while (not (eq "SEQEND" (cdr (assoc 0 (entget (setq sub (entnext sub))))))) (entmake (entget sub)) ); WHILE (entmake (entget sub)) );AND (entdel ent) );WHILE (entmake (list (cons 0 "ENDBLK") (cons 8 "0"))) (entmake (list (cons 0 "INSERT") (cons 2 bNme) (cons 10 pt1))) (princ))
|