;Automatically draws full sewer profile by pick or key-in of sta./elevs. ; (defun C:MHP (/ BLDR2 BLDR1 DIMSC INVI INVO PT1R PT1L PT2 PT1 RELE ; RIMT RIMXY STATX STAL TLDR2 TLDR1 TPB2 TPB1 TPT2 TPT1A TPT1 TXTS THISLA YV2 ; curang txsty ntxsty mhbas invix inviy invip drptn drptf drpbn ; drpbf drpct drpcb tpt0 dmhn curclr invis piptl piptr slpta hllen ltpt1 pstxt ; hplen pslp llbl llbl2 lpsiz pt1s) (setq dmhn 0) ;Reset MH No. Def (will result in 1st Def=1) (setq osnaps (getvar"osmode")) (if psiz ; (setq lpsiz (/ psiz 0.8333333)) ;Set Pipe Size def to last used (setq lpsiz 8) ; );if ; ;(setq clupr (getvar "luprec")) ; ;(setvar "luprec" 0) ; (setq psiz (*(uint 1 "" "\nPIPE SIZE (in inches)" lpsiz)0.8333333)) ;Get new pipe size or def (setq pstxt (rtos(* 1.2 psiz)2 0)) ;Make Pipe Size text string (setvar "cmdecho" 0) ;Don't echo commands (setq thisla (getvar"clayer")) ;Save Current Layer (setq dimsc (getvar"dimscale")) ;Get Current Dimscale (if btxts ; (setq leroy (/ btxts 0.001)) ; (setq leroy 125) ; );if ; (setq btxts (*(ureal 1 "" "\nTEXT TEMPLATE SIZE " leroy)0.001)) ; (setq sprec (fix(uint 1 "" "\nDECIMAL PRECISION for SLOPE ? " (if sprec sprec 2)))) ; (setq rprec (ukword 1 "Tenths Hundredths" "\nTenths or Hundredths for RIM ELEVATIONS ? (T or H)" (if rprec rprec "T"))) ; (setq pmat (ustr 0 "Pipe Material?" "PVC" "T")) ;(setvar "luprec" clupr) ; (setq txts (* dimsc btxts)) ;Set text height (while ;Continue Function until null input (setq pt1 (upoint 0 "" "\nSTATION and INVERT OUT " nil nil)) ;Get MH STA and INV OUT (progn (setq pt1 (list(car pt1)(cadr pt1)(* 1000 dimsc))) ;Do This if "WHILE" is true (if invis (progn (setq sstr (rtos(* 100.00(/(-(cadr pt1)(cadr invis))(-(car pt1)(car invis))))2 sprec));change the last number for precision (setq pslp (/(atof sstr)100.00)) ;construct % slope text for pipe (setq pt1y (+(* (-(car pt1)(car invis)) pslp)(cadr invis))) (setq pt1 (list (car pt1) pt1y(* 1000 dimsc))) );progn );if (if mhno (setq dmhn (atoi mhno)) nil) ;Use input from "MH NUMBER?" query if exists (setq dmhn (+ dmhn 1)) ;Increment Def MH No. (setq dmhs (rtos(fix dmhn)2 0)) ;Convert MH No. to String (setq curang (getvar"angdir")) ;Get Current Angle dir (cw, ccw) (setvar "angdir" 0) ;Set Angle Direction for this function only (if getstyle (getstyle "A")(progn (load "getstyle")(getstyle "A"))) (if linno nil (setq linno "X-X")) ; (setq linno (ustr 1 "\nLINE ID" linno T)) ;Get Line ID or Def (setq rimxy (upoint 15 "" "\nRIM ELEV" nil pt1)) ;Get Rim Elev ; (if ; (>(length rimxy)2) ;If Value is x,y,z coord set (progn ;Do this (setq yv2 (cadr rimxy)) ;Use only the Y value (setq yv2 (rtos yv2)) (setq yv2 (distof yv2)) (if (eq rprec "Tenths") (setq rimt (/(fix yv2)10.00)) (setq rimt (/ yv2 10.0)) );if ;Make value for RIM ELEV text (setq pt2 (list (car pt1)yv2(* 1000 dimsc))) ;Construct x,y pair for MH rim pt );progn ; (progn ;Otherwise do this (value is x,y coord set) (setq yv2 (cdr rimxy)) ;Use Y value only (setq yv2 (rtos yv2)) (setq yv2 (distof yv2)) (if (eq rprec "Tenths") (setq rimt (/(fix yv2)10.00)) (setq rimt (/ yv2 10.0)) );if ;Make value for RIM ELEV text (setq pt2 (list (car pt1)yv2(* 1000 dimsc))) ;Construct x,y pair for MH rim );progn ; );if ; (setq mhbas 5) ;Distance from INV OUT to Bottom of MH = .5ft (could vary this later) (if (>=(* dimsc 0.08)2.0) (setq mhwid (* dimsc 0.08)) ;Set Manhole halfwidth to 2' min. (setq mhwid 2.0) ; );if (if statx nil (setq statx (strcat "+"(rtos(cadr pt1)2 2))) );if (setq pt2l (polar pt2 pi mhwid)) ; (setq pt2r (polar pt2 0 mhwid)) ; (setq pt1l (polar (polar pt1 (* pi 1.5) mhbas) pi mhwid)) ;Set Bottom Left MH pt (setq pt1r (polar (polar pt1 (* pi 1.5) mhbas) 0 mhwid)) ;Set Bottom Right MH pt (setq mhno (ustr 0 "\nMANHOLE No" dmhs nil)) ;Set MH Number (setq inviy (+ (cadr pt1) 1)) ;Set Default INV IN Y value (add 0.1 * 10) (setq invix (car pt1)) ;Set Default INV IN X value (setq invi (list invix inviy)) ;Construct Def INV IN XY pair (setq invip (upoint 1 "" "\nINVERT IN" invi nil)) ;Get new INV IN or use Def (setq invi (rtos (/(cadr invip)10) 2 2)) ;Construct String for "INV IN" text (setq invo (rtos (/(cadr pt1)10) 2 2)) ;Construct String for "INV OUT" text (setq tpt1 (polar (polar(list(car pt2)(cadr pt2)(* 1001 dimsc))(/ pi 2) (* dimsc 0.43867)) pi (* txts 2.33333))) ;Top 1st line text offset left (setq tpt1a (polar (polar(list(car pt2)(cadr pt2)(* 1001 dimsc))(/ pi 2) (* dimsc 0.43867)) pi (* txts 0.83333))) ;Top 2nd line text offset left (setq tpt2 (polar (polar(list(car pt2)(cadr pt2)(* 1001 dimsc))(/ pi 2) (* dimsc 0.43867)) 0 (* txts 1.66667))) ;Top 3rd line (under leader) offset right (setq tpb1 (polar (polar(list(car pt1)(cadr pt1)(* 1001 dimsc))(* pi 1.5) (+(* txts (+ 10.75 (strlen invo)))mhbas)) pi (* txts 0.6))) ;Bottom 1st line text offset left (setq tpb2 (polar (polar(list(car pt1)(cadr pt1)(* 1001 dimsc))(* pi 1.5) (+(* txts (+ 10.75 (strlen invo)))mhbas)) 0 (* txts 1.66667))) ;Bottom 2nd line (under leader) offset right (setq tldr1 (polar(list(car pt2)(cadr pt2)(* 1001 dimsc))(/ pi 2) (* txts 1.5))); WAS 3.33333 ;Set top leader pt 1 (setq tldr2 (polar tldr1 (/ pi 2) (* txts (+ 6.75 (strlen(strcat statx linno)))))); WAS * txts 19 ;Set top leader pt 2 (setq bldr1 (polar(list(car pt1)(cadr pt1)(* 1001 dimsc))(* pi 1.5) (+(* txts (+ 10.75 (strlen invo)))mhbas))); WAS * txts 19 mhbas ;Set bottom leader pt 1 (setq bldr2 (polar(list(car pt1)(cadr pt1)(* 1001 dimsc))(* pi 1.5) (+(* txts 1.5)mhbas))); WAS 3.33333 mhbas ;Set bottom leader pt 2 (setvar "osmode" 0) (setq spt1l (list(car pt1l)(cadr pt1l)(* 1000 dimsc)) spt1r (list(car pt1r)(cadr pt1r)(* 1000 dimsc)) spt2 (list(car pt2)(cadr pt2)(* 1000 dimsc)) lpt1l (list(car pt1l)(cadr pt1l)(* 1001 dimsc)) lpt1r (list(car pt1r)(cadr pt1r)(* 1001 dimsc)) lpt2 (list(car pt2)(cadr pt2)(* 1001 dimsc)) );setq (command ".layer" "m" "C-SSWR8PATT" "C" 8 "" "") (command ".solid" spt1l spt1r spt2 "" "") (command ".layer" "m" "C-SSWR2NEWW" "C" 2 "" "") (command ".pline" lpt1l lpt2 lpt1r "c" ) ;Draw MH (if invis ;If previous INV IN exists, (progn ;Do The following (setq pang (angle invis pt1)) ;get actual angle of pipe (setq pango (angle pt1 invis)) ; (setq ptlc (polar invis (/ pi 2) psiz)) (setq ptrc (polar pt1 (/ pi 2) psiz)) (setq pipbl (polar invis pang (/ ; Divide (*(-(cadr pt2s)(cadr invis))(sin(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ; (to obtain distance "a") ) spipbl (list(car pipbl)(cadr pipbl)(* 1000 dimsc)) lpipbl (list(car pipbl)(cadr pipbl)(* 1001 dimsc)) ) ; (setq pipbr (polar pt1 pango (/ (*(-(car(cdr pt2))(car(cdr pt1)))(sin(atan(/ mhwid(+(-(car(cdr pt2))(car(cdr pt1)))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(car(cdr pt2))(car(cdr pt1)))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ) spipbr (list(car pipbr)(cadr pipbr)(* 1000 dimsc)) lpipbr (list(car pipbr)(cadr pipbr)(* 1001 dimsc)) ) ; (setq piptl (polar ptlc pang (/ (*(-(cadr pt2s)(car(cdr ptlc)))(sin(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ) spiptl (list(car piptl)(cadr piptl)(* 1000 dimsc)) lpiptl (list(car piptl)(cadr piptl)(* 1001 dimsc)) ) ; (setq piptr (polar ptrc pango (/ (*(-(car(cdr pt2))(car(cdr ptrc)))(sin(atan(/ mhwid(+(-(car(cdr pt2))(car(cdr pt1)))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(car(cdr pt2))(car(cdr pt1)))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ) spiptr (list(car piptr)(cadr piptr)(* 1000 dimsc)) lpiptr (list(car piptr)(cadr piptr)(* 1001 dimsc)) ) ; (setq slpta (* pang 57.29577951)) ;convert angle to degrees for text input (setq hplen (rtos(- (car pt1)(car invis))2 2)) ;get horizontal length of pipe (setq pslp (rtos (* 10 (/ (-(car(cdr pt1))(cadr invis)) (-(car pt1)(car invis)) ) ) 2 sprec) );setq ;construct % slope text for pipe (setq hllen (/(/ (-(car pt1)(car invis))(cos pang))2)) ;get midpoint of pipe flowline (used next) (setq ltpt1 (polar(polar invis pang hllen)(* pi 1.5)(/ (* 1.5 txts)(cos pang))) ltpt1 (list(car ltpt1)(cadr ltpt1)(* 1001 dimsc))) ;construct actual text placement point MC justified (if ; (> (-(cadr invis)(cadr pt1s)) 25.0) ;If Drop is > 2.5ft (progn ; (setq hplen (rtos(- (car pt1)(car pt1sv))2 2)) ;get horizontal length of pipe ; (setq hplen (rtos(- (car pipbr)(car pipbl))2 2)) ;get horizontal length of pipe (setq hllen (/(/ (-(car pipbr)(car pipbl))(cos pang))2)) ;get midpoint of pipe flowline (used next) (setq ltpt1 (polar(polar pipbl pang hllen)(* pi 1.5)(/ (* 1.5 txts)(cos pang))) ltpt1 (list(car ltpt1)(cadr ltpt1)(* 1001 dimsc))) ;construct actual text placement point MC justified (setq dnnt (list (car pt1s) (+(cadr pt1s) psiz 1))) (setq dnnb (list (car pt1s) (+(cadr pt1s)1))) (setq tpt0 (polar (polar pt2s (/ pi 2) (* txts 3.33333)) pi (* txts 3.83333)) tpt0 (list(car tpt0)(cadr tpt0)(* 1001 dimsc))) ;Top Drop MH text offset left (setq drpbn (list (+(car pt1s)8) (+(cadr pt1s)psiz 0.8 1)) sdrpbn (list(car drpbn)(cadr drpbn)(* 1000 dimsc)) ldrpbn (list(car drpbn)(cadr drpbn)(* 1001 dimsc))) ;Set nearest Bottom outside drop MH pt (setq drpbf (list (+(car pt1s)12) (+(cadr pt1s)1.2 1)) sdrpbf (list(car drpbf)(cadr drpbf)(* 1000 dimsc)) ldrpbf (list(car drpbf)(cadr drpbf)(* 1001 dimsc))) ;Set farthest Bottom outside drop MH pt (setq drpct (polar dnnt 0.09966865 (/ (*(-(cadr pt2s)(car(cdr dnnt)))(sin(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ) sdrpct (list(car drpct)(cadr drpct)(* 1000 dimsc)) ldrpct (list(car drpct)(cadr drpct)(* 1001 dimsc)) ) ;Set Drop INV IN Top centerline pt (.1 x 10 above INV OUT) (setq drpcb (polar dnnb 0.09966865 (/ (*(-(cadr pt2s)(car(cdr dnnb)))(sin(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas))))) ; c * sin(alpha) by (sin(- pi(atan(/ mhwid(+(-(cadr pt2s)(cadr pt1s))mhbas)))(-(/ pi 2) pang))) ; sin(gamma) ) ) ;Set Drop INV IN Bottom centerline pt sdrpcb (list(car drpcb)(cadr drpcb)(* 1000 dimsc)) ldrpcb (list(car drpcb)(cadr drpcb)(* 1001 dimsc)) ) (setq pipbm (polar invis pang (/ 8 (cos pang)))) ;Set nearest Top outside drop MH pt (setq pipbn (polar invis pang (/ 12 (cos pang)))) ;Set farthest Top outside drop MH pt (setq spipbm (list(car pipbm)(cadr pipbm)(* 1000 dimsc)) spipbn (list(car pipbn)(cadr pipbn)(* 1000 dimsc)) spipbl (list(car pipbl)(cadr pipbl)(* 1000 dimsc)) spipbr (list(car pipbr)(cadr pipbr)(* 1000 dimsc)) spiptl (list(car piptl)(cadr piptl)(* 1000 dimsc)) spiptr (list(car piptr)(cadr piptr)(* 1000 dimsc)) lpipbm (list(car pipbm)(cadr pipbm)(* 1001 dimsc)) lpipbn (list(car pipbn)(cadr pipbn)(* 1001 dimsc)) lpipbl (list(car pipbl)(cadr pipbl)(* 1001 dimsc)) lpipbr (list(car pipbr)(cadr pipbr)(* 1001 dimsc)) lpiptl (list(car piptl)(cadr piptl)(* 1001 dimsc)) lpiptr (list(car piptr)(cadr piptr)(* 1001 dimsc)) );setq (command ".layer" "m" "C-SSWR8PATT" "C" 8 "" "") (command ".solid" spipbm spipbn sdrpbn sdrpbf "") ; (command ".solid" sdrpct sdrpbn sdrpcb sdrpbf "") ; (command ".layer" "m" "C-SSWR2NEWW" "C" 2 "" "") (command ".line" ldrpct ldrpbn lpipbm "") ;Draw Drop MH (command ".line" ldrpcb ldrpbf lpipbn "") ;Draw Drop MH (command ".line" lpipbl lpipbm "") ;Draw Pipe bottom left of drop MH (command ".line" lpipbn lpipbr "") ;Draw Pipe bottom right of drop MH (command ".layer" "m" "C-SSWR6NOTE" "C" 6 "" "") (command ".text" tpt0 txts 90 "OUTSIDE DROP") ;OUTSIDE DROP MH text );progn ; (command ".line" lpipbl lpipbr "") ;Draw Pipe bottom when no drop MH );if ; (command ".layer" "m" "C-SSWR8PATT" "C" 8 "" "") (command ".solid" spiptl spiptr spipbl spipbr "") ; (command ".layer" "m" "C-SSWR2NEWW" "C" 2 "" "") (command ".line" lpiptl lpiptr "") ;Draw Pipe top (setq invis nil) ;reset previous INV IN to nil );progn ; nil ;Otherwise do nothing );if ; (setq sta (rtos (car pt1) 2 2)) ;Set STATION no. string (setq stal (strlen sta)) ;Get length of STA string (if (eq stal 4) ; (setq statx (strcat "0+0" sta)) ; (if (eq stal 5) ; (setq statx (strcat "0+" sta)) ; (if (eq stal 6) ;Fix STA string with + and/or zeros as needed (setq statx (strcat (substr sta 1 1) "+" (substr sta 2))) ; (if (eq stal 7) ; (setq statx (strcat (substr sta 1 2) "+" (substr sta 3))) ; (if (eq stal 8) ; (setq statx (strcat (substr sta 1 3) "+" (substr sta 4))) ; (setq statx sta) ; );if ; );if ; );if ; );if ; );if ; (setq rele (rtos rimt 2 2)) ;Make value for RIM ELEV text (command ".layer" "m" "C-SSWR6NOTE" "C" "6" "" "") ;Make TEXT layer (sets to layer if exists) (command ".text" tpt1 txts 90 (strcat "MH #" mhno) ; ".text" tpt1a txts 90 (strcat "STA. " statx " " linno) ; ".text" tpt2 txts 90 (strcat "RIM ELEV. " rele "'") ;Place text strings ".text" tpb1 txts 90 (strcat "INV. OUT " invo "'") ; ".text" tpb2 txts 90 (strcat "INV. IN " invi "'")) ; (if ltpt1 ; (progn ; (setq llbl (strcat pstxt "\" " pmat " SAN. SEW. @ " pslp "%")) ;Make 1st (and only) line of text for pipe label (if ; (> (*(strlen llbl)1 txts) (atof hplen)) ;if string length < pipe length, then: (progn ; (if ;do next if (> (*(strlen llbl)0.65 txts)(atof hplen)) ;if .65x string length < pipe length, then: (progn ; (setq llbl (strcat pstxt "\" " pmat)) ;Make 1st line of text for pipe label (setq llbl2 (strcat " SAN. SEW.")) ;Make 2nd line of text for pipe label (setq llbl3 (strcat "@ " PSLP "%")) ;Make 3rd line of text for pipe label );progn ; (progn ;Otherwise (setq llbl (strcat pstxt "\" " pmat " SAN. SEW.")) ;Make 1st line of text for pipe label (setq llbl2 (strcat " @ " PSLP "%")) ;Make 2nd line of text for pipe label );progn ; );if ; );progn ; );if ; (command ".text" "J" "MC" ltpt1 txts slpta llbl) ;place 1st (or only) text line (if (and llbl2 llbl3) ;if 2nd and 3rd text line exists, then: (progn ; (command ".text" "" llbl2) ;place 2nd text line (command ".text" "" llbl3) ;place 3rd text line );progn ; (if llbl2 ;otherwise if 2nd text line exists, then: (command ".text" "" llbl2) ;place 2nd text line nil ; );if ; );if ; (setq ltpt1 nil) ;set to nil 1st text line placement point (setq llbl nil) ;set to nil 1st text line (setq llbl2 nil) ;set to nil 2nd text line (setq llbl3 nil) ;set to nil 3rd text line );progn ; );if ; (command ".layer" "m" "C-SSWR2NOTE" "C" "2" "" "") (command ".line" tldr1 tldr2 "") ;place top leader (command ".insert" "ldraro" tldr1 (* 1.5 dimsc) "" (angtos(angle tldr1 tldr2)0)) ; (command ".solid" tldr1 (polar tldr1 (* pi 0.4375) (* 0.175 dimsc))(polar tldr1 (* pi 0.5625) (* 0.175 dimsc))"" "") ;place top arrowhead (command ".line" bldr1 bldr2 "") ;place bottom leader (command ".insert" "ldraro" bldr2 (* 1.5 dimsc) "" (angtos(angle bldr2 bldr1)0)) ; (command ".solid" bldr2 (polar bldr2 (* pi 1.4375) (* 0.175 dimsc))(polar bldr2 (* pi 1.5625) (* 0.175 dimsc))"" "") ;place bottom arrowhead (command ".layer" "m" "C-SSWR2NEWW" "C" "2" "" "") (setq pt1sv invis) (setq invis (list(car pt1)(cadr invip)(* 1000 dimsc))) ; (setq pt1s pt1) ;Save last pt1 value (setq pt2s pt2) ; (setvar "osmode" osnaps) (command ".line" invis) ; (command) ; );progn ;Return to Beginning as long as "WHILE" is true (setq pt1sv pt1) (getstyle "") );while ; (command ".layer" "s" thisla "") ;reset LAYER as before (setvar "angdir" curang) ;reset ANGDIR as before (princ) );defun ;End Function