DEFLNG W
DIM SemiPerm$(100): DIM NombreSemiPerm$(100)
NombreArcSemiPerm$ = ""
Pi = 4 * ATN(1)
GOSUB Bienvenida
GOSUB ArchivoEscrito
GOSUB Principal
GOSUB CierraArchivo
END
ArchivoEscrito:
CLS
OKGrabacion$ = "no"
WHILE OKGrabacion$ <> "s¡"
INPUT "Complete DOS name of the file to save "; ArchivoEscrito$
OPEN "R", #2, ArchivoEscrito$, 1
FIELD #2, 1 AS e$
IF LOF(2) <> 0 THEN
BEEP: PRINT : PRINT "A file with that name already exists. Erase (E), Try again ?"
GOSUB EsperaTecla
IF Tecla$ = "e" OR Tecla$ = "E" THEN
CLOSE #2
KILL ArchivoEscrito$
OPEN "R", #2, ArchivoEscrito$, 1
FIELD #2, 1 AS e$
OKGrabacion$ = "s¡"
ELSE
CLOSE #2
END IF
ELSE
OKGrabacion$ = "s¡"
END IF
WEND
RETURN
ArmAsiento:
Nombre$ = "ArmAsiento": GOSUB GrabaNombre
Tipo$ = "cubos"
GOSUB CabezaTipo
x = xPapa
y = (yBravo * Hotel / yAlfa) - Quebec
z = 2 * AnchoJamba
Posicion$ = "so"
TamaX = xOscar - xPapa
TamaY = Quebec
TamaZ = AnchoEjeAsiento
GOSUB GrabaUnObjeto
z = 2 * AnchoJamba + Golf - AnchoEjeAsiento
GOSUB GrabaUnObjeto
x = xPapa
y = (yBravo * Hotel / yAlfa) - AnchoEjeAsiento
z = 2 * AnchoJamba + AnchoEjeAsiento
Posicion$ = "so"
TamaX = xOscar - xPapa
TamaY = AnchoEjeAsiento
TamaZ = Quebec - AnchoEjeAsiento
Exclusion$ = "inf"
GOSUB GrabaUnObjeto
z = 2 * AnchoJamba + Golf - Quebec
Exclusion$ = "sup"
GOSUB GrabaUnObjeto
GOSUB ColaTipo
RETURN
Armazon:
Nombre$ = "Armazon": GOSUB GrabaNombre
Tipo$ = "cilindros"
GOSUB CabezaTipo
x = xFoxtrot * Hotel / yAlfa: y = yFoxtrot * Hotel / yAlfa
z = 2 * AnchoJamba
Posicion$ = "c"
TamaX = AnchoJamba: TamaY = AnchoJamba: TamaZ = Golf
Exclusion$ = "inf,sup"
GOSUB GrabaUnObjeto
CoordDerecha = xBravo - xEcho: CoordDelante = yBravo - yEcho
GOSUB DeRectAPolar
AngDespRota = AngAntRota: DistParaRota = India
GOSUB DePolarARect
xEchoPrime = xEcho * Hotel / yAlfa + CoordDerecha2
yEchoPrime = yEcho * Hotel / yAlfa + CoordDelante2
x = xEchoPrime: y = yEchoPrime
z = 2 * AnchoJamba
Posicion$ = "c"
TamaX = AnchoJamba: TamaY = AnchoJamba: TamaZ = Golf
Exclusion$ = "inf,sup"
GOSUB GrabaUnObjeto
CoordDerecha = xCharlie - xDelta: CoordDelante = yCharlie - yDelta
GOSUB DeRectAPolar
AngDespRota = AngAntRota: DistParaRota = India
GOSUB DePolarARect
xDeltaPrime = xDelta * Hotel / yAlfa + CoordDerecha2
yDeltaPrime = yDelta * Hotel / yAlfa + CoordDelante2
x = xDeltaPrime: y = yDeltaPrime
z = AnchoJamba
Posicion$ = "c"
TamaX = AnchoJamba: TamaY = AnchoJamba: TamaZ = Golf + 2 * AnchoJamba
Exclusion$ = "inf,sup"
GOSUB GrabaUnObjeto
GOSUB ColaTipo
RETURN
Asiento:
Nombre$ = "Asiento": GOSUB GrabaNombre
Color$ = ColorMadera$: GOSUB GrabaColor
Tipo$ = "cubos"
GOSUB CabezaTipo
FOR Plancha = 1 TO Romeo
x = xOscar - ((Plancha - 1) * (Mike2 + November2))
y = yBravo * Hotel / yAlfa
z = 0 - Juliet + 2 * AnchoJamba
Posicion$ = "se"
TamaX = Mike2
TamaY = AnchoPlancha
TamaZ = Golf + 2 * Juliet
GOSUB GrabaUnObjeto
NEXT Plancha
GOSUB ColaTipo
RETURN
Bienvenida:
CLS : COLOR 7, 0
PRINT " This program produces a chair in the CBB format."
PRINT
PRINT " Copyright Jean-Luc Ancey, February 22nd, 1997.": PRINT
PRINT " Strike a key when ready."
GOSUB EsperaTecla
RETURN
CabezaTipo:
LineaEscrita$ = "<" + Tipo$ + ">": GOSUB GrabaUnaLinea
RETURN
CierraArchivo:
wByteEscrito = wByteEscrito + 1
LSET e$ = CHR$(26)
PUT #2, wByteEscrito
CLOSE
RETURN
ColaTipo:
LineaEscrita$ = "" + Tipo$ + ">": GOSUB GrabaUnaLinea
RETURN
DePolarARect:
CoordDerecha2 = COS(AngDespRota) * DistParaRota
CoordDelante2 = SIN(AngDespRota) * DistParaRota
RETURN
DeRectAPolar:
IF CoordDerecha = 0 AND CoordDelante = 0 THEN
AngAntRota = 0
ELSE
IF ABS(CoordDerecha) >= ABS(CoordDelante) THEN
AngAntRota = ATN(CoordDelante / CoordDerecha)
IF CoordDerecha < 0 THEN AngAntRota = AngAntRota + Pi
ELSE
AngAntRota = ATN(CoordDerecha / CoordDelante)
IF CoordDelante < 0 THEN AngAntRota = AngAntRota + Pi
AngAntRota = Pi / 2 - AngAntRota
END IF
END IF
DistParaRota = SQR(CoordDerecha * CoordDerecha + CoordDelante * CoordDelante)
WHILE AngAntRota > Pi
AngAntRota = AngAntRota - 2 * Pi
WEND
RETURN
EsperaTecla:
Tecla$ = ""
WHILE Tecla$ = ""
Tecla$ = INKEY$
WEND
RETURN
FinModifCoord:
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
GrabaColor:
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = Color$: GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
GrabaNombre:
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = Nombre$: GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
GrabaUnaLinea:
PRINT LineaEscrita$
LineaEscrita$ = LineaEscrita$ + CHR$(13) + CHR$(10)
FOR a = 1 TO LEN(LineaEscrita$)
wByteEscrito = wByteEscrito + 1
LSET e$ = MID$(LineaEscrita$, a, 1)
PUT #2, wByteEscrito
NEXT a
LineaEscrita$ = ""
RETURN
GrabaUnObjeto:
LineaEscrita$ = "Posi "
Valor = x: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
Valor = y: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
Valor = z: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + "," + Posicion$ + " Tama "
Valor = TamaX: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
Valor = TamaY: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + ","
Valor = TamaZ: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$
IF Exclusion$ <> "" THEN
LineaEscrita$ = LineaEscrita$ + " Excl " + Exclusion$
END IF
Exclusion$ = ""
GOSUB GrabaUnaLinea
RETURN
GrabaUnSemiPerm:
IF SemiPermEnc$ = "s¡" THEN
SemiPerm$(SemiPerm) = SemiPermAGrabar$
ELSE
NumSemiPerm = NumSemiPerm + 1
NombreSemiPerm$(NumSemiPerm) = NombreSemiPerm$
SemiPerm$(NumSemiPerm) = SemiPermAGrabar$
END IF
RETURN
Interseccion:
Aprimo = yPunto2 - yPunto1
Bprimo = xPunto1 - xPunto2
Cprimo = Aprimo * xPunto1 + Bprimo * yPunto1
Asecundo = yPunto4 - yPunto3
Bsecundo = xPunto3 - xPunto4
Csecundo = Asecundo * xPunto3 + Bsecundo * yPunto3
x = (Cprimo * Bsecundo - Bprimo * Csecundo) / (Aprimo * Bsecundo - Bprimo * Asecundo)
y = (Aprimo * Csecundo - Cprimo * Asecundo) / (Aprimo * Bsecundo - Bprimo * Asecundo)
RETURN
JambaLarga:
Nombre$ = "JambLarg": GOSUB GrabaNombre
DeltaX = xBravo - xAlfa: DeltaY = yBravo - yAlfa
TamanoJamba = SQR(DeltaX * DeltaX + DeltaY * DeltaY) * Hotel / yAlfa
AnguloJamba = ATN(DeltaY / DeltaX)
AngAlfaBravo = AnguloJamba
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Valor = AnguloJamba * 180 / Pi: GOSUB TradValorCadena
LineaEscrita$ = "Rotz " + Cadena$: GOSUB GrabaUnaLinea
Valor = xAlfa * Hotel / yAlfa: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$
Valor = yAlfa * Hotel / yAlfa: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$
Valor = AnchoJamba: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$ + ",0": GOSUB GrabaUnaLinea
IF LadoDerecho$ = "s¡" THEN
Valor = Golf + AnchoJamba: GOSUB TradValorCadena
LineaEscrita$ = "Posi 0,0," + Cadena$: GOSUB GrabaUnaLinea
END IF
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Tipo$ = "cubos"
GOSUB CabezaTipo
x = 0: y = 0: z = 0: Posicion$ = "o"
TamaX = TamanoJamba: TamaY = AnchoJamba: TamaZ = AnchoJamba
Exclusion$ = "e"
GOSUB GrabaUnObjeto
GOSUB ColaTipo
GOSUB FinModifCoord
DeltaX = xEcho - xBravo: DeltaY = yEcho - yBravo
TamanoJamba = SQR(DeltaX * DeltaX + DeltaY * DeltaY) * Hotel / yAlfa
AnguloJamba = ATN(DeltaY / DeltaX)
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Valor = AnguloJamba * 180 / Pi: GOSUB TradValorCadena
LineaEscrita$ = "Rotz " + Cadena$: GOSUB GrabaUnaLinea
Valor = xBravo * Hotel / yAlfa: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$
Valor = yBravo * Hotel / yAlfa: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$
Valor = AnchoJamba: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + "," + Cadena$ + ",0": GOSUB GrabaUnaLinea
IF LadoDerecho$ = "s¡" THEN
Valor = Golf + AnchoJamba: GOSUB TradValorCadena
LineaEscrita$ = "Posi 0,0," + Cadena$: GOSUB GrabaUnaLinea
END IF
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Tipo$ = "cubos"
GOSUB CabezaTipo
x = 0: y = 0: z = 0: Posicion$ = "o"
TamaX = TamanoJamba: TamaY = AnchoJamba: TamaZ = AnchoJamba
Exclusion$ = "o"
GOSUB GrabaUnObjeto
GOSUB ColaTipo
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
JambaPequena:
Nombre$ = "JambPequ": GOSUB GrabaNombre
DeltaX = xCharlie - xDelta: DeltaY = yCharlie - yDelta
TamanoJamba = SQR(DeltaX * DeltaX + DeltaY * DeltaY) * Hotel / yAlfa
AnguloJamba = ATN(DeltaY / DeltaX)
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Valor = AnguloJamba * 180 / Pi: GOSUB TradValorCadena
LineaEscrita$ = "Rotz " + Cadena$: GOSUB GrabaUnaLinea
IF LadoDerecho$ = "s¡" THEN
Valor = Golf + 3 * AnchoJamba: GOSUB TradValorCadena
LineaEscrita$ = "Posi 0,0," + Cadena$: GOSUB GrabaUnaLinea
END IF
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Tipo$ = "cubos"
GOSUB CabezaTipo
x = xDelta: y = yDelta: z = 0: Posicion$ = "o"
TamaX = TamanoJamba: TamaY = AnchoJamba: TamaZ = AnchoJamba
GOSUB GrabaUnObjeto
GOSUB ColaTipo
LineaEscrita$ = "": GOSUB GrabaUnaLinea
LineaEscrita$ = "Fin": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
RETURN
LeeUnaLinea:
LineaLeida$ = ""
FinDeLinea$ = "no"
WHILE FinDeLinea$ = "no" AND wByteLeido < LOF(1)
wByteLeido = wByteLeido + 1
GET #1, wByteLeido
IF l$ <> CHR$(13) THEN
IF l$ <> CHR$(10) THEN LineaLeida$ = LineaLeida$ + l$
ELSE
FinDeLinea$ = "s¡"
END IF
WEND
RETURN
MayusculaInicial:
GOSUB PoneEnMinusc
IF LEN(LineaATratar$) >= 1 THEN
IF ASC(LEFT$(LineaATratar$, 1)) >= ASC("a") AND ASC(LEFT$(LineaATratar$, 1)) <= ASC("z") THEN
MID$(LineaATratar$, 1, 1) = CHR$(ASC(LEFT$(LineaATratar$, 1)) - ASC("a") + ASC("A"))
END IF
END IF
RETURN
PoneEnMinusc:
FOR Letra = 1 TO LEN(LineaATratar$)
Letra$ = MID$(LineaATratar$, Letra, 1)
IF ASC(Letra$) >= ASC("A") AND ASC(Letra$) <= ASC("Z") THEN
MID$(LineaATratar$, Letra, 1) = CHR$(ASC(Letra$) - ASC("A") + ASC("a"))
END IF
NEXT Letra
RETURN
Principal:
GOSUB Variables
GOSUB RotacionSilla
LadoDerecho$ = "no"
Color$ = ColorMetal$: GOSUB GrabaColor
GOSUB JambaPequena
GOSUB JambaLarga
GOSUB Armazon
LadoDerecho$ = "s¡"
GOSUB JambaPequena
GOSUB JambaLarga
GOSUB ArmAsiento
GOSUB Asiento
GOSUB Respaldo
GOSUB FinModifCoord
RETURN
Respaldo:
Nombre$ = "Respaldo": GOSUB GrabaNombre
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Valor = Juliet - (AnchoJamba * 2): GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$ + ",0,"
Valor = AnchoJamba / 2: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$: GOSUB GrabaUnaLinea
LineaEscrita$ = "Roty 90": GOSUB GrabaUnaLinea
Valor = 90 + (AngAlfaBravo * 180 / Pi): GOSUB TradValorCadena
LineaEscrita$ = "Rotz " + Cadena$: GOSUB GrabaUnaLinea
Valor = xAlfa * Hotel / yAlfa: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$ + ","
Valor = Hotel: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$ + ",0": GOSUB GrabaUnaLinea
LineaEscrita$ = "": GOSUB GrabaUnaLinea
Tipo$ = "cubos"
GOSUB CabezaTipo
FOR Plancha = 1 TO Lima
x = 0: y = (Plancha - 1) * (Mike + November) * -1
z = 0: Posicion$ = "ne"
TamaX = Golf + 2 * Juliet: TamaY = Mike: TamaZ = AnchoPlancha
GOSUB GrabaUnObjeto
NEXT Plancha
GOSUB ColaTipo
GOSUB FinModifCoord
RETURN
RotacionSilla:
LineaEscrita$ = "": GOSUB GrabaUnaLinea
IF xEcho * Hotel / yAlfa > xOscar THEN
maxOscarEcho = xEcho * Hotel / yAlfa
ELSE
maxOscarEcho = xOscar
END IF
Valor = maxOscarEcho * -1: GOSUB TradValorCadena
LineaEscrita$ = "Posi " + Cadena$ + ",0,"
Valor = (Golf / 2 + 2 * AnchoJamba) * -1: GOSUB TradValorCadena
LineaEscrita$ = LineaEscrita$ + Cadena$: GOSUB GrabaUnaLinea
LineaEscrita$ = "Rotx 90": GOSUB GrabaUnaLinea
LineaEscrita$ = "Rotz -90": GOSUB GrabaUnaLinea
RETURN
TradValorCadena:
Cadena$ = STR$(Valor)
IF LEFT$(Cadena$, 1) = " " THEN
Cadena$ = MID$(Cadena$, 2, LEN(Cadena$) - 1)
END IF
IF LEFT$(Cadena$, 2) = "-." THEN
Cadena$ = "-0" + RIGHT$(Cadena$, LEN(Cadena$) - 1)
END IF
IF LEFT$(Cadena$, 1) = "." THEN
Cadena$ = "0" + Cadena$
END IF
RETURN
Variables:
'En metros
AnchoJamba = .015
AnchoPlancha = .01
AnchoEjeAsiento = .005
Golf = .34
Hotel = .9
India = .08
Juliet = .06
Kilo = .2
CharlieOscar = .1
PapaBravo = .03
Quebec = .02
BravoSierra = .05
'En unidades
xAlfa = -.5: yAlfa = 11
xBravo = 1: yBravo = 6
xCharlie = 5: yCharlie = 6
xDelta = 0: yDelta = 0
xEcho = 6: yEcho = 0
Lima = 4
ParamMike = 1: ParamNovember = .33
Romeo = 6
'Calculado, en unidades
xPunto1 = xDelta: yPunto1 = yDelta
xPunto2 = xCharlie: yPunto2 = yCharlie
xPunto3 = xEcho: yPunto3 = yEcho
xPunto4 = xBravo: yPunto4 = yBravo
GOSUB Interseccion
xFoxtrot = x: yFoxtrot = y
'Calculado, en metros
xPapa = (xBravo * Hotel / yAlfa) - PapaBravo
xOscar = (xCharlie * Hotel / yAlfa) + CharlieOscar
xSierra = (xBravo * Hotel / yAlfa) + BravoSierra
Mike = Kilo * ParamMike / (Lima * ParamMike + (Lima - 1) * ParamNovember)
November = Kilo * ParamNovember / (Lima * ParamMike + (Lima - 1) * ParamNovember)
Kilo2 = xOscar - xSierra
Mike2 = Kilo2 * ParamMike / (Romeo * ParamMike + (Romeo - 1) * ParamNovember)
November2 = Kilo2 * ParamNovember / (Romeo * ParamMike + (Romeo - 1) * ParamNovember)
'Calculado, en radianes
DeltaX = xBravo - xAlfa: DeltaY = yBravo - yAlfa
AngAlfaBravo = ATN(DeltaY / DeltaX)
'Colores
ColorMadera$ = "120,0.6,0.4"
ColorMetal$ = "180,0.3,0.3"
RETURN