×
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS

Log In

Come Join Us!

Are you an
Engineering professional?
Join Eng-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

3D Ramp model - ACAD

3D Ramp model - ACAD

3D Ramp model - ACAD

(OP)
Trying to model a curved disabled access ramp in ACAD....No idea how!! Profile of ramp must remain horizontal while rising..

Any ideas???

RE: 3D Ramp model - ACAD

Are you doing this for your benefit or for a project?  I work with bridges, large and small; curved and not.  We have had good results with 2-D drawings showing plan views and elevations along with all the associated curve dimensions etc.

I know this doesn't help how to draw it in 3-D but I thought I would post anyway to see if this might reduce your burden.

RE: 3D Ramp model - ACAD

(OP)
Its for a project, Already have all plans and elevations etc but am building model at request of client. Ive done a heck of a lot of modelling ove the past years, but this is the first time that a curved ramp has come up....I have no idea how to do it!! The geometry seems impossible to model on ACAD due to lack of helix support!

RE: 3D Ramp model - ACAD

What do you mean curved
Are you talking about like a spiral staircase or are you talking about a wedge shaped object with a cylinder subtracted from it

if everyone helps everybody the world will be a better place

RE: 3D Ramp model - ACAD

Here is a lsp routine that creates helix geometry hope this works for you
Once you have the helix, you should be able to use the 3dpoly as your extrusion path.
;;-----------------------------------------------
;; Programmer's Toolbox  #9-97
;; Bill Kramer
;;
;; Draw a Helix type spiral with a 3D polyline.
;;
;;------------------------------------------------------
(if (null (findfile "HELIX.DCL"))
  (prompt "\nFile HELIX.DCL must be in search path!"))
;;------------------------------------------------------
;;
;; Listing 1 :  Call back function for radio buttons
;;
(defun HELIX_RADIO (key)
  (cond
    ((= Key "CON") ;;constant radius
       (setq R2D RAD
             RID 0.0)
       (set_tile "R2D" (rtos R2D))
       (set_tile "RID" (rtos RID))
       (mode_tile "R2D" 1)
       (mode_tile "RID" 1)
    )
    ((= KEY "R2") ;;ending radius
       (setq RID (/ (- R2D RAD) REV))
       (mode_tile "R2D" 0)
       (mode_tile "RID" 1)
       (set_tile "RID" (rtos RID))
       (mode_tile "R2D" 2)
    )
    ((= Key "RI") ;incremental radius
       (setq R2D (+ RAD (* RID REV)))
       (mode_tile "R2D" 1)
       (mode_tile "RID" 0)
       (set_tile "R2D" (rtos R2D))
       (mode_tile "RID" 2)
    )
 )
)
;;-----------------------------------------------
;;
;; Listing 2 - the DCL data file- see HELIX.DCL
;;
;;-----------------------------------------------
;;
;; Listing 3:  Call Back function for edit boxes
;;
(defun HELIX_1 (Key Val)
  (cond
    ((and (= Key "RAD") (> (atof Val) 0.0))
         (setq RAD (atof Val))
         (set_tile "RAD" (rtos RAD))
         (if (= (get_tile "CON") "1") (progn
             (setq R2D RAD)
             (set_tile "R2D" (rtos R2D))
         ))
         (if (= (get_tile "RI") "1") (progn
             (setq R2D (+ RAD (* RID REV)))
             (set_tile "R2D" (rtos R2D))
         ))
         (if (= (get_tile "R2") "1") (progn
             (setq RID (/ (- R2D RAD) REV)
             )
             (set_tile "RID" (rtos RID))
         ))
    )
    ((= Key "ANG")
         (setq ANG (angtof Val))
         (set_tile "ANG" (angtos ANG))
    )
    ((= Key "HGT")
         (setq HGT (atof Val))
         (set_tile "HGT" (rtos HGT))
    )
    ((= Key "R2D")
         (setq R2D (atof Val)
               RID (/ (- R2D RAD) REV)
         )
         (set_tile "R2D" (rtos R2D))
         (set_tile "RID" (rtos RID))
    )
    ((= Key "RID")
         (setq RID (atof Val)
               R2D (+ RAD (* RID REV))
         )
         (set_tile "RID" (rtos RID))
         (set_tile "R2D" (rtos R2D))
    )
    ((or (= Key "RES") (= Key "RSS"))
         (setq RES (atoi Val))
         (set_tile "RES" (itoa RES))
         (set_tile "RSS" (itoa RES))
    )
    ((= Key "REV")
         (setq REV (atof Val))
         (set_tile "REV" (rtos REV))
         (if (= (get_tile "RI") "1") (progn
             (setq R2D (+ RAD (* RID REV)))
             (set_tile "R2D" (rtos R2D))
         ))
         (if (= (get_tile "R2") "1") (progn
             (setq RID (/ (- R2D RAD) REV))
             (set_tile "RID" (rtos RID))
         ))
    )
  )
  (HELIX_SEE)
)
;;-----------------------------------------------
;;
;; Listing 4 : Intialize dialog settings
;;
(defun HELIX_INIT ()
  (setq RES 25
        REV 2.0
        HGT 0.25
        ANG 0.0
        RAD 1.0
        RID 0.0
        R2D 1.0
  )
  (set_tile "RES" (itoa RES))
  (set_tile "RSS" (itoa RES))
  (set_tile "REV" (rtos REV))
  (set_tile "HGT" (rtos HGT))
  (set_tile "ANG" (angtos ANG))
  (set_tile "RAD" (rtos RAD))
  (set_tile "R2D" (rtos R2D))
  (set_tile "RID" (rtos RID))
  (set_tile "CON" "1")
)
;;-----------------------------------------------
;; Listing 5  : Load and run dialog box.
;;
(defun HELIX_IN ()
   (setq DH (load_dialog "HELIX.DCL"))
   (if (or (null DH)
           (null (new_dialog "HELIX" DH)))
      (alert "File HELIX.DCL missing!")
      (progn ;;else file is okay, proceed
         (HELIX_INIT)
         (HELIX_SEE)
         (setq TMP (start_dialog))
         (done_dialog DH)
         (if (= TMP 1) (progn
            (setq CEN
              (getpoint
                "\nLocate HELIX center point: "))
            (if CEN 'T nil)
         ))
      )
   )
)
;;-----------------------------------------------
;;
;; Listing 6 - The Helix Generator
;;
(defun C:HELIX (
    /
    REV   ;;number of revolutions
    RES   ;;resolution/ #of vertices
    CEN   ;;center point
    RAD   ;;radius
    RID   ;;radius increment
    R2D   ;;ending radius
    ANG   ;;angle
    HGT   ;;Z change / revolution
    A360  ;; 2 * PI
    Z     ;;Z value of each point
    AI    ;;angle increment
    ZI    ;;Z increment
    RI    ;;rev counter increment/vertex
    RDI   ;;radius increment
    CX    ;;center point X
    CY    ;;center point Y
    R     ;;revolutions counter
    PP    ;;perentage over run at end
    )
(if (HELIX_IN) (progn
  (setq Z (caddr CEN)
        A360 (* 2.0 PI)
        AI (/ A360 RES)
        ZI (/ HGT RES)
        RDI (/ RID RES)
        RI (/ 1.0 RES)
        R 0.0
        CX (car CEN)
        CY (cadr CEN)
  )
  (prompt "\nGenerating helix...")
  (entmake '((0 . "POLYLINE")
             (10 0.0 0.0 0.0)
             (70 . 8)
             (8 . "0")
             (66 . 1)
  ))
  (while (< R REV)
     (setq X (+ CX (* RAD (cos ANG)))
           Y (+ CY (* RAD (sin ANG))))
     (entmake (list
        '(0 . "VERTEX")
         (list 10 X Y Z)
         '(8 . "0")
         '(42 . 0.0)
         '(70 . 32)
     ))
     (setq ANG (rem (+ ANG AI) A360)
           Z (+ Z ZI)
           R (+ R RI)
           RAD (+ RAD RDI)
     )
  )
  (if (> R REV) (progn
     (setq PP (/ (- R REV) RI)
           ANG (- ANG (* PP AI))
           RAD R2D
           Z (- Z (* PP ZI))
     )
     (entmake (list
        '(0 . "VERTEX")
        (list 10 (+ CX (* RAD (cos ANG)))
                 (+ CY (* RAD (sin ANG)))
                 Z)
        '(8 . "0")
        '(42 . 0.0)
        '(70 . 32)
     ))
  ))
  (entmake '((0 . "SEQEND")))
))
(princ)
)
;;-----------------------------------------------
;;
;; Listing 7 : View helix in image box
;;
(defun HELIX_SEE (
   /
   RES    ;;resolution, set to 10 for image
   ANGL   ;;angle
   DX     ;;DimX multiplier
   DY     ;;DimY multiplier
   DX2    ;;Center of X
   DY2    ;;Center of Y
   DYS    ;;DimY size
   SN     ;;sine of 30
   CS     ;;cosine of 30
   DD     ;;Multiplier
   Z      ;;Z value
   A360   ;;360 degrees in radians
   AI     ;;Angle increment
   ZI     ;;Z increment
   RDI    ;;Radius increment
   RI     ;;Revolution increment
   R      ;;Revolution counter
   P1X    ;;Point 1 X
   P1Y    ;;Point 1 Y
   P2X    ;;Point 2 X
   P2Y    ;;Point 2 Y
   RD     ;;Radius work value
   )
  ;;
  ;; determine scale factor to use for world
  ;; units to image tile coordinates.
  ;;
  (setq DX (dimX_tile "SEE")
        DX2 (fix (/ DX 2.0)) ;;middle of X
        DY (dimY_tile "SEE")
        DY2 (fix (/ DY 2.0)) ;;middle of Y
        DYS (- DY 10)        ;;saved Y size
        SN (sin (/ PI 6.0))  ;;30 degree tilt
        CS (cos (/ PI 6.0))  ;;30 degree tilt
        DX (/ DX   ;;ratio of tile to world in X
              (+ 1
                 (* 2.0 (max RAD R2D))) )
        DY (/ DY   ;;ratio of tile to world in Y
              (+ 1
                 (* CS HGT REV)
                 (* SN (max RAD R2D))))
        DD (min DX DY)  ;;use min value
        RES 10  ;;tile resolution fixed at 10
        Z 0.0   ;;Z offset start at zero
        A360 (* 2.0 PI) ;;full circle
        AI (/ A360 RES) ;;increments of angle
        ZI (/ HGT RES)  ;;increments of Z
        RDI (/ RID RES) ;;increments of radius
        RI (/ 1.0 RES)  ;;increments of circle
        R 0.0           ;;start of circle
        P1X (+ DX2   ;;starting X
               (fix (* RAD (cos ANG) DD)))
        P1Y (- DYS   ;;starting Y
               (+ (fix (* SN RAD (sin ANG) DD))
                  (fix (* CS Z DD))) )
        ANGL (+ ANG AI)  ;;starting angle
        Z (+ Z ZI)       ;;starting Z
        RD RAD           ;;starting radius
  )
  ;;
  ;; Open image tile and clear it.
  ;;
  (start_image "SEE")
  (fill_image
     0 0
     (dimX_Tile "SEE")
     (dimY_Tile "SEE")
     0)
  ;;
  ;; Output the image tile vectors in loop
  ;;
  (while (< R REV)
     (setq P2X (+ DX2 ;;next point X
                  (fix (* RD (cos ANGL) DD)))
           P2Y (- DYS ;;next point Y
                  (+ (fix (* SN RD (sin ANGL) DD))
                     (fix (* CS Z DD))))
     )
     ;; shift? then output
     (if (or (/= P1X P2X) (/= P1Y P2Y)) (progn
        (vector_image P1X P1Y P2X P2Y 2)
        (setq P1X P2X
              P1Y P2Y)
     ))
     ;; next position
     (setq ANGL (rem (+ ANGL AI) A360)
           Z (+ Z ZI)
           R (+ R RI)
           RD (+ RD RDI)
     )
  )
  ;;
  ;; do last segment
  ;;
  (if (> R REV) (progn
     (setq PP (/ (- R REV) RI)
           ANGL (- ANGL (* PP AI))
           RD R2D
           Z (- Z (* PP ZI))
           P2X (+ DX2 (fix (* DD RD (cos ANGL))))
           P2Y (- DYS
                  (+ (fix (* SN DD RD (sin ANGL)))
                     (fix (* CS Z DD))))
     )
     (if (or (/= P1X P2X) (/= P1Y P2Y))
        (vector_image P1X P1Y P2X P2Y 2)
     )
  ))
  ;;
  ;; close image tile and exit function
  ;;
  (end_image)
)
;;-----------------------------------------------
(princ)

RE: 3D Ramp model - ACAD

if you just have Acad 2k up no you cant use the 3d poly as an extrusion path

i made threads for a screw a few years ago and the way i did it was used a torus split it into peices and then 3d rotated them and put it bac together with union

if everyone helps everybody the world will be a better place

RE: 3D Ramp model - ACAD

Actually, you are mistaken on this one. I had to give it a try just to find out. I used the helix lisp file to create a 3d poly, then I created a rectangle, did a 3drotate 90, then extruded along the path. It worked great, and all I am using is barebones A2K in Windows 2K. I did make one grievous error. this lisp file requires the help of a DCl file. I grabed this from cadence web site a couple of years ago. I did a search and found the archive again. you can locate it at    
http://www.cadenceweb.com/code/1997/oct-1997.htm

RE: 3D Ramp model - ACAD

it might have been cause at the time we were using coplex shapes but thats interesting hmmm
didnt know that learn something new everyday

if everyone helps everybody the world will be a better place

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Eng-Tips Forums free from inappropriate posts.
The Eng-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Eng-Tips forums is a member-only feature.

Click Here to join Eng-Tips and talk with other members!


Resources