home *** CD-ROM | disk | FTP | other *** search
- REM name: cirlnend.cdl
-
- REM date: 020589 simon i
-
- REM task: creates circles at the end of a line for cylinder
- REM representation
-
- REM -----------------------------------------------
-
- CLEAR
- ARRAY vm[9]
- minval = .00005
- rad = 1.0
-
- :indln
- REM *** get axis line
- SET mask,2
- GETENT "Indicate axis line", etype
- IF (@KEY <= -2)
- GOTO exit
-
- p1wx = @FLTDAT[0]
- p1wy = @FLTDAT[1]
- p1wz = @FLTDAT[2]
- p2wx = @FLTDAT[3]
- p2wy = @FLTDAT[4]
- p2wz = @FLTDAT[5]
-
- REM *** define view along axis line
- dx = p2wx - p1wx
- dy = p2wy - p1wy
- dz = p2wz - p1wz
- magn = sqrt(dx*dx + dy*dy + dz*dz)
- IF (magn < minval)
- GOTO message1
- vm[2] = dx/magn
- vm[5] = dy/magn
- vm[8] = dz/magn
-
- CALL dotprod, vm[2],vm[5],vm[8],1,0,0,dotx
- CALL dotprod, vm[2],vm[5],vm[8],0,1,0,doty
- IF (abs(dotx) <= abs(doty))
- GOTO crossx
- GOTO crossy
-
- :crossx
- CALL cross, dx,dy,dz,vm[2],vm[5],vm[8],1,0,0
- magn = sqrt(dx*dx + dy*dy + dz*dz)
- vm[0] = dx/magn
- vm[3] = dy/magn
- vm[6] = dz/magn
- GOTO y_axis
-
- :crossy
- CALL cross, dx,dy,dz,vm[2],vm[5],vm[8],0,1,0
- magn = sqrt(dx*dx + dy*dy + dz*dz)
- vm[0] = dx/magn
- vm[3] = dy/magn
- vm[6] = dz/magn
-
- :y_axis
- CALL cross, vm[1],vm[4],vm[7],vm[2],vm[5],vm[8],vm[0],vm[3],vm[6]
- VIEW 1,vm[0],vm[1],vm[2],vm[3],vm[4],vm[5],vm[6],vm[7],vm[8]
-
- :getrad
- REM *** get cylinder radius
- GETFLT "Enter cylinder radius (%f) =",rad,rad
- ON (@KEY + 3) GOTO exit,indln,
-
- :done
- REM * map end points to view
- CALL xfmwv,vm,p1wx,p1wy,p1wz,p1vx,p1vy,p1vz
- CALL xfmwv,vm,p2wx,p2wy,p2wz,p2vx,p2vy,p2vz
-
- CIRCLE p1vx,p1vy,p1vz,rad,1
- CIRCLE p2vx,p2vy,p2vz,rad,1
- GOTO indln
-
- :error
- prompt " Points are coincidental. Please, select again"
- wait 2
- GOTO indln
-
- :exit
- SET mask
- EXIT