;&s0C ;/---------------------Main Program-------------------------------------/ (defun C:BOMB ( / ENAME ETEXT) (SETVAR "CMDECHO" 0) (setq USELAY "") (setq EXPLAY (strcase (getstring "\nWhich LAYER do you wish to explode..? "))) (setq USELAY (getstring "\nWhich LAYER do you wish to put exploded entities on...? ....")) ; (setq YESPOL (strcase (getstring ; "\nDo you wish to explode Polylines...? "))) (setq ENAME (ENTNEXT)) (while ENAME (setq ETEXT (entget ename)) (setq INSLAY (cdr (assoc 8 ETEXT))) ;/layer of insertion/ ; (if (= "POLYLINE" (cdr (assoc 0 ETEXT))) ;/is entity a pline/ ; (if (= YESPOL "Y") ; (setq SS (BUILDSS ENAME) ) ) ) ;/end if and explode pline/ (setq XVAL (cdr (assoc 41 ETEXT))) ;/x scale/ (setq YVAL (cdr (assoc 42 ETEXT))) ;/y scale/ (setq ZVAL (cdr (assoc 43 ETEXT))) ;/z scale/ (if (= "INSERT" (cdr (assoc 0 ETEXT))) ;/is entity an INSERT/ (if (or (= EXPLAY "*") (= EXPLAY INSLAY)) ;/end or/ (if (= XVAL YVAL ZVAL) (setq SS (BUILDSS ENAME)) ;/go to BUILDSS/ (setq SS (MIRBLK ENAME ETEXT)) ;/go to MIRBLK/ ) ;/end if/ ) ;/end if/ ) ;/end if (setq oldname ename) (setq ename (entnext ename)) (if (= oldname ename) (setq ename nil)) ;/end if/ ) ;/end while/ ) ;/end BOMB ;/---------------------BUILD SELECTION SET---AND EXPLODE--------------------/ (defun BUILDSS ( ENAME / LASTNAME NEXTNAME ) (setq LASTNAME (entlast)) ;/last entity in dwg. dbase/ (command "EXPLODE" ENAME) (setq SS (ssadd)) (setq SS (ssadd (entnext LASTNAME) SS)) (setq LASTNAME (entnext LASTNAME)) (while (setq NEXTNAME (entnext LASTNAME)) (setq SS (ssadd NEXTNAME SS)) (setq LASTNAME NEXTNAME) ) ;/end while/ (if (/= USELAY "") (command "CHANGE" SS "" "P" "LA" USELAY "") ) ;/end if CHANGE LAYER/ SS ) ;/END PROG/ ;/------------MIRROR AND EXPLODE BLOCKS -X,Y ---------------------/ (defun MIRBLK ( ENAME ETEXT / XVAL YVAL MIRRPLN ) (setq XVAL (cdr (assoc 41 ETEXT))) ;/x scale/ (setq YVAL (cdr (assoc 42 ETEXT))) ;/y scale/ (setq INSPT (cdr (assoc 10 ETEXT))) ;/block insertion point/ (if (or (and (< XVAL 0)(< YVAL 0)) (and (> XVAL 0)(< YVAL 0)) ) (XY ENAME) ;/go to XY/ (if (or (< XVAL 0) (< YVAL 0)) (progn (command "MIRROR" ENAME "" INSPT "@1,0" "Y") (setq SS (BUILDSS ENAME)) ;/got to BUILDSS/ (command "MIRROR" SS "" INSPT "@1,0" "Y") ) ) ) ;/end if/ SS ) ;/end prog/ ;/-----------MIRROR AND EXPLODE BLOCKS -X,-Y and X,-Y ---------------------/ (defun XY ( ENAME / ) (setq ETEXT (entget ename)) (setq XVAL (cdr (assoc 41 ETEXT))) ;/x scale/ (setq YVAL (cdr (assoc 42 ETEXT))) ;/y scale/ (setq INSPT (cdr (assoc 10 ETEXT))) ;/block insertion point/ (if (and (< XVAL 0) (< YVAL 0)) ;/block inserted -x and -y/ (PROGN (SETQ ETEXT (SUBST (CONS 41 (ABS XVAL)) (ASSOC 41 ETEXT) ETEXT)) (SETQ ETEXT (SUBST (CONS 42 (ABS YVAL)) (ASSOC 42 ETEXT) ETEXT)) (ENTMOD ETEXT) (ENTUPD ENAME) (SETQ SS (BUILDSS ENAME)) ;/go to BUILDSS/ (COMMAND "ROTATE" SS "" INSPT "180") ) (PROGN (SETQ ETEXT ;/block inserted +x and -y/ (SUBST (CONS 42 (ABS YVAL)) (ASSOC 42 ETEXT) ETEXT)) (ENTMOD ETEXT) (ENTUPD ENAME) (SETQ SS (BUILDSS ENAME)) ;/go to BUILDSS/ (command "MIRROR" SS "" INSPT "@1,0" "Y") ) ;end progn ) ;/end if/ SS )