This autolisp prgram searchs within a polyline boundary for sprinkler blocks then calculates total gallons per minute.(see attached)
Code:
(DEFUN C:GPM ()
(PROMPT "\n*GALLONS PER MINUTE* ")
(SETQ CMDE (GETVAR "CMDECHO"))
(SETVAR "CMDECHO" 0)
(SETQ LP1 1)
(WHILE LP1
(PROMPT "\nSelect polyline boundary: ")
(SETQ PSS (SSGET ":S" '((0 . "LWPOLYLINE"))))
(IF (/= PSS NIL) (SETQ LP1 NIL) (PROMPT "\nNO POLYLINE SELECTED, TRY AGAIN. "))
);END LP1
(SETQ PEN (SSNAME PSS 0))
(SETQ PENL (ENTGET PEN))
(SETQ PPL (LIST))
(FOREACH N PENL
(PROGN
(SETQ PPA (CAR N))
(SETQ PPV (CDR N))
(IF (= PPA 10) (SETQ PPL (APPEND PPL (LIST PPV))))
));END N
(SETQ SHSS (SSGET "WP" PPL '((0 . "INSERT") (8 . "L-Irr-Sprayhead"))))
(IF (/= SHSS NIL)
(PROGN
(SETQ SHSSL (SSLENGTH SHSS))
(SETQ CT (- SHSSL 1))
(SETQ SHGPM 0)
(SETQ SHENBTL (LIST))
(SETQ LP2 1)
(WHILE LP2
(SETQ MARK1 NIL)
(SETQ MARK2 NIL)
(SETQ SHEN (SSNAME SHSS CT))
(SETQ SHENL2 (ENTGET SHEN))
(SETQ SHENBN (CDR (ASSOC 2 SHENL2)))
(SETQ SHENBN (STRCAT "`" SHENBN))
(SETQ CT (- CT 1))
(SETQ SHEG SHEN)
(SETQ LP3 1)
(WHILE LP3
(SETQ SHEG (ENTNEXT SHEG))
(SETQ SHENL (ENTGET SHEG))
(SETQ SHENT (CDR (ASSOC 0 SHENL)))
(SETQ SHENV (CDR (ASSOC 1 SHENL)))
(SETQ SHENTN (CDR (ASSOC 2 SHENL)))
(IF (AND (= SHENT "ATTRIB") (= SHENTN "GPM") (/= SHENV NIL))
(PROGN
(SETQ SHGPM (+ SHGPM (ATOF SHENV)))
(SETQ SHENV2 SHENV)
(SETQ MARK1 1)
));END SHENT
(IF (AND (= SHENT "ATTRIB") (= SHENTN "TAG#") (/= SHENV NIL))
(PROGN
(SETQ SHENFLTR (LIST (CONS 0 "INSERT") (CONS 2 SHENBN)))
(SETQ SHENBS (SSGET "WP" PPL SHENFLTR))
(SETQ SHENBSL (SSLENGTH SHENBS))
(SETQ SHENV4 SHENV)
(SETQ MARK2 1)
));END SHENT
(IF (AND (= MARK1 1) (= MARK2 1))
(PROGN
(SETQ SHENV3 (* (ATOF SHENV2) SHENBSL))
(SETQ SHENBLA (LIST SHENBSL SHENV2 SHENV4 SHENV3 "|"))
(SETQ SHENLT (MEMBER SHENV4 SHENBTL))
(IF (= SHENLT NIL) (SETQ SHENBTL (APPEND SHENBTL SHENBLA)))
(SETQ LP3 NIL)
));END IF/PROGN MARK1
);END LP3
(IF (< CT 0) (SETQ LP2 NIL))
);END LP2
(PROMPT "\nTotal gallons per minute = ")
(PRINC SHGPM)
(PROMPT "\nTable information=\n")
(PRINC SHENBTL)
(SETQ PSHENBTL SHENBTL)
(SETVAR "ATTREQ" 0)
(SETQ TIP (GETPOINT "\nPick table insertion point: "))
(SETQ TIP2 TIP)
(SETQ CLA (GETVAR "CLAYER"))
(COMMAND "LAYER" "S" "0" "")
(COMMAND "ZOOM" "C" TIP "1")
(COMMAND "-INSERT" "TABLEHEADER" TIP "" "" "")
(SETQ LP4 1)
(WHILE LP4
(IF (/= PSHENBTL NIL)
(PROGN
(SETQ TIP (POLAR TIP (* PI 1.5) 2.9156))
(COMMAND "-INSERT" "TABLEROW" TIP "" "" "")
(SETQ TREN (ENTLAST))
(SETQ TREN2 TREN)
(SETQ FEILD1 (RTOS (CAR PSHENBTL) 2 0))
(SETQ PSHENBTL (CDR PSHENBTL))
(SETQ FEILD2 (CAR PSHENBTL))
(SETQ PSHENBTL (CDR PSHENBTL))
(SETQ FEILD3 (CAR PSHENBTL))
(SETQ PSHENBTL (CDR PSHENBTL))
(SETQ FEILD4 (RTOS (CAR PSHENBTL) 2 6))
(SETQ PSHENBTL (CDR PSHENBTL))
(SETQ FEILD5 (CAR PSHENBTL))
(SETQ PSHENBTL (CDR PSHENBTL))
(SETQ LP5 1)
(WHILE LP5
(SETQ TREN (ENTNEXT TREN))
(SETQ TRENL (ENTGET TREN))
(SETQ TRENT (CDR (ASSOC 0 TRENL)))
(SETQ TRENV (ASSOC 1 TRENL))
(SETQ TRENTN (CDR (ASSOC 2 TRENL)))
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "QUANTITY"))
(PROGN
(SETQ NTRENV (CONS 1 FEILD1))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
));END PROGN/IF TRENT
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "GPM"))
(PROGN
(SETQ NTRENV (CONS 1 FEILD2))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
));END PROGN/IF TRENT
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "TAG#"))
(PROGN
(SETQ NTRENV (CONS 1 FEILD3))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
));END PROGN/IF TRENT
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "GPMTOTAL"))
(PROGN
(SETQ NTRENV (CONS 1 FEILD4))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
(ENTUPD TREN2)
(SETQ LP5 NIL)
));END PROGN/IF TRENT
);END LP5
);END PROGN
(SETQ LP4 NIL)
);END IF PSHENBTL
);END LP4
(SETQ MARK3 NIL)
(SETQ MARK4 NIL)
(SETQ TIP (POLAR TIP (* PI 1.5) 2.9156))
(COMMAND "-INSERT" "TABLEROW" TIP "" "" "")
(SETQ TREN (ENTLAST))
(SETQ TREN2 TREN)
(SETQ LP6 1)
(WHILE LP6
(SETQ TREN (ENTNEXT TREN))
(SETQ TRENL (ENTGET TREN))
(SETQ TRENT (CDR (ASSOC 0 TRENL)))
(SETQ TRENV (ASSOC 1 TRENL))
(SETQ TRENTN (CDR (ASSOC 2 TRENL)))
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "QUANTITY"))
(PROGN
(SETQ SHSSL2 (RTOS SHSSL 2 0))
(SETQ NTRENV (CONS 1 SHSSL2))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
(SETQ MARK3 1)
));END PROGN/IF TRENT
(IF (AND (= TRENT "ATTRIB") (/= TRENV NIL) (= TRENTN "GPMTOTAL"))
(PROGN
(SETQ SHGPM2 (RTOS SHGPM 2 6))
(SETQ NTRENV (CONS 1 SHGPM2))
(SETQ NTRENL (SUBST NTRENV TRENV TRENL))
(ENTMOD NTRENL)
(SETQ MARK4 1)
));END PROGN/IF TRENT
(IF (AND (= MARK3 1) (= MARK4 1))
(PROGN
(ENTUPD TREN2)
(COMMAND "ZOOM" "P")
(SETVAR "CLAYER" CLA)
(SETQ LP6 NIL)
));END PROGN/IF MARK3
);END LP6
);END PROGN
(PROMPT"\nNO BLOCKS FOUND ")
);END IF SHSS
(SETVAR "CMDECHO" CMDE)
(PRINC)
);END GPM