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???
Any ideas???
INTELLIGENT WORK FORUMS
FOR ENGINEERING PROFESSIONALS Come Join Us!Are you an
Engineering professional? Join Eng-Tips Forums!
*Eng-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail. Posting GuidelinesJobs |
|
RE: 3D Ramp model - ACAD
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
RE: 3D Ramp model - ACAD
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
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
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
http://www.cadenceweb.com/code/1997/oct-1997.htm
RE: 3D Ramp model - ACAD
didnt know that learn something new everyday
if everyone helps everybody the world will be a better place