rcb007 Posted June 22, 2022 Posted June 22, 2022 I know in civil3d you can perform a stepped offset. I am using vanilla autocad. I am trying to find a routine in which i can offset a pond from the waters edge. I did stumble upon this link, however I was not able to get the routine to work. (defun c:PCA () ;;https://forums.augi.com/showthread.php?104298-Pond-contours (setq osd (getreal "\nPond Side Slope (H:1):")) ;Specify the side slope of the pond (setq depth (getreal "\nPond Depth:")) ;Specify the depth of the pond (setq pndtob (entsel "\nSelect Top of Bank")) ;Select a closed polyline (setq pndcnt (getpoint "\nSelect Approxiamte Center of Pond:")) ;designates which side to make offset (setq rerun 1) (while (<= rerun depth) (setq pndcnt (getpoint pndcnt)) (command "offset" osd pndtob pndcnt) (command "e") ;; (setq pndtob (entsel(entget(entlast)))) (setq pndtob (entlast)) (setq rerun (1+ rerun)) ) ) Maybe there is an easier way to write this. Thank you for help. Quote
mhupp Posted June 22, 2022 Posted June 22, 2022 (edited) This should fix it. added an option for the center of pond point still ask for it. But you can right click to get the geocenter for the polyline picked right before. this will work for most boundary's. Odd shaped ones should be picked by hand. ;;----------------------------------------------------------------------------;; ;; POND OFFSET TOPO (defun c:PCA (/ slope depth pndtob pndcnt pt c_pt) (setq slope (getdist "\nPond Side Slope 1:# ")) ;Specify the side slope of the pond (setq depth (getdist "\nPond Depth: ")) ;Specify the depth of the pond (setq pndtob (car (entsel "\nSelect Top of Bank: "))) ;Select a closed polyline (setq pndcnt (osnap (vlax-curve-getStartPoint pndtob) "gcen")) (entmake (list '(0 . "POINT") (cons 10 pndcnt))) (setq pt (entlast)) (or (setq pndcnt (getpoint "\nSelect Approxiamte Center of Pond or [GeoCenter]: ")) (setq pndcnt (osnap (vlax-curve-getStartPoint pndtob) "gcen"))) (setq c_pt (vlax-curve-getclosestpointto (vlax-ename->vla-object pndtob) pndcnt)) (if (< (setq dist (fix (/ (distance pndcnt c_pt) slope))) depth) (prompt (strcat "\nMaximum Depth with slope [" (itoa dist) "]")) (progn (setvar 'cmdecho 0) (repeat (fix depth) (command "offset" slope pndtob pndcnt "_E") (setq pndtob (entlast)) (setq elv (assoc 38 (setq plg (entget pndtob)))) (entmod (subst (cons 38 (1- (cdr elv))) elv plg)) ) (setvar 'cmdecho 1) ) ) (entdel pt) (princ) ) Edited June 25, 2022 by mhupp updated code 1 Quote
rcb007 Posted June 24, 2022 Author Posted June 24, 2022 Thank you very much for fixing it. Could I ask how to make the polylines have an elevation to them? It seems to offset as its programed; just not sure about the z axis. Again, Thank you. Quote
mhupp Posted June 25, 2022 Posted June 25, 2022 (edited) 13 hours ago, rcb007 said: Thank you very much for fixing it. Could I ask how to make the polylines have an elevation to them? It seems to offset as its programed; just not sure about the z axis. Again, Thank you. Sorry the other lisp didn't account for elevation either so I didn't think to add it since I don't work with topo drawings. also two aded two features. 1 it adds a temp point to where the geocenter of the pond is. allowing you to visually see and accept it or pick a better one. and depth error checking. from that point it will find the closest distance to the edge of pthe pond. do a little calculation and if the depth is to deep will give you a warning. : PCA Pond Side Slope [1:#] 15 Pond Depth: 50 Select Top of Bank Select Approxiamte Center of Pond or [GeoCenter]: Maximum Depth with slope [24] --edit you might have to edit this line to get the right elevation change depending on what units your using. (entmod (subst (cons 38 (1- (cdr elv))) elv plg)) Edited June 25, 2022 by mhupp Quote
rcb007 Posted June 27, 2022 Author Posted June 27, 2022 Boom. you nailed it. Thanks for the update. it works great! Quote
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.