14
75
65
初露锋芒
使用道具 举报
58
3353
33
顶梁支柱
(defun c:foo (/ _dxf _layout a b c d i n o p2 s sp x) ;; RJP - 11.16.2017 (defun _layout (name / o) (if (and (setq o (cdr (assoc -1 (dictsearch (namedobjdict) "ACAD_LAYOUT")))) (setq o (cdr (assoc -1 (dictsearch o name))))) (vla-get-block (vlax-ename->vla-object o)) ) ) (defun _dxf (code ename) (cond (ename (cdr (assoc code (entget ename)))))) ;; This checks for metric drawings ( assuming it's set correctly ) (if (= 0 (getvar 'measurement)) (setq c 18. d 18. n "rjpbubble" ) (setq c 0.24 d 0.2 n "rjpbubble_metric" ) ) (if (null (tblobjname "block" n)) (progn (entmake (list '(0 . "BLOCK") '(100 . "AcDbEntity") '(67 . 0) '(8 . "0") '(100 . "AcDbBlockReference") '(66 . 1) (cons 2 n) '(10 0. 0. 0.) '(70 . 2) ) ) (entmake (list '(0 . "CIRCLE") '(100 . "AcDbEntity") '(67 . 0) '(62 . 53) '(8 . "grid-circle") '(100 . "AcDbCircle") '(10 0. 0. 0.) ;; This is the radius (cons 40 c) ) ) (entmake (list '(0 . "ATTDEF") '(100 . "AcDbEntity") '(67 . 0) '(62 . 121) '(8 . "Grid Text") '(100 . "AcDbText") '(10 -6.9925 -9. 0.) ;; Text height (cons 40 d) '(1 . "-") '(50 . 0.) '(41 . 1.) '(51 . 0.) (cons 7 (if (tblsearch "style" "LA-grid") "LA-grid" "Standard" ) ) '(71 . 0) '(72 . 1) '(11 0. 0. 0.) '(100 . "AcDbAttributeDefinition") '(280 . 0) '(3 . "Number") '(2 . "#") '(70 . 0) '(73 . 0) '(74 . 2) '(280 . 1) ) ) (entmake '((0 . "ENDBLK") (100 . "AcDbBlockEnd") (8 . "0"))) ) ) (if (tblobjname "block" n) (if (and (setq s (ssget '((0 . "line")))) (setq s (vl-remove-if 'listp (mapcar 'cadr (ssnamex s)))) (setq sp (_layout (_dxf 410 (car s)))) (setq s (apply 'append (mapcar '(lambda (x) (list (_dxf 10 x) (_dxf 11 x))) s))) (setq a (apply 'min (mapcar 'car s))) (setq b (apply 'max (mapcar 'cadr s)))) (progn (setq i 0) (foreach p (vl-sort (vl-remove-if-not '(lambda (x) (equal a (car x) 1e-) s) '(lambda (a b) (> (cadr a) (cadr b))) ) (setq p2 (vlax-3d-point (list (- (car p) c) (cadr p) (caddr p)))) (if (and (setq o (vla-insertblock sp p2 n 1 1 1 0)) (setq o (vlax-invoke o 'getattributes)) ) (vla-put-textstring (car o) (itoa (setq i (1+ i)))) ) ) (setq i 64) (foreach p (vl-sort (vl-remove-if-not '(lambda (x) (equal b (cadr x) 1e-) s) '(lambda (a b) (< (car a) (car b))) ) (setq p2 (vlax-3d-point (list (car p) (+ c (cadr p)) (caddr p)))) (if (and (setq o (vla-insertblock sp p2 n 1 1 1 0)) (setq o (vlax-invoke o 'getattributes)) ) (vla-put-textstring (car o) (if (= 91 (1+ i)) (chr (setq i 65)) (chr (setq i (1+ i))) ) ) ) ) ) )