试试这个
- ;;======== rectangles dimensioning ===========;
- (defun C:RD (/ coors diment gap hgt p1 p2 p3 p4 pmid1 pmid2
- pmid3 pmid4 px1 px2 px3 px4 sel xmax xmin ymax ymin)
-
- (command "_undo" "be")
-
- (setq hgt (getvar "dimtxt"))
- (if (zerop hgt)(setq hgt 0.18))
- (setq gap (* hgt 2))
-
- (prompt "\n\t\t***\tSelect all rectangles\t***")
- (if
- (setq sel (ssget "_:L" (list (cons 0 "LWPOLYLINE")(cons 90 4)(cons 70 1))))
- (while (setq diment (ssname sel 0))
- (setq coors (vl-remove-if (function not)
- (mapcar
- (function (lambda(x)
- (if (= 10 (car x))
- (cdr x))))
- (entget diment))))
-
- (setq xmin (apply 'min (mapcar 'car coors))
- xmax (apply 'max (mapcar 'car coors))
- ymin (apply 'min (mapcar 'cadr coors))
- ymax (apply 'max (mapcar 'cadr coors))
- )
-
- (setq p1 (list xmin ymin)
- p2 (list xmax ymin)
- p3 (list xmax ymax)
- p4 (list xmin ymax)
-
- pmid1 (mapcar (function (lambda(a b)(/ (+ a b) 2))) p1 p2)
- px1 (polar pmid1 (+ (angle p1 p2)(/ pi 2)) gap)
- pmid2 (mapcar (function (lambda(a b)(/ (+ a b) 2))) p2 p3)
- px2 (polar pmid2 (+ (angle p2 p3)(/ pi 2)) gap)
- pmid3 (mapcar (function (lambda(a b)(/ (+ a b) 2))) p3 p4)
- px3 (polar pmid3 (+ (angle p3 p4)(/ pi 2)) gap)
- pmid4 (mapcar (function (lambda(a b)(/ (+ a b) 2))) p4 p1)
- px4 (polar pmid4 (+ (angle p4 p1)(/ pi 2)) gap)
- )
-
- (command "_dimlinear" "_non" p1 "_non" p2 "_non" px1)
- (vl-cmdf "dimoverride" "dimpost" "CM" "" "L" "")
- ;;;(command "_dimlinear" "_non" p2 "_non" p3 "_non" px2)
- ;;; (vl-cmdf "dimoverride" "dimpost" "CM" "" "L" "")
- ;;;(command "_dimlinear" "_non" p3 "_non" p4 "_non" px3)
- ;;; (vl-cmdf "dimoverride" "dimpost" "CM" "" "L" "")
- (command "_dimlinear" "_non" p1 "_non" p4 "_non" px4)
- (vl-cmdf "dimoverride" "dimpost" "CM" "" "L" "")
- (ssdel diment sel)
- )
- )
- (command "_undo" "e")
- (princ)
- )
- (prompt "\n\t\t***\tType RD to execute\t***")
- (princ)
~'J'~ |