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$ = "": 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