To --> program code (complete)



Data snippet from the user editing area for complex curve:
(program code is below the data snippet.)

-------------------------------------------------------------------------------
number                   radius            offset             weight
of                      ---------         ------------       --------
points  start   arc      X      Y         X     Y     Z      left inc   stretch

CURVDATA:
100
          90    160     18      44        0     0     8       -90   2.6   -4.0
          90    160     18      43        0     0     7       -90   2.6   -3.6
100
          90    160     18      43        0     0     7       -90   2.6   -3.6
          90    160     17.33   41        0     0     5       -90   2.6   -3.2
100
          90    160     17.33   41        0     0     5       -90   2.6   -3.2
          90    160     16      39        0     0     3       -90   2.6   -2.8
100
          90    160     16      39        0     0     3       -90   2.6   -2.8
          90    160     14      37.5      0     0     1.5     -90   2.6   -2.4
100
          90    160     14      37.5      0     0     1.5     -90   2.6   -2.4
          90    160     11.33   36        0     0     0       -90   2.6   -2
100
          90    160     11.33   36        0     0     0       -90   2.6   -2
          90    160      8.33   35        0     0     -1      -90   2.6   -1.6
100
          90    160      8.33   35        0     0     -1      -90   2.6   -1.6
          90    160       .33   33        0     0     -3      -90   2.6   -.8
999
          0      90      10     10        0     0     0        0    0      0
          0      90      10     10        0     0     0        0    0      0
Leave these two rows under the 999 in place.  Data reader needs dummy values.
-------------------------------------------------------------------------------



program code snippet for reading the above data snippet:

CZoREADDATA:

DO WHILE TIPE$ <> "WIRECOLORS:"
  INPUT #2, TIPE$
LOOP
INPUT #2, BACK, K10

DO WHILE TIPE$ <> "DARKESTCOLOR:"
  INPUT #2, TIPE$
LOOP
INPUT #2, DRKCOL

Do While TIPE$ <> "BEGIN-END:"
  Input #2, TIPE$
Loop

Input #2, XBEGINDATA, XENDDATA, YBEGINDATA, YENDDATA, ZBEGINDATA, ZENDDATA

DO WHILE TIPE$ <> "CURVDATA:"
  INPUT #2, TIPE$
LOOP

FOR RD = 1 TO 400 'up to 400 sections in accordance with DIM statements

 INPUT #2, CURVPOINTS(RD)

 INPUT #2, DEGB(RD), ARCB(RD), RADXB(RD), RADYB(RD)
 INPUT #2, XB(RD), YB(RD), ZB(RD), LB(RD), INCB(RD), STREB(RD)

 INPUT #2, DEGT(RD), ARCT(RD), RADXT(RD), RADYT(RD)
 INPUT #2, XT(RD), YT(RD), ZT(RD), LT(RD), INCT(RD), STRET(RD)

 IF CURVPOINTS(RD) = 999 THEN EXIT FOR

  CURVEFINE(RD) = (CURVPOINTS(RD)) * .5
  CURVINC(RD) = CURVEFINE(RD) - 1
  PTPAIRS(RD) = CURVEFINE(RD) * 2
  NP6 = NP6 + PTPAIRS(RD)

 COUNT = COUNT + 1

NEXT RD

'points

FOR RD = 1 TO COUNT
'bottom
  DEG1 = DEGB(RD): DEG2 = DEG1 + ARCB(RD)
  DEG1 = (DEG1 * 3.14159) / 180: DEG2 = (DEG2 * 3.14159) / 180
  ZDEG = LB(RD)
   FOR INC = 0 TO CURVINC(RD)
     CIRC = CIRC + 1
     X(CIRC) = (RADXB(RD) * COS(DEG1 + (INC / CURVINC(RD)) * (DEG1 - DEG2))) + XB(RD)
     Y(CIRC) = (RADYB(RD) * SIN(DEG1 + (INC / CURVINC(RD)) * (DEG1 - DEG2))) + YB(RD)
        IF INCB(RD) = 0 THEN Z(CIRC) = ZB(RD): GOTO CZo10
        ZDEG = ZDEG - INCB(RD)
        ZRAD = STREB(RD) * (COS((ZDEG * 3.14159) / 180))
        Z(CIRC) = (-1 * (ZRAD)) + ZB(RD)
CZo10:
        XR(CIRC) = X(CIRC): YR(CIRC) = Y(CIRC): ZR(CIRC) = Z(CIRC)
   NEXT INC

'top
  DEG1 = DEGT(RD): DEG2 = DEG1 + ARCT(RD)
  DEG1 = (DEG1 * 3.14159) / 180: DEG2 = (DEG2 * 3.14159) / 180
  ZDEG = LT(RD)
   FOR INC = 0 TO CURVINC(RD)
     CIRC = CIRC + 1
     X(CIRC) = (RADXT(RD) * COS(DEG1 + (INC / CURVINC(RD)) * (DEG1 - DEG2))) + XT(RD)
     Y(CIRC) = (RADYT(RD) * SIN(DEG1 + (INC / CURVINC(RD)) * (DEG1 - DEG2))) + YT(RD)
        IF INCT(RD) = 0 THEN Z(CIRC) = ZT(RD): GOTO CZo20
        ZDEG = ZDEG - INCT(RD)
        ZRAD = STRET(RD) * (COS((ZDEG * 3.14159) / 180))
        Z(CIRC) = (-1 * (ZRAD)) + ZT(RD)
CZo20:
        XR(CIRC) = X(CIRC): YR(CIRC) = Y(CIRC): ZR(CIRC) = Z(CIRC)
   NEXT INC
NEXT RD

'GOSUB CONNECT

CONNECT:

'points

FOR RD = 1 TO COUNT
  IF RD = 1 THEN CP = 1: GOTO C30
  RPREVIOUS = RD - 1
  CP = CP + PTPAIRS(RPREVIOUS)
C30:
  FOR CNT = 1 TO CURVEFINE(RD)
    FP(RL) = CP: SP(RL) = CP + CURVEFINE(RD): RL = RL + 1: CP = CP + 1
  NEXT CNT
  
  CP = CP - CURVEFINE(RD)
  FOR CNT = 1 TO CURVINC(RD)
     FP(RL) = CP: SP(RL) = CP + 1: RL = RL + 1: CP = CP + 1
  NEXT CNT

  CP = CP + 1
  FOR CNT = 1 TO CURVINC(RD)
     FP(RL) = CP: SP(RL) = CP + 1: RL = RL + 1: CP = CP + 1
  NEXT CNT
     
  CP = (CP - PTPAIRS(RD)) + 1
NEXT RD

'planes

FOR RD = 1 TO COUNT
  IF RD = 1 THEN PP = 1: RPL = 1: GOTO C40
  RPREVIOUS = RD - 1
  PP = PP + CURVEFINE(RPREVIOUS): RPL = RPL + CURVEFINE(RPREVIOUS)
C40:
      FOR CNT = 1 TO CURVINC(RD)
       B1(RPL) = PP: T1(RPL) = PP + 1
       B2(RPL) = PP + CURVEFINE(RD): T2(RPL) = PP + CURVEFINE(RD) + 1
       RPL = RPL + 1: PP = PP + 1
      NEXT CNT
      PP = PP + 1: RPL = RPL + 1
NEXT RD

RL = RL - 2
NL10 = RL - (NL1 + NL2 + NL3 + NL4 + NL5 + NL6 + NL7 + NL8 + NL9)

RETURN

RL = RL - 2
NL10 = RL - (NL1 + NL2 + NL3 + NL4 + NL5 + NL6 + NL7 + NL8 + NL9)

RETURN

CZoERR1:

GOSUB ERRORCODES

  CLOSE #2
  READATA = 3
  GOTO MAIN



To --> program code (complete)