myscript.lsp in any folderAPPLOAD at the AutoCAD command promptLoadCLEANUP) to run it.lsp fileSupport folderacad.lsp or acaddoc.lsp to auto-loadAPPLOAD → Startup Suite → Contents(defun c:SLC (/ ent)
(setq ent (car (entsel "\nPick object to set layer current: ")))
(if ent
(setvar "CLAYER"
(cdr (assoc 8 (entget ent))))
(princ "\nNo object selected.")
)
(princ)
)(defun c:ISOL (/ ent lyr)
(setq ent (car (entsel "\nPick object on layer to isolate: ")))
(if ent
(progn
(setq lyr (cdr (assoc 8 (entget ent))))
(command "LAYER" "FREEZE" "*" "" "THAW" lyr "")
(princ (strcat "\n✓ Isolated: " lyr))
)
(princ "\nCancelled.")
)
(princ)
)(defun c:FRZOTHER (/ cur) (setq cur (getvar "CLAYER")) (command "LAYER" "FREEZE" "*" "" "THAW" cur "") (princ (strcat "\n✓ All layers frozen except: " cur)) (princ) )
(defun c:TO0 (/ ss i ent)
(setq ss (ssget))
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(entmod (subst (cons 8 "0")
(assoc 8 (entget ent))
(entget ent)))
(setq i (1+ i))
)
(princ (strcat "\n✓ " (itoa (sslength ss)) " objects moved to Layer 0."))
)
(princ "\nNothing selected.")
)
(princ)
)(defun c:UTILLAYERS ()
; (layer-name color linetype)
(foreach lyr '(
("CONDUCTOR" "3" "Continuous")
("POLE" "5" "Continuous")
("GUY-WIRE" "1" "Dashed")
("XFMR" "4" "Continuous")
("GROUND" "6" "Continuous")
("LABELS" "7" "Continuous")
)
(command "LAYER" "MAKE" (car lyr)
"COLOR" (cadr lyr) (car lyr)
"LTYPE" (caddr lyr) (car lyr) "")
)
(princ "\n✓ Utility layer set created.")
(princ)
)(defun c:CTH (/ ss ht i ent)
(setq ht (getreal "\nNew text height: "))
(setq ss (ssget '((0 . "TEXT,MTEXT"))))
(if (and ss ht)
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(entmod (subst (cons 40 ht)
(assoc 40 (entget ent))
(entget ent)))
(setq i (1+ i))
)
(princ (strcat "\n✓ " (itoa (sslength ss)) " text objects updated."))
)
(princ "\nCancelled.")
)
(princ)
)(defun c:ADDPREFIX (/ ss prefix i ent str)
(setq prefix (getstring T "\nPrefix string to add: "))
(setq ss (ssget '((0 . "TEXT"))))
(if (and ss prefix)
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq str (cdr (assoc 1 (entget ent))))
(entmod (subst (cons 1 (strcat prefix str))
(assoc 1 (entget ent))
(entget ent)))
(setq i (1+ i))
)
(princ (strcat "\n✓ Prefix added to "
(itoa (sslength ss)) " objects."))
)
)
(princ)
)(defun c:CLEANUP () (command "PURGE" "A" "" "N") (command "AUDIT" "Y") (princ "\n✓ Purge + Audit complete.") (princ) )
(defun c:CLEANDUPS (/ ss)
(setq ss (ssget "X")) ; select all in drawing
(if ss
(progn
(command "OVERKILL" ss "" )
(princ "\n✓ Duplicate/overlapping objects removed.")
)
(princ "\nDrawing is empty.")
)
(princ)
)(defun c:ATTREP (/ ss find rep i ent att)
(setq find (getstring T "\nFind attribute value: "))
(setq rep (getstring T "\nReplace with: "))
(setq ss (ssget "X" '((0 . "INSERT") (66 . 1))))
(if ss
(progn
(setq i 0)
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq att (entnext ent))
(while (= "ATTRIB" (cdr (assoc 0 (entget att))))
(if (= find (cdr (assoc 1 (entget att))))
(entmod (subst (cons 1 rep)
(assoc 1 (entget att))
(entget att)))
)
(setq att (entnext att))
)
(setq i (1+ i))
)
(princ "\n✓ Attribute replacement complete.")
)
(princ "\nNo blocks with attributes found.")
)
(princ)
)(defun c:CD (/ ctr dia)
(setq ctr (getpoint "\nCenter point: "))
(setq dia (getreal "\nDiameter: "))
(if (and ctr dia (> dia 0))
(command "CIRCLE" ctr (/ dia 2))
(princ "\nInvalid input.")
)
(princ)
)(defun c:SCALEREF (/ ss bp ref new sf)
(setq ss (ssget))
(setq bp (getpoint "\nBase point: "))
(setq ref (getreal "\nKnown (reference) distance: "))
(setq new (getreal "\nDesired (new) distance: "))
(if (and ss bp ref new (/= ref 0))
(progn
(setq sf (/ new ref))
(command "SCALE" ss "" bp sf)
(princ (strcat "\n✓ Scale factor applied: "
(rtos sf 2 4)))
)
(princ "\nCancelled or invalid input.")
)
(princ)
)(defun c:COUNTOBJ (/ ss i ent typ tbl)
(setq ss (ssget))
(if ss
(progn
(setq i 0 tbl (list))
(while (< i (sslength ss))
(setq ent (ssname ss i))
(setq typ (cdr (assoc 0 (entget ent))))
(if (assoc typ tbl)
(setq tbl (subst (cons typ (1+ (cdr (assoc typ tbl))))
(assoc typ tbl) tbl))
(setq tbl (append tbl (list (cons typ 1))))
)
(setq i (1+ i))
)
(princ (strcat "\nTotal: " (itoa (sslength ss)) " objects"))
(foreach pair tbl
(princ (strcat "\n " (car pair) ": " (itoa (cdr pair))))
)
)
(princ "\nNothing selected.")
)
(princ)
)(defun c:SCALEINFO (/ ul)
(setq ul (getvar "LUNITS"))
(princ (strcat
"\n── Drawing Info ──────────────────"
"\n File: " (getvar "DWGNAME")
"\n Unit Type: " (nth (1- ul)
'("Scientific" "Decimal" "Engineering"
"Architectural" "Fractional"))
"\n Limits Min: "
(rtos (car (getvar "LIMMIN")) 2 4) ","
(rtos (cadr (getvar "LIMMIN")) 2 4)
"\n Limits Max: "
(rtos (car (getvar "LIMMAX")) 2 4) ","
(rtos (cadr (getvar "LIMMAX")) 2 4)
"\n Annot Scale: " (getvar "CANNOSCALEVALUE")
"\n Current Lyr: " (getvar "CLAYER")
"\n──────────────────────────────────"
))
(princ)
)(defun c:LISTLAYERS (/ doc layers count)
(vl-load-com)
(setq doc (vla-get-ActiveDocument (vlax-get-acad-object)))
(setq layers (vla-get-Layers doc))
(setq count 0)
(vlax-for lyr layers
(princ (strcat "\n " (vla-get-Name lyr)))
(setq count (1+ count))
)
(princ (strcat "\n── " (itoa count) " layers total ──"))
(princ)
)(defun c:SPAN (/ p1 p2 mid dist ang)
(setq p1 (getpoint "\nPole 1 location: "))
(setq p2 (getpoint p1 "\nPole 2 location: "))
(setq dist (distance p1 p2))
(setq mid (list (/ (+ (car p1) (car p2)) 2)
(/ (+ (cadr p1) (cadr p2)) 2) 0))
(setq ang (angle p1 p2))
; Draw span line on CONDUCTOR layer
(command "LAYER" "MAKE" "CONDUCTOR" "")
(command "LINE" p1 p2 "")
; Label at midpoint
(command "LAYER" "MAKE" "LABELS" "")
(command "TEXT" "J" "MC" mid (* dist 0.03)
(angtos ang 0 0)
(strcat (rtos dist 2 1) "'"))
(princ (strcat "\n✓ Span: " (rtos dist 2 2) " ft"))
(princ)
)(defun c:POLE (/ pt num)
(setq pt (getpoint "\nPole location: "))
(setq num (getstring "\nPole number (Enter to skip): "))
; Switch to POLE layer — creates it if it doesn't exist
(command "LAYER" "MAKE" "POLE" "COLOR" "5" "POLE" "")
(command "CIRCLE" pt 0.5)
(command "POINT" pt)
; Optional label
(if (/= num "")
(progn
(command "LAYER" "MAKE" "LABELS" "COLOR" "7" "LABELS" "")
(command "TEXT" "J" "MC"
(list (car pt) (+ (cadr pt) 0.75) 0)
0.18 "0" num)
)
)
(princ (strcat "\n✓ Pole placed" (if (/= num "") (strcat ": " num) ".") ))
(princ)
)(defun c:GUY (/ p1 p2)
(setq p1 (getpoint "\nPole attachment point: "))
(setq p2 (getpoint p1 "\nAnchor/deadman point: "))
(command "LAYER" "MAKE" "GUY-WIRE"
"COLOR" "1" "GUY-WIRE"
"LTYPE" "Dashed" "GUY-WIRE" "")
(command "LINE" p1 p2 "")
(princ (strcat "\n✓ Guy wire drawn. Length: "
(rtos (distance p1 p2) 2 2) " ft"))
(princ)
)(defun c:SAVEBAK (/ dwg path)
(setq dwg (getvar "DWGNAME"))
(setq path (getvar "DWGPREFIX"))
(command "QSAVE")
(princ (strcat
"\n✓ Saved: " dwg
"\n Path: " path
))
(princ)
)(defun c:ZE () (command "ZOOM" "E") (princ) )