I have a little slope calculator I wrote a long time ago that will calc elevations based on a starting elevation and the percent slope and multiple selection points. I use it for underground pipe calcs, but it'll work on uniformly sloped grades as well.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; Slope calculator V2.3, 1987, '88, '90, '92, '94
;; by RBCulp - Falcon Design Services, Inc.
;;
;; NO RIGHTS RESERVED; Any and all content may reproduced by any method on any medium for any reason.
;; Please, feel free to use any part found useful, interesting, enlightening or entertaining.
;; If by some chance, someone wishes to be credited for this, go right ahead.
;;
;; Falcon Design Services (FDS) provides this program "as is" and with all faults.
;; FDS specifically disclaims any implied warranty of merchantability or fitness for a particular use.
;; FDS does not warrant that the operation of the program will be uninterrupted or error free.
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun c:slcalc ()
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;Set defaults on first use
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(if (= stelev nil) (setq stelev 1200.00))
(if (= endelev nil) (setq endelev 1188.00))
(if (= slope nil) (setq slope -0.002))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;Slope Calculator based on Percent Slope
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun slcalcs ( / nstelev nslope distm dist1 nxtelev firstpt PT1 PT2)
(if (setq nstelev (getdist (strcat "Enter Starting Elevation <" (RTOS stelev) ">: ")))
(setq stelev nstelev)
)
(if (setq nslope (getreal (strcat "Enter Slope Factor (Negative For Down) <" (RTOS slope 2 8) ">: ")))
(setq slope nslope)
)
(setq FIRSTPT (getpoint "Pick point ")
PT2 (getpoint FIRSTPT "\nNext point ")
distm (distance firstpt pt2)
nxtelev (+ (* distm slope) stelev)
)
(princ (strcat "\n Distance is " (rtos (distance firstpt pt2))))
(princ (strcat "\n Slope is " (rtos (* distm slope))))
(princ (strcat "\n Elevation is " (rtos nxtelev)))
(princ (strcat "\n Elevation is " (rtos (/ nxtelev 12.0) 2 2)"'"))
(while (/= PT2 nil)
(setq PT1 PT2)
(setq PT2 (getpoint PT1 "\n\nNext point "))
(if (/= PT2 nil)
(progn
(setq dist1 (distance pt1 pt2)
distm (+ distm dist1)
nxtelev (+ (* dist1 slope) nxtelev)
)
(princ (strcat "\n Distance is " (rtos dist1)))
(princ (strcat "\n Slope is " (rtos (* dist1 slope))))
(princ (strcat "\n Elevation is " (rtos nxtelev)))
(princ (strcat "\n Elevation is " (rtos (/ nxtelev 12.0) 2 2)"'"))
(princ (strcat "\n Running Total Distance is " (rtos distm)))
)
)
)
(princ (strcat "\n Final Total Distance is " (rtos distm)))
(princ (strcat "\n Final Total Slope Change is " (rtos (* distm slope))))
(princ (strcat "\n Final Elevation is " (rtos nxtelev)))
(princ (strcat "\n Final Elevation is " (rtos (/ nxtelev 12.0) 2 2)"'"))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;Slope Calculator based on Start and End Elevations
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defun slcalce ( / nstelev nendelev distm dist1 nxtelev firstpt PT1 PT2)
(if (setq nstelev (getdist (strcat "Enter Starting Elevation <" (RTOS stelev) ">: ")))
(setq stelev nstelev)
)
(if (setq nendelev (getdist (strcat " Enter Ending Elevation <" (RTOS endelev) ">: ")))
(setq endelev nendelev)
)
(setq slope (- 0.0 (- stelev endelev))
FIRSTPT (getpoint "Pick point ")
PT2 (getpoint FIRSTPT "\nNext point ")
distm (distance firstpt pt2)
)
(princ (strcat "\n Distance is " (rtos (distance firstpt pt2))))
(while (/= PT2 nil)
(setq PT1 PT2)
(setq PT2 (getpoint PT1 "\n\nNext point "))
(if (/= PT2 nil)
(progn
(setq dist1 (distance pt1 pt2)
distm (+ distm dist1)
)
(princ (strcat "\n Distance is " (rtos dist1)))
(princ (strcat "\n Running Total Distance is " (rtos distm)))
)
)
)
(princ (strcat "\n Total Elevation Change is " (rtos slope 2 6)))
(princ (strcat "\n Final Total Distance is " (rtos distm)))
(princ (strcat "\n Percent Slope is " (rtos (/ slope distm) 2 8) " Neg.=Down Pos.=Up"))
(setq slope (/ slope distm))
(princ)
)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;Kick-off routine
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(initget "Slope Elevation")
(setq ans (getkword "\nKnown (S)lope or (E)levations < S/E >"))
(If (= ans "Slope")(slcalcs)(slcalce))
(princ)
)
I'm sure the guys here can clean it up considerably. Somewhere I have a modified version that inserts an Elevation block at each point along the way.