home *** CD-ROM | disk | FTP | other *** search
/ Piper's Pit BBS/FTP: ibm 0010 - 0019 / ibm0010-0019 / ibm0010.tar / ibm0010 / CADKEY_C.ZIP / CADKEY14.ZIP / CDL / TWOPTSVW.CDL < prev    next >
Encoding:
Text File  |  1989-03-09  |  1.9 KB  |  84 lines

  1. REM     name:     twoptsvw.cdl
  2.  
  3. REM     date:     030589 simon izraelevitz
  4.  
  5. REM     task:     Creates Line of Sight view along two given points
  6. REM               The positive side of the view is the side of the first
  7. REM               selected point.
  8.  
  9. REM     -----------------------------------------------
  10.  
  11.    CLEAR
  12.    ARRAY  vm[9]
  13.    minval = .00005
  14.  
  15.    SET mask,1
  16. :ind_pt1
  17. REM     *** get first point
  18.    defpos  = 3
  19.    GETPOS  "Indicate first point", defpos
  20.    IF (@KEY <= -2)
  21.       GOTO exit
  22.    p1wx = @XWORLD
  23.    p1wy = @YWORLD
  24.    p1wz = @ZWORLD
  25.  
  26. :ind_pt2
  27. REM     *** get second point
  28.    defpos  = @KEY
  29.    GETPOS  "Indicate second point", defpos
  30.    ON (@KEY + 3) GOTO exit,ind_pt1,
  31.    p2wx = @XWORLD
  32.    p2wy = @YWORLD
  33.    p2wz = @ZWORLD
  34.  
  35. :vect_def
  36. REM     *** define view along axis line
  37.    dx = p2wx - p1wx
  38.    dy = p2wy - p1wy
  39.    dz = p2wz - p1wz
  40.    magn = sqrt(dx*dx + dy*dy + dz*dz)
  41.    IF (magn < minval)
  42.       GOTO error1
  43.    vm[2]   = dx/magn
  44.    vm[5]   = dy/magn
  45.    vm[8]   = dz/magn
  46.  
  47.    CALL dotprod, vm[2],vm[5],vm[8],1,0,0,dotx
  48.    CALL dotprod, vm[2],vm[5],vm[8],0,1,0,doty
  49.    IF (abs(dotx) <= abs(doty))
  50.       GOTO crossx
  51.    GOTO crossy
  52.  
  53. :crossx
  54.    CALL cross, dx,dy,dz,vm[2],vm[5],vm[8],1,0,0
  55.    magn  = sqrt(dx*dx + dy*dy + dz*dz)
  56.    vm[0] = dx/magn
  57.    vm[3] = dy/magn
  58.    vm[6] = dz/magn
  59.    GOTO y_axis 
  60.  
  61. :crossy
  62.    CALL cross, dx,dy,dz,vm[2],vm[5],vm[8],0,1,0
  63.    magn  = sqrt(dx*dx + dy*dy + dz*dz)
  64.    vm[0] = dx/magn
  65.    vm[3] = dy/magn
  66.    vm[6] = dz/magn
  67.  
  68. :y_axis
  69.    CALL cross, vm[1],vm[4],vm[7],vm[2],vm[5],vm[8],vm[0],vm[3],vm[6]
  70.    VIEW    1,vm[0],vm[1],vm[2],vm[3],vm[4],vm[5],vm[6],vm[7],vm[8]
  71.  
  72.    PROMPT  "View number %d has been created ...",@LASTVW
  73.    WAIT 2
  74.    GOTO exit
  75.  
  76. :error1
  77.    PROMPT " Points are coincidental. Please, select again"
  78.    WAIT 2
  79.    GOTO ind_pt1
  80.  
  81. :exit
  82.    SET mask
  83.    EXIT
  84.