polyline and slopes

Discussion in 'AutoCAD' started by M_Dobek, Aug 2, 2004.

  1. M_Dobek

    M_Dobek Guest

    Hi everyone.

    I've got a polyline and I want to calculate slopes between every vertex of a
    polyline and I must wrote slope at this element.
    This polyline indicate my road profile.

    any help will be greatfull.
    marcin_d
     
    M_Dobek, Aug 2, 2004
    #1
  2. M_Dobek

    Walt Engle Guest

    Assuming your polylines will be straight between vertexes, see the attached (you
    may have to add a straight line between each vertex):

    ; LBAT-A.LSP
    ; DRAWS & LABELS SLOPE SYMBOL ABOVE/LEFT OF A LINE
    (defun c:lbat-a ( / ds g:ts ent b p1 p2 p3 p4 p5 p6 p7 p8 p9 batt slope)
    (graphscr)
    (prompt "Draws & annotates SLOPE symbol above/left of a line")
    (terpri)
    (setvar "cmdecho" 0)
    (setq ds (getvar "dimscale"))
    (setq g:ts (* 0.125 ds))
    (initget 1)
    (setq ent (entsel "\nPick line: "))
    (if ent
    (progn
    (setq b (entget (car ent)))
    (if (= "LINE" (cdr (assoc 0 b)))
    (progn
    (if (<= (car (cdr (assoc 10 b)))
    (car (cdr (assoc 11 b))))
    (progn
    (setq p1 (cdr (assoc 10 b)))
    (setq p2 (cdr (assoc 11 b)))
    (setq cp (polar p1 (angle p1 p2)(/ (distance p1
    p2) 2.0)))
    (if (<= (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p2)(car p1)) (-
    (cadr p2)(cadr p1)))
    p3 (polar cp (* 0.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 pi (/ (* ds slope)
    2.0))
    p5 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 1.5 pi) ds)
    p7 (polar p3 (* 0.5 pi)(* 0.5
    g:ts))
    p8 (polar p4 (* 1.5 pi)(+ (* 0.5
    g:ts)(* 0.5 ds)))
    p9 (polar p8 pi g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    "w" "0" "" p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    "r" p9 g:ts 0 batt)
    )
    )
    (if (> (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p2)(car p1))(-
    (cadr p1)(cadr p2)))
    p3 (polar cp (* 0.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p5 (polar p3 pi (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 1.5 pi) ds)
    p7 (polar p3 (* 0.5 pi)(* 0.5
    g:ts))
    p8 (polar p4 (* 1.5 pi)(+ (* 0.5
    g:ts)(* 0.5 ds)))
    p9 (polar p8 0.0 g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    "w" "0" "" p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    p9 g:ts 0 batt)
    )
    )
    )
    )
    (if (> (car (cdr (assoc 10 b)))
    (car (cdr (assoc 11 b))))
    (progn
    (setq p1 (cdr (assoc 10 b)))
    (setq p2 (cdr (assoc 11 b)))
    (setq cp (polar p1 (angle p1 p2)(/ (distance p1
    p2) 2.0)))
    (if (<= (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p1)(car p2))(-
    (cadr p2)(cadr p1)))
    p3 (polar cp (* 0.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p5 (polar p3 pi (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 1.5 pi) ds)
    p7 (polar p3 (* 0.5 pi)(* 0.5
    g:ts))
    p8 (polar p4 (* 1.5 pi)(+ (* 0.5
    g:ts)(* 0.5 ds)))
    p9 (polar p8 0.0 g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    p9 g:ts 0 batt)
    )
    )
    (if (> (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p1)(car p2))(-
    (cadr p1)(cadr p2)))
    p3 (polar cp (* 0.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 pi (/ (* ds slope)
    2.0))
    p5 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 1.5 pi) ds)
    p7 (polar p3 (* 0.5 pi)(* 0.5
    g:ts))
    p8 (polar p4 (* 1.5 pi)(+ (* 0.5
    g:ts)(* 0.5 ds)))
    p9 (polar p8 pi g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    "r" p9 g:ts 0 batt)
    )
    )
    )
    )
    )
    )
    )
    )
    (princ)
    )

    ; LBAT-B.LSP
    ; DRAWS & LABELS SLOPE SYMBOL BELOW/RIGHT OF A LINE
    (defun c:lbat-b ( / ds g:ts ent b p1 p2 p3 p4 p5 p6 p7 p8 p9 batt slope)
    (graphscr)
    (prompt "Draws & annotates SLOPE symbol below/right line")
    (terpri)
    (setvar "cmdecho" 0)
    (setq ds (getvar "dimscale"))
    (setq g:ts (* 0.125 ds))
    (initget 1)
    (setq ent (entsel "\nPick line: "))
    (if ent
    (progn
    (setq b (entget (car ent)))
    (if (= "LINE" (cdr (assoc 0 b)))
    (progn
    (if (<= (car (cdr (assoc 10 b)))
    (car (cdr (assoc 11 b))))
    (progn
    (setq p1 (cdr (assoc 10 b)))
    (setq p2 (cdr (assoc 11 b)))
    (setq cp (polar p1 (angle p1 p2)(/ (distance p1
    p2) 2.0)))
    (if (<= (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p2)(car p1)) (-
    (cadr p2)(cadr p1)))
    p3 (polar cp (* 1.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p5 (polar p3 pi (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 0.5 pi) ds)
    p7 (polar p3 (* 1.5 pi)(* 1.5
    g:ts))
    p8 (polar p4 (* 0.5 pi)(- (* 0.5
    ds)(* 0.5 g:ts)))
    p9 (polar p8 0.0 g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    p9 g:ts 0 batt)
    ) )
    (if (> (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p2)(car p1))(-
    (cadr p1)(cadr p2)))
    p3 (polar cp (* 1.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 pi (/ (* ds slope)
    2.0))
    p5 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 0.5 pi) ds)
    p7 (polar p3 (* 1.5 pi)(* 1.5
    g:ts))
    p8 (polar p4 (* 0.5 pi)(- (* 0.5
    ds)(* 0.5 g:ts)))
    p9 (polar p8 pi g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    "r" p9 g:ts 0 batt)
    )
    )
    )
    )
    (if (> (car (cdr (assoc 10 b)))
    (car (cdr (assoc 11 b))))
    (progn
    (setq p1 (cdr (assoc 10 b)))
    (setq p2 (cdr (assoc 11 b)))
    (setq cp (polar p1 (angle p1 p2)(/ (distance p1
    p2) 2.0)))
    (if (<= (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p1)(car p2))(-
    (cadr p2)(cadr p1)))
    p3 (polar cp (* 1.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 pi (/ (* ds slope)
    2.0))
    p5 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 0.5 pi) ds)
    p7 (polar p3 (* 1.5 pi)(* 1.5
    g:ts))
    p8 (polar p4 (* 0.5 pi)(- (* 0.5
    ds)(* 0.5 g:ts)))
    p9 (polar p8 pi g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    "r" p9 g:ts 0 batt)
    )
    )
    (if (> (cadr p1)(cadr p2))
    (progn
    (setq slope (/ (- (car p1)(car p2))(-
    (cadr p1)(cadr p2)))
    p3 (polar cp (* 1.5 pi)(+ g:ts
    (* 0.5 ds)))
    p4 (polar p3 0.0 (/ (* ds slope)
    2.0))
    p5 (polar p3 pi (/ (* ds slope)
    2.0))
    p6 (polar p4 (* 0.5 pi) ds)
    p7 (polar p3 (* 1.5 pi)(* 1.5
    g:ts))
    p8 (polar p4 (* 0.5 pi)(- (* 0.5
    ds)(* 0.5 g:ts)))
    p9 (polar p8 0.0 g:ts)
    batt (/ 1.0 slope)
    batt (rtos batt 2 4)
    )
    (command "-layer" "s" "0" "" "pline" p6
    p4 p5 ""
    "text" "c" p7 g:ts 0 "1" "text"
    p9 g:ts 0 batt)
    )
    )
    )
    )
    )
    )
    )
    )
    (princ)
    copr
    )
     
    Walt Engle, Aug 2, 2004
    #2
  3. would this work when a standard exagerated scale is used? 1-40 horz and
    1-4 vertical???
     
    Kevin Lockwood, Aug 3, 2004
    #3
  4. M_Dobek

    M_Dobek Guest

    Thanks for lisp. it works great.
    but its made for lines.
    I can add a line between each vertex but when I have 3 km of road profile
    its horrible.
    Is any way to change LISP that can choose a POLYLINE and LISP could only
    pick a TEXT with value SLOPE at mid of vertexes which SLOPE=(DY/DX)*100 [%]
    ??
     
    M_Dobek, Aug 3, 2004
    #4
  5. M_Dobek

    Walt Engle Guest

    YES
     
    Walt Engle, Aug 3, 2004
    #5
  6. M_Dobek

    Walt Engle Guest

    So, even that 7Km road, draw straight lines from vertex to vertex using another
    color on sep[arate layer, then when done, turn layer off of road and delete
    straight lines.
     
    Walt Engle, Aug 3, 2004
    #6
  7. M_Dobek

    alexshein Guest

    Just a thought. Is ir simpler to calculate a slope using this:

    (defun slope (/ plo n)
    (setq plo (vlax-ename->vla-object (car (entsel "\nSelect Curve")))
    n 0)
    (while (<= n (vlax-curve-getEndParam plo))
    (setq slv (vlax-curve-getFirstDeriv plo n)
    slope (/ (car slv) (cadr slv))
    n (1+ n));setq
    );while
    );end
     
    alexshein, Aug 4, 2004
    #7
Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments (here). After that, you can post your question and our members will help you out.