1 REM * IMAGE3D Ver. 1.3a 6/23/84 WM * 10 GOSUB10000 20 I=0:X=0:Y=0:Z=0:PX=0:PY=0:ZV=-100 30 YV=0:XV=150:SX=120:SY=30:M=0:N=0:P=0 40 CT=0:I1=0:J=0:TH=0:TS=0:TC=0:TA=30 50 AN=0:C=0:D=0:E=0:A=0:Q=0:A1=0:A2=0 60 A3=0:A4=0:V=0:X1=0:Y1=0:Z1=0:B=0 70 Z$="#####.#":Z1$="###":BL$=SPACE$(11):GOTO9000 100 TH=AN/57.3:TS=SIN(TH):TC=COS(TH):IFJ=1THEN200ELSEIFJ=2THEN300 150 FORI=1TOCT:X=X(I):Y=Y(I):X(I)=(X-M)*TC-(Y-N)*TS+M:Y(I)=(X-M)*TS+(Y-N)*TC+N:NEXT:RETURN 200 FORI=1TOCT:Y=Y(I):Z=Z(I):Y(I)=(Y-N)*TC-(Z-P)*TS+N:Z(I)=(Y-N)*TS+(Z-P)*TC+P:NEXT:RETURN 300 FORI=1TOCT:X=X(I):Z=Z(I):X(I)=(X-M)*TC+(Z-P)*TS+M:Z(I)=-(X-M)*TS+(Z-P)*TC+P:NEXT:RETURN 400 FORI=1TOCT:X=X(I)+SX:Y=Y(I)+SY:Z=Z(I):PX=XV+(XV-X)*ZV/(Z-ZV):PY=YV+(YV-Y)*ZV/(Z-ZV) 410 IFPX<0ORPX>239ORPY<0ORPY>63THEN450 420 IFC(I)=0THENLINE-(PX,PY)ELSEPSET(PX,PY) 450 NEXT:BEEP:RETURN 600 IFCT<1THENRETURNELSECLS:GOSUB400 610 Q$=INPUT$(1):Q=ASC(Q$):IFQ>96THENQ=Q-96ELSEQ=Q-64 650 IFQ=9THENJ=1:AN=TA:GOTO760 660 IFQ=15THENJ=1:AN=-TA:GOTO760 670 IFQ=11THENJ=2:AN=TA:GOTO760 680 IFQ=12THENJ=2:AN=-TA:GOTO760 690 IFQ=-20THENJ=3:AN=TA:GOTO760 700 IFQ=-18THENJ=3:AN=-TA:GOTO760 710 IFQ=3THENCLS:GOSUB400 720 IFQ=13THENGOSUB8000 730 IFQ=14THENCLS 740 IFQ=17THENQ=0:RETURN 750 GOTO610 760 GOSUB100:GOSUB400:GOTO610 800 CLS:I=1:I1=2:IFCT<1THENRETURN 810 PRINT@1," I C X Y Z ":PRINT@109,"Count ";USINGZ1$;CT 820 PRINT@149,CHR$(152);CHR$(153);"Line ";USINGZ1$;I 830 PRINT@189,CHR$(155);CHR$(154);"Col. ";USINGZ1$;I1:PRINT@229,"VCENDRSTQ" 900 Q$=INPUT$(1):Q=ASC(Q$):PRINT@109,BL$:PRINT@149,BL$:PRINT@189,BL$:PRINT@229,BL$ 910 B=Q-27:IFB<1ORB>4THEN930 920 ONBGOSUB3150,3100,3000,3050 930 IFQ>96THENQ=Q-96ELSEQ=Q-64 950 IFQ=3THENGOSUB3200 960 IFQ=5THENGOSUB3500 970 IFQ=14THENGOSUB3700 1000 IFQ=4THENGOSUB600:I=1 1010 IFQ=18THENGOSUB7500:I=1 1020 IFQ=19THENGOSUB1200 1030 IFQ=20THENGOSUB4000:I=1 1040 IFQ=22THENGOSUB3900 1050 IFQ=17THENQ=0:RETURN 1100 IFI<1THENI=1ELSEIFI>CTTHENI=CT 1110 IFI1<1ORI1>4THENI1=2 1120 GOTO810 1200 CLS:A=0:INPUT"Start Line";A 1210 IFA<1THENRETURNELSEIFA>CTTHEN1200 1220 B=0:INPUT"Number of Lines";B:D=A+B 1230 IFB<1THENRETURNELSEIFB>CTTHEN1220 1240 CLS:IFD239ORPY<0ORPY>63THEN1350 1320 IFI=ATHENPSET(PX,PY):GOTO1350 1330 IFC(I)=0THENLINE-(PX,PY)ELSEPSET(PX,PY) 1350 NEXT:I=A:RETURN 1500 CLS:PRINT"[1] Load & Append","[2] Search File","[3] Save",,"[4] Reset Counter","[9] Quit" 1600 Q$=INPUT$(1):Q=VAL(Q$):ONQGOSUB1800,2700,2500,1700 1610 IFQ=9THENRETURNELSE1500 1700 CLS:PRINT"Number of Lines";CT 1710 A=CT:INPUT"New Counter";A 1720 IFA<0ORA>99THEN1710 1730 CT=A:RETURN 1800 IFCT>98THENRETURNELSECLS:FILES 1810 F$="":INPUT"Image File";F$ 1820 IFF$=""THENRETURN 1830 A$=LEFT$(F$,6)+".DO" 1850 B$="":INPUT"Image Name";B$ 1860 IFB$=""THENRETURN 1870 B$=LEFT$(B$,8):OPENA$FORINPUTAS1 1900 LINEINPUT#1,F$:IFF$=B$THENGOTO2000 1950 FORI=1TO100:LINEINPUT#1,F$ 1960 IFEOF(1)THEN2300 1970 IFF$=""THEN1900ELSENEXT 2000 C=0:D=0:E=0:A$="N" 2010 INPUT"Offset (Y/N)";A$ 2020 IFA$="Q"ORA$="q"THEN2300 2030 IFA$="N"ORA$="n"THEN2100 2040 C=0:INPUT"X Offset";C:IFC<-120ORC>120THEN2040 2050 D=0:INPUT"Y Offset";D:IFD<-32ORD>32THEN2050 2060 E=0:INPUT"Z Offset";E:IFE<-50ORE>50THEN2060 2100 X=1:Y=1:Z=1:A$="N" 2110 INPUT"Scale (Y/N)";A$ 2120 IFA$="Q"ORA$="q"THEN2300 2130 IFA$="N"ORA$="n"THEN2200 2140 X=1:INPUT"X Scale";X:IFX<=0ORX>5THEN2140 2150 Y=1:INPUT"Y Scale";Y:IFY<=0ORY>5THEN2150 2160 Z=1:INPUT"Z Scale";Z:IFZ<=0ORZ>5THEN2160 2200 I1=CT+1:FORI=I1TO99:INPUT#1,A1,A2,A3,A4 2210 IFEOF(1)ORA1=2THEN2250 2220 C(I)=A1:X(I)=(A2*X)+C:Y(I)=(A3*Y)+D:Z(I)=(A4*Z)+E:NEXT 2250 CT=I-1 2300 CLOSE 1:RETURN 2500 IFCT<1ORCT>99THENRETURN 2510 CLS:PRINT"Count";CT 2520 F$="":INPUT"Image File";F$ 2530 IFF$=""THENRETURN 2540 A$=LEFT$(F$,6)+".DO":OPENA$FOROUTPUTAS1 2600 PRINT#1,F$:FORI=1TOCT 2610 F$=STR$(C(I))+","+STR$(X(I))+","+STR$(Y(I))+","+STR$(Z(I)) 2620 PRINT#1,F$:NEXT:F$="2,0,0,0":PRINT#1,F$ 2650 CLOSE1:RETURN 2700 CLS:FILES 2710 F$="":INPUT"Image File";F$ 2720 IFF$=""THENRETURN 2730 A$=LEFT$(F$,6)+".DO":CLS:I1=1 2740 PRINT" No. Image Line" 2800 OPENA$FORINPUTAS1 2810 LINEINPUT#1,B$ 2820 FORI=1TO101:INPUT#1,A1,A2,A3,A4 2830 IFEOF(1)THEN2900 2840 IFA1=2THENLINEINPUT#1,A$:GOTO2900 2850 NEXT 2900 PRINTUSING Z1$;I1;:PRINTTAB(5);LEFT$(B$,8);TAB(15);:PRINTUSING Z1$;I-1:I1=I1+1 2930 IFEOF(1)THEN2950 2940 IFI1>8THEN2950ELSE2810 2950 CLOSE1:A$=INPUT$(1):RETURN 3000 IFI<1THENRETURN 3010 GOSUB 3800:A$=INKEY$:IFA$<>""THENRETURNELSEI=I-1:GOTO3000 3050 IFI>CTTHENRETURN 3060 GOSUB3800:A$=INKEY$:IFA$<>""THENRETURNELSEI=I+1:GOTO3050 3100 IFI1<=1THENRETURNELSEI1=I1-1:RETURN 3150 IFI1>=4THENRETURNELSEI1=I1+1:RETURN 3200 ONI1GOSUB3250,3300,3350,3400 3210 PRINT@68,BL$:PRINT@108,BL$:RETURN 3250 PRINT@68,"C=";C(I):A=C(I):PRINT@108,"";:INPUTA:IFA=1THENC(I)=1ELSEC(I)=0 3260 RETURN 3300 PRINT@68,"X=";X(I);:X=X(I):PRINT@108,"";:INPUTX:IFX<-120ORX>120THEN3300ELSEX(I)=X:RETURN 3350 PRINT@68,"Y=";Y(I);:Y=Y(I):PRINT@108,"";:INPUTY:IFY<-32ORY>32THEN3350ELSEY(I)=Y:RETURN 3400 PRINT@68,"Z=";Z(I);:Z=Z(I):PRINT@108,"";:INPUTZ:IFZ<-50ORZ>50THEN3400ELSEZ(I)=Z:RETURN 3500 A=0:INPUT"Line";A 3510 IFA<1THENRETURNELSEIFA>CTTHEN3500 3520 PRINT" C=";C(A);" X=";X(A);" Y=";Y(A);" Z=";Z(A) 3530 A$="N":INPUT"Change";A$:IFA$="N"ORA$="n"THEN3500 3600 B=C(A):INPUT"C";B:IFB=1THENC(A)=1ELSEC(A)=O 3610 X=X(A):INPUT"X";X:IFX<-120ORX>120THEN3610 3620 Y=Y(A):INPUT"Y";Y:IFY<-32ORY>32THEN3620 3630 Z=Z(A):INPUT"Z";Z:IFZ<-50ORZ>50THEN3630 3680 X(A)=X:Y(A)=Y:Z(A)=Z:GOTO3500 3700 PRINT"Present Line";I:A=I 3710 INPUT"New Line";A:IFA<1THENRETURN 3720 IFA>CTTHEN3700ELSEI=A:RETURN 3800 PRINTUSINGZ1$;I;:PRINTUSINGZ1$;C(I);:PRINTUSINGZ$;X(I); 3810 PRINTUSINGZ$;Y(I);:PRINTUSINGZ$;Z(I):RETURN 3900 IFI+1>CTTHENRETURNELSEI=I+1:GOSUB3800:RETURN 4000 CLS:IFCT<1THENRETURN 4010 PRINT"[1] Insert",,"[2] Delete",,"[3] Offset",,"[4] Scale",,"[5] Round Off",,"[9] Quit" 4050 Q$=INPUT$(1):Q=VAL(Q$):ONQGOSUB4100,4500,4800,5100,8500 4060 IFQ=9THENRETURNELSE4000 4100 IFCT>98THENRETURNELSECLS 4110 PRINT"Count";CT:A=0:X=0:Y=0:Z=0 4120 INPUT"Line No.";A:IFA<1THENRETURN 4130 IFCT>98THENRETURNELSEIFA>CTTHEN4110 4200 B=-1:INPUT"C=";B:IFB<0THENRETURN 4210 IFB=1THENB=1ELSEB=0 4220 INPUT"X=";X:IFX<-120ORX>120THEN4220 4230 INPUT"Y=";Y:IFY<-32ORY>32THEN4230 4240 INPUT"Z=";Z:IFZ<-50ORZ>50THEN4240 4300 C1=C(A):X1=X(A):Y1=Y(A):Z1=Z(A):C(A)=B:X(A)=X:Y(A)=Y:Z(A)=Z 4310 FORI=A+1TOCT+1:B=C1:X=X1:Y=Y1:Z=Z1 4320 C1=C(I):X1=X(I):Y1=Y(I):Z1=Z(I):C(I)=B:X(I)=X:Y(I)=Y:Z(I)=Z 4350 IFI>99THEN4360ELSENEXT 4360 CT=CT+1:GOTO4110 4500 IFCT<1THENRETURNELSECLS 4510 PRINT"Count";CT 4520 A=0:INPUT"Starting Number";A 4530 IFA<1THENRETURNELSEIFA>CTTHEN4520 4550 C=0:INPUT"Number of Lines";C:D=A+C 4560 IFC<1THENRETURNELSEIFC>=CTTHEN4550 4570 IFD>CTTHENCT=A-1:RETURN 4600 FORI=DTOCT:C(A)=C(I):X(A)=X(I):Y(A)=Y(I):Z(A)=Z(I):A=A+1:NEXT:CT=CT-C:RETURN 4800 IFCT<1THENRETURNELSECLS 4810 PRINT"Count";CT 4820 A=0:INPUT"Starting Number";A 4830 IFA<1THENRETURNELSEIFA>CTTHEN4820 4850 B=0:INPUT"Number to Offset";B 4860 IFB<1THENRETURNELSEIFB>CTTHEN4850 4880 I1=A+B:IFI1>CTTHENI1=CT 4900 C=0:INPUT"X Offset";C:IFC<-120ORC>120THEN4900 4910 D=0:INPUT"Y Offset";D:IFD<-32ORD>32THEN4910 4920 E=0:INPUT"Z Offset";E:IFE<-50ORE>50THEN4920 5000 FORI=ATOI1:X(I)=X(I)+C:Y(I)=Y(I)+D:Z(I)=Z(I)+E:NEXT:RETURN 5100 IFCT<1THENRETURNELSECLS 5110 PRINT"Count";CT 5120 A=0:INPUT"Starting Number";A 5130 IFA<1THENRETURNELSEIFA>CTTHEN5120 5150 B=0:INPUT"Number to Scale";B 5160 IFB<1THENRETURNELSEIFB>CTTHEN5150 5180 I1=A+B:IFI1>CTTHENI1=CT 5200 X=1:INPUT"X Scale";X:IFX<=0ORX>5THEN5200 5210 Y=1:INPUT"Y Scale";Y:IFY<=0ORY>5THEN5210 5220 Z=1:INPUT"Z Scale";Z:IFZ<=0ORZ>5THEN5220 5300 FORI=ATOI1:X(I)=X(I)*X:Y(I)=Y(I)*Y:Z(I)=Z(I)*Z:NEXT:RETURN 7000 CT=0:BEEP:X=0:Y=0:Z=0 7010 IFCT>98THENRETURNELSECLS:A=2 7020 PRINT@1,"Count";CT:INPUT"C=";A 7030 IFA<0ORA>1THENRETURN 7050 INPUT"X=";X:IFX<-120ORX>120THEN7050 7060 INPUT"Y=";Y:IFY<-32ORY>32THEN7060 7070 INPUT"Z=";Z:IFZ<-50ORZ>50THEN7070 7100 CT=CT+1:IFCT>99THENCT=CT-1:RETURN 7110 C(CT)=A:X(CT)=X:Y(CT)=Y:Z(CT)=Z 7120 GOTO7020 7500 PRINT"Count";CT:A=0:INPUT"Line";A 7510 IFA<1THENRETURNELSEIFA>CTTHEN7500 7520 PRINT"X=";X(A);" Y=";Y(A);" Z=";Z(A):X1=X(A):Y1=Y(A):Z1=Z(A) 7530 A$="N":INPUT"Change";A$:IFA$="N"ORA$="n"THENRETURN 7550 X=X1:INPUT"X=";X:IFX<-120ORX>120THEN7550 7560 Y=Y1:INPUT"Y=";Y:IFY<-32ORY>32THEN7560 7570 Z=Z1:INPUT"Z=";Z:IFZ<-50ORZ>50THEN7570 7600 FORI=1TOCT 7610 IFX(I)=X1ANDY(I)=Y1ANDZ(I)=Z1THENX(I)=X:Y(I)=Y:Z(I)=Z 7620 NEXT:GOTO7500 8000 CLS:PRINT"[1] Angle",,"[2] Reference",,"[3] Viewpoint",,"[9] Quit" 8040 Q$=INPUT$(1):Q=VAL(Q$):ONQGOSUB8100,8200,8300 8050 IFQ=9THENCLS:GOSUB400:RETURN 8060 GOTO8000 8100 CLS:PRINT"Current Angle";TA 8110 A=TA:INPUT"New Angle";A 8120 IFA<1ORA>360THEN8110 8130 TA=A:RETURN 8200 CLS:PRINT"Current Reference" 8210 PRINT"X=";M;" Y=";N;" Z=";P 8220 INPUT"X Ref.";M:IFM<-120ORM>120THEN8220 8230 INPUT"Y Ref.";N:IFN<-32ORN>32THEN8230 8240 INPUT"Z Ref.";P:IFP<-100ORP>100THEN8240ELSERETURN 8300 CLS:PRINT"Present Viewpoint" 8310 PRINT"X=";XV;" Y=";YV;" Z=";ZV 8320 INPUT"X Viewpoint";XV 8330 INPUT"Y Viewpoint";YV 8340 INPUT"Z Viewpoint (Neg.)";ZV 8350 IFZV>-1THEN8340ELSERETURN 8500 IFCT<1THENRETURNELSECLS 8510 A$="":INPUT"Round Image";A$ 8520 IFA$=""THENRETURN 8530 IFA$="Y"THEN8540ELSE8510 8540 FORI=1TOCT:C=X(I)*10:D=Y(I)*10:E=Z(I)*10:X=C:Y=D:Z=E:X(I)=X/10:Y(I)=Y/10:Z(I)=Z/10:NEXT:RETURN 9000 CLS:BEEP 9010 PRINT"[A] Input","[B] Add","[C] Change Image","[D] List & Edit" 9020 PRINT"[E] Display",,"[F] Save, Load & Append","[X] Exit" 9100 Q$=INPUT$(1):Q=ASC(Q$):IFQ>96THENQ=Q-96ELSEQ=Q-64 9110 IFQ<1ORQ>7THEN9130 9120 ONQGOSUB7000,7010,4000,800,600,1500 9130 IFQ=24THENENDELSE9000 10000 DEFSNGT,X,Y,Z:DEFINTA-S:DIMC(100),X(100),Y(100),Z(100) 10010 ONERRORGOTO10100:RETURN 10100 IFERR=7THENPRINT"Out Of Memory":FORI=1TO1000:NEXT:RESUME9000 10110 CLOSE1:IFERR=52THENPRINT"File Not Found":FORI=1TO1000:NEXT:RESUME1500 10120 IFERR=54ORERR=4THENPRINT"Out of Data":FORI=1TO1000:NEXT:RESUME1500 10130 IFERR=11THENRESUME9000 10140 PRINT"Error";ERR;"Line";ERL:END