154
1274
8
顶梁支柱
本帖以下内容被隐藏保护;需要你回复后,才能看到!
使用道具 举报
72
738
75
中流砥柱
19
99
4
初露锋芒
(defun c:binsert ( / *error* LM:BlockPreview RefGeom LM:Entity->PointList trp mxm mxv _blockpreview _ins dcl def des lst tmp bln ) (vl-load-com) (defun *error* ( msg ) (if ( (unload_dialog dcl) ) (if (= 'file (type des)) (close des) ) (if (and tmp (findfile tmp)) (vl-file-delete tmp) ) (if (and msg (not (wcmatch (strcase msg) "*BREAK,*CANCEL*,*EXIT*"))) (princ (strcat "\nError: " msg)) ) (princ) ) (defun-q LM:BlockPreview ( key block margin / _getcolour _getvectors _unique bn cache dy ec el en mi mx pl r1 r2 sc vc vl xt yt ) (setq cache '( )) (defun _getcolour ( l / c ) (cond ( (= 0 (setq c (cdr (assoc 62 l)))) 7 ) ( (or (null c) (= 256 c)) (abs (cdr (assoc 62 (tblsearch "LAYER" (cdr (assoc 8 l)))))) ) ( c ) ) ) (defun _getvectors ( bn / ec el en pl rg vl ) (if (setq en (tblobjname "BLOCK" bn)) (while (setq en (entnext en)) (setq el (entget en)) (cond ( (= 1 (cdr (assoc 60 el)))) ( (= "INSERT" (cdr (assoc 0 el))) (setq rg (RefGeom en)) (setq vl (append vl (mapcar (function (lambda ( x ) (append (mapcar '+ (mxv (car rg) (list (car x) (cadr x) 0.0)) '(0 0) (cadr rg)) (mapcar '+ (mxv (car rg) (list (caddr x) (cadddr x) 0.0)) '(0 0) (cadr rg)) (cddddr x) ) ) ) (_getvectors (cdr (assoc 2 el))) ) ) ) ) ( (setq pl (LM:Entity->PointList en)) (if (or (= "POINT" (cdr (assoc 0 el))) (vlax-curve-isclosed en)) (setq pl (cons (last pl) pl)) ) (setq ec (_getcolour el)) (setq vl (append vl (mapcar (function (lambda ( a b ) (list (car a) (cadr a) (car b) (cadr b) ec) ) ) pl (cdr pl) ) ) ) ) ) ) ) vl ) (defun _unique ( l / a r ) (while (setq a (car l)) (setq r (cons a r) l (vl-remove-if (function (lambda ( b ) (equal a b))) (cdr l)) ) ) (reverse r) ) (cond ( (or ( ( ( ) nil ) ( (setq vl (assoc (strcase block) cache)) (foreach x (cdr vl) (apply 'vector_image x)) t ) ( (setq vl (_getvectors block)) (setq mi (apply 'mapcar (cons 'min vl)) mx (apply 'mapcar (cons 'max vl)) mi (list (min (car mi) (caddr mi)) (min (cadr mi) (cadddr mi))) mx (list (max (car mx) (caddr mx)) (max (cadr mx) (cadddr mx))) r1 (/ (- (car mx) (car mi)) (- xt (* 2 margin))) r2 (/ (- (cadr mx) (cadr mi)) (- yt (* 2 margin))) ) (cond ( (and (equal r1 r2 1e-8) (equal r1 0.0 1e-8)) (setq sc 1.0 vc (mapcar '- mi (list (/ xt 2.0) (/ yt 2.0))) )