; ** 04-Apr-07 NEHolt created ; -------- R E S T O R E _ W N U M . L S P --------- (defun c:restore_wnum ( / ss xitflg wnum_en wnum_hdl line_xdata ix en ed x wlst slen line_en) ; PURPOSE: user may have used AutoCAD COPY command to copy ; wiring and wire numbers. This leaves copied wires pointing ; back at the original wire number. This tool allows ; some cleanup of copied wire/wire numbers. (setq xitflg nil) (while (not xitflg) (setq xitflg T) ; default to exit loop (princ "\nSelect copied wire segment and copied wire number:") (setq ss (ssget '((-4 . "")))) (if (/= ss nil) (progn (setq wnum_en nil) (setq line_en nil) (setq slen (sslength ss)) (setq ix 0) (setq wnum_hdl nil) (setq line_xdata nil) (while (< ix slen) (setq en (ssname ss ix)) (setq ed (entget en)) (cond ((= (cdr (assoc 0 ed)) "LINE") ; Look for Xdata pointer pointing at a wire number ; block insert. (setq x (c:wd_get_1005_xdata en "VIA_WD_WNPTR")) (if x (setq line_xdata x)) (setq line_en en) ) ((= (cdr (assoc 0 ed)) "INSERT") ; Should be WD_WNH* or WD_WNV* wire number block ; insert. Get its handle (setq wnum_hdl (cdr (assoc 5 ed))) ) ) (setq ix (1+ ix)) ) (if (AND wnum_hdl line_xdata) (progn ; see if LINE is pointing at handle of wire number (if (/= wnum_hdl line_xdata) (progn ; Need to extract a list of all wires in this ; network and then adjust pointer on each ; segment to point at the selected wire number ; block insert. (setq wlst (car (c:wd_get_wire_netlst line_en 2))) (foreach en wlst (c:wd_mod_1005_xdata en wnum_hdl "VIA_WD_WNPTR") ) (if wlst (princ "\nRestored wire number pointer")) ) ; ELSE (progn (princ "\nWire number pointer looks OK") ) ) ) ) (setq ss nil) ; release selection set (setq xitflg nil) ; stay in loop ) ) ) (princ) )