0 'OBJ3d.BA James Yi 8/86 1 'CLUB 100 Library - 415/939-1246 BBS, 937-5039 NEWSLETTER, 932-8856 VOICE 2 'Each coordinate is represented by X(width), Y(length), and Z(depth) 3 'If a new line is drawn at the coordinate, X of that coord. has 1000 or -1000 added to it. 4 CLS:GOSUB7:PRINT@128,"by James Yi ":PRINT@215,"16-Aug-86":FORX=1TO500 5 NEXT:CLS:GOSUB7:PRINT@121,"Front View: Default Deg. = 0,0,0":PRINT@161," Side View: Rotate Y Axis = 0,90,0 6 PRINT@201," Top View: Rotate X Axis = 270,0,0":CALL17001:PRINT@299," Wait 20 seconds...";:CALL17006:GOTO8 7 CALL17001:PRINT@54," 3D Objects ":CALL17006:RETURN 8 MAXFILES=2:PI=ATN(1)*4:XC=120:YC=64:YM=63:IFPEEK(61983)=PEEK(61983)THENYM=31:YC=32 9 DIMS(360),C(360):FORL=0TO45:A=SIN(L*PI/180):B=COS(L*PI/180):S(L)=A:C(L)=B:S(90-L)=B:C(90-L)=A:S(L+90)=B:C(L+90)=-A 10 S(180-L)=A:C(180-L)=-B:S(180+L)=-A:C(180+L)=-B:S(270-L)=-B:C(270-L)=-A:S(270+L)=-B:C(270+L)=A:S(360-L)=-A:C(360-L)=B:NEXT 11 MG=1:ZF=10:GOTO38 12 CLS:PRINT@42,"Viewing angles must be 0 to 360:":CALL17001 13 PRINT@82," Press enter to use default ":PRINT:CALL17006:INPUT"X axis";XR:INPUT"Y axis";YR:INPUT"Z axis";ZR:GOTO38 14 CLS:REM View 15 ONERRORGOTO20:OPENO$FORINPUTAS1:ONERRORGOTO21 16 IFEOF(1)THENCLOSE:GOTO19 17 INPUT#1,X,Y,Z:IFABS(X)>999THENX=X-SGN(X)*1000:X=X+XH:Y=Y+YH:Z=Z+ZH:GOSUB25:PX=X:PY=Y:GOTO16 18 X=X+XH:Y=Y+YH:Z=Z+ZH:GOSUB25:GOSUB28:PX=X:PY=Y:GOTO16 19 GOSUB70:GOTO38 20 CLS:PRINT@82,"Object file not found.":RESUME24 21 PRINT"If number of data items in object file equals 3*number of coordinates and all 22 PRINT"three rotation angles range from 0-360 23 PRINT"then there's a program error. Contact James Yi [73327,1653] and describe the symptoms and when they occur.":END 24 BEEP:CLOSE:FORL=0TO700:NEXT:GOTO38 25 F=Z:Z=C(XR)*Z+Y*S(XR):Y=Y*C(XR)-F*S(XR):F=X:X=X*C(YR)+Z*S(YR):Z=Z*C(YR)-F*S(YR):F=X:X=X*C(ZR)+Y*S(ZR):Y=Y*C(ZR)-F*S(ZR) 26 IFABS(Z*ZF/3000)>1THENX=0:Y=0:RETURN 27 X=INT(X-X*Z*ZF/3000)*MG:Y=INT(Y-Y*Z*ZF/3000)*MG:RETURN 28 IFABS(PX)>119ORABS(PY)>YMTHENIFABS(X)>119ORABS(Y)>YMTHEN71ELSEGOSUB34:LINE-(XC+X,YC-Y):RETURN 29 PSET(XC+PX,YC-PY):IFABS(X)>119ORABS(Y)>YMTHEN30ELSELINE-(XC+X,YC-Y):RETURN 30 XL=X-PX:YL=Y-PY:XS=SGN(XL):YS=SGN(YL):IFXS=0THENIFYS=0THENRETURNELSELINE-(XC+X,YC-YS*YM):RETURN 31 IFYS=0THENIFXS=0THENRETURNELSELINE-(XC+XS*119,YC-Y):RETURN 32 XB=XS*119-PX:YB=YS*YM-PY:IFABS(PY+YL*XB/XL)>YMTHENLINE-(XC+PX+XL*YB/YL,YC-YS*YM)ELSELINE-(XC+119*XS,YC-(PY+YL*XB/XL)) 33 RETURN 34 XL=PX-X:YL=PY-Y:XS=SGN(XL):YS=SGN(YL):IFXS=0THENIFYS=0THENRETURNELSE:PSET(XC+PX,YC-YS*YM):RETURN 35 IFYS=0THENIFXS=0THENRETURNELSEPSET(XC+XS*119,YC-PY):RETURN 36 XB=XS*119-X:YB=YS*YM-Y:IFABS(Y+YL*XB/XL)>YMTHENPSET(XC+X+XL*YB/YL,YC-YS*YM)ELSEPSET(XC+119*XS,YC-(Y+YL*XB/XL)) 37 RETURN 38 ONERRORGOTO21:CLS:PRINT"1) View object"TAB(24)"*Default*":PRINT"2) Rotate object"TAB(24)XR;YR;ZR 39 PRINT"3) Change magnification"TAB(24)MG:PRINT"4) Change Distance scale"TAB(24)ZF:PRINT"5) Shift object center"TAB(24); 40 PRINTXH;YH;ZH:PRINT"6) Choose object"TAB(25)O$:PRINT"7) Create object":PRINT"8) Edit object"TAB(20)"9) Exit"; 41 GOSUB70:IFVAL(K$)=0THEN41 42 ONVAL(K$)GOTO14,12,44,45,46,43,48,54,47:GOTO41 43 CLS:PRINT:FILES:INPUT"Object file";O$:GOTO38 44 CLS:PRINT@82,"Magnify how many times(0 to ?)";:INPUTMG:GOTO38 45 CLS:PRINT@82,"Distance per dot (0 to ?)";:INPUTZF:GOTO38 46 CLS:PRINT@42,"Object's center can be shifted by -? to ?":PRINT:INPUT"X ";XH:INPUT"Y ";YH:INPUT"Z ";ZH:GOTO38 47 MENU 48 CLS:PRINT@82,"Object name";:INPUTO$:OPENO$FOROUTPUTAS1:CO=0 49 PRINT@162,"ext egin new line uit 50 GOSUB70:IFK$="n"ORK$="N"THEN51ELSEIFK$="b"ORK$="B"THEN51ELSEIFK$="q"ORK$="Q"THEN53ELSE50 51 CO=CO+1:PRINT"Coordinate #"CO:INPUT"X,Y,Z";X,Y,Z:IFK$="b"ORK$="B"THENIFX=0THENX=1000ELSEX=X+1000*SGN(X) 52 PRINT#1,X;Y;Z:GOTO49 53 CLOSE:GOTO38 54 ONERRORGOTO20:EF$="editfl.do":OPENO$FORINPUTAS1:OPENEF$FOROUTPUTAS2:ONERRORGOTO21:CO=0:GOSUB69:CLOSE 55 OPENO$FOROUTPUTAS2:OPENEF$FORINPUTAS1 56 CO=CO+1 57 IFEOF(1)THEN68ELSEINPUT#1,X,Y,Z 58 CLS:PRINT@80,"xt hnge nsrt lete dd t":PRINT"Coordinate #"CO": "X;Y;Z 59 GOSUB70:IFK$="n"ORK$="N"THEN62ELSEIFK$="C"ORK$="c"THEN63ELSEIFK$="i"ORK$="I"THEN64 60 IFK$="a"ORK$="A"THEN65ELSEIFK$="D"ORK$="d"THEN57ELSEIFK$="q"ORK$="Q"THENPRINT#2,X;Y;Z:GOSUB69:GOTO68 61 GOTO59 62 PRINT#2,X;Y;Z:GOTO56 63 INPUT"X,Y,Z";X,Y,Z:PRINT#2,X;Y;Z:GOTO56 64 INPUT"X,Y,Z";XT,YT,ZT:PRINT#2,XT;YT;ZT:CO=CO+1:GOTO58 65 CO=CO+1:PRINT#2,Z;Y;Z:IFEOF(1)THEN67ELSEINPUT#1,X,Y,Z:GOTO65 66 PRINT"ore uit":GOSUB70:IFK$="m"ORK$="M"THEN67ELSEIFK$="Q"ORK$="q"THEN68 67 PRINT"Coordinate #"CO:INPUT"X,Y,Z";X,Y,Z:PRINT#2,X;Y;Z:CO=CO+1:GOTO66 68 PRINT"End of data.":CLOSE:KILLEF$:GOTO38 69 IFEOF(1)THENRETURNELSEINPUT#1,X,Y,Z:PRINT#2,X;Y;Z:GOTO69 70 K$=INKEY$:IFK$=""THEN70ELSERETURN 71 IFX<-119ANDPX<-119ORX>119ANDPX>119ORY<-YMANDPY<-YMORY>YMANDPY>YMTHENRETURN 72 XL=X-PX:YL=Y-PY:XS=SGN(XL):YS=SGN(YL):XB=-(XS*119+PX):YB=-(PY+YS*YM):IFXS=0ANDYS=0THENRETURN 73 IFXS=0THENLINE(XC+X,YC-YS*YM)-(XC+X,YC+YS*YM):RETURN 74 IFYS=0THENLINE(XC+XS*119,YC-Y)-(XC-XS*119,YC-Y):RETURN 75 IFABS(PX)>119THEN79 76 NX=PX+XL*YB/YL:IFABS(NX)<120THENPSET(XC+NX,YC+YS*YM)ELSERETURN 77 XN=NX+2*YM*XL/ABS(YL):IFABS(XN)<120THENLINE-(XC+XN,YC-YS*YM)ELSELINE-(XC+XS*119,YC-(-YS*YM+(XS*119-NX)*YL/XL)) 78 RETURN 79 NY=PY+YL*XB/XL:IFABS(NY)YMTHEN76ELSERETURN 80 YN=NY+2*119*YL/ABS(XL):IFABS(YN)