; ** 21-May-08 NEHolt - created ; ---------- P u s h P u l l L a y . L S P ---------- (defun c:PushToLay ( / ix slen ss en laynam enttyp wlay newed ed edd enn) ; Move selected entities to target layer. Save current ; layer info on each entity (and attribute) as an ; xdata value for retrieval by "PullFromLay" utility. (setq ss (ssget)) (if (/= ss nil) (progn (setq laynam (getstring "\nMove to layer=")) (setq slen (sslength ss)) (setq ix 0) (while (< ix slen) (setq en (ssname ss ix)) (setq ix (1+ ix)) (setq ed (entget en)) (setq enttyp (cdr (assoc 0 ed))) (cond ((= enttyp "LINE") ; Might be a WIRE. Save its layer name ; as an Xdata value on it so that it ; can be recovered on the "PullFromLay" ; utility. (setq wlay (cdr (assoc 8 ed))) (wd_1_mod_1000_xdata en "PUSH2LAY" wlay) ) ((= enttyp "INSERT") (setq wlay (cdr (assoc 8 ed))) (wd_1_mod_1000_xdata en "PUSH2LAY" wlay) ; Make sure all attributes are pushed to the ; target layer but are marked with their original ; layer (as an xdata value). (if (setq enn (entnext en)) (setq edd (entget enn))) (while (AND enn (/= (cdr (assoc 0 edd)) "SEQEND") (/= (cdr (assoc 0 edd)) "INSERT") ) (if (= (cdr (assoc 0 edd)) "ATTRIB") (progn ; Move this attribute to target layer and ; mark its existing layer as Xdata (wd_1_mod_1000_xdata enn "PUSH2LAY" (cdr (assoc 8 edd))) (setq newed (subst (cons 8 laynam) (assoc 8 edd) edd)) (entmod newed) ) ) (if (setq enn (entnext enn)) (setq edd (entget enn))) ) ) ) ; Push the main entity to the target layer (setq newed (subst (cons 8 laynam)(assoc 8 ed) ed)) (entmod newed) (entupd en) ) ) ) (setq ss nil) (princ) ) ; -- (defun c:PullFromLay ( / laynam ) ; Pull entities from selected layer. Restore them ; to their original layer names (saves as Xdata on ; the entities and attributes) (setq laynam (getstring "\nPull from layer=")) (if (AND laynam (/= laynam "")) (progn (pull_lay (list laynam)) ; call function to pull layer ) ) (princ) ) ; -- (defun pull_lay ( laylst / ix slen ss en laynam enttyp wlay newed ed edd enn) ; Alternate entry point, everything passed on command line ; example: (pull_lay (list "LAY1" "LAY10" "LAY50")) (foreach laynam laylst (setq ss (ssget "_X" (list (cons 8 laynam)))) (if (/= ss nil) (progn (setq slen (sslength ss)) (setq ix 0) (while (< ix slen) (setq en (ssname ss ix)) (setq ix (1+ ix)) (setq ed (entget en)) (setq enttyp (cdr (assoc 0 ed))) (cond ((= enttyp "LINE") ; Look for PUSH2LAY Xdata value. (setq wlay (wd_1_get_1000_xdata en "PUSH2LAY")) (if (AND wlay (/= wlay "")) (progn ; Restore this to its original layer (setq ed (entget en)) (setq newed (subst (cons 8 wlay)(assoc 8 ed) ed)) (entmod newed) ; Remove the Xdata flag (wd_1_del_appnam_xdata en "PUSH2LAY") ) ) ) ((= enttyp "INSERT") ; Look for PUSH2LAY Xdata value. (setq wlay (wd_1_get_1000_xdata en "PUSH2LAY")) (if (AND wlay (/= wlay "")) (progn ; Restore this to its original layer (setq ed (entget en)) (setq newed (subst (cons 8 wlay)(assoc 8 ed) ed)) (entmod newed) ; Remove the xdata flag (wd_1_del_appnam_xdata en "PUSH2LAY") ) ) ; Make sure pull all attributes are pushed to the ; target layer but are marked with their original ; layer (as an xdata value). (if (setq enn (entnext en)) (setq edd (entget enn))) (while (AND enn (/= (cdr (assoc 0 edd)) "SEQEND") (/= (cdr (assoc 0 edd)) "INSERT") ) (if (= (cdr (assoc 0 edd)) "ATTRIB") (progn (setq wlay (wd_1_get_1000_xdata enn "PUSH2LAY")) (if (AND wlay (/= wlay "")) (progn ; Restore this to its original layer (setq ed (entget enn)) (setq newed (subst (cons 8 wlay)(assoc 8 ed) ed)) (entmod newed) ; Remove the Xdata flag (wd_1_del_appnam_xdata enn "PUSH2LAY") ) ) ) ) (if (setq enn (entnext enn)) (setq edd (entget enn))) ) ) ) ) ) ) (setq ss nil) ) (princ) ) ; -- (defun c:EraseLay ( / ix slen ss en laynam ) (setq laynam (getstring "\nErase layer=")) (if (AND laynam (/= laynam "")) (progn (erase_lay (list laynam)) ) ) (princ) ) ; -- (defun erase_lay ( laylst / ss en laynam slen ix ) (foreach laynam laylst (setq ss (ssget "_X" (list (cons 8 laynam)))) (if (/= ss nil) (progn (setq slen (sslength ss)) (setq ix 0) (while (< ix slen) (setq en (ssname ss ix)) (setq ix (1+ ix)) (entdel en) ) ) ) (princ "\nErase count:") (princ slen) (setq ss nil) ) (princ) ) (princ "\nPushToLay, PullFromLay, EraseLay (Pull_Lay ) (Erase_Lay )\t")(princ)