0 Members and 1 Guest are viewing this topic.
'*******************************************************************************'*'* VECTOR FUNCTIONS (V 1.0) CODED FOR NZO BY SHOCKWAVE 2010'*'* BE CAREFUL OF DIVISIONS BY ZERO AND OUT OF DATA ERRORS.'*'* TO ADD AN OBJECT, CREATE A LABEL AT THE END OF THE CODE.'* EG: OBJECT1:'* OBJECT2:'* OBJECT3: ETC...'*'* ADD VERTEX DATA FIRST.'* DATA X,Y,Z , X,Y,Z , X,Y,Z , X,Y,Z ETC..'* ADD FACE DATA NEXT.'* DATA 1,2,3 (CONNECT POINTS 1,2,3)'* DATA 3,4,1 (CONNECT POINTS 3,4,1)'*'* GO TO THE SUB INITIALISE_OBJECT()'* AND LOCATE THE CASE STATEMENTS.'* ADD A NEW CONDITION. EG:'*'* CASE 3'* VERT_READ=130:' 130 VERTICES IN OBJECT'* FACE_READ=51 :' 51 FACES IN OBJECT'*'* THAT TELLS THE PROGRAM THAT OBJECT 3 HAS 130 X,Y,Z TRIPLES AND 51 POLYGONS.'*'* TO USE YOUR OBJECT..'* RESTORE OBJECT3: (MUST BE CALLED FROM MAIN PROGRAM). TO SET THE DATA POINTER IN THE RIGHT PLACE.'* INITIALISE_OBJECT(3) (THIS LOADS YOUR OBJECT)'* YOU MAY NOW DRAW YOUR OBJECT ON SCREEN:'* DRAW_OBJECT (X,Y,Z,RGB(RR,GG,BB))'*'*------------------------------------------------------------------------------'* THE OBJECT DATA AND DRAW CO-ORDINATES MAY BE EXPRESSED AS FLOATING POINT NUMBERS.'* YOU SHOULD NOT TRY AND DRAW ANYTHING AT A Z POS OF 0'* USE THE SCALE VARIABLES TO STRETCH EACH AXIS ALLOWING YOU TO TWEAK THE LOOK OF THE LETTERS.'* POLYGONS ARE CLIPPED TO SCREEN BOUNDARIES SET BY XRES AND YRES'*------------------------------------------------------------------------------'*'* PLANNED CHANGES... '* ADD X,Y,Z ROTATION '*'*******************************************************************************'-------------------------------------------------------------------------------' LIBS;'------------------------------------------------------------------------------- #INCLUDE "TINYPTC_EXT.BI" #INCLUDE "WINDOWS.BI" OPTION STATIC OPTION EXPLICIT'-------------------------------------------------------------------------------' 800 * 600 SCREEN AND SCREEN BUFFER.'------------------------------------------------------------------------------- CONST XRES = 800 CONST YRES = 600 DIM SHARED AS UINTEGER BUFFER ( XRES * YRES )'-------------------------------------------------------------------------------' DEFINITIONS FOR OBJECTS.'------------------------------------------------------------------------------- DIM SHARED AS DOUBLE XSCALE,YSCALE,ZSCALE XSCALE=30.0:' HOW MUCH TO STRETCH X YSCALE=15.0:' HOW MUCH TO STRETCH Y ZSCALE=15.0:' HOW MUCH TO STRETCH Z DIM SHARED AS INTEGER VERTICES=1000:' INCREASE THESE IF YOU RUN OUT OF POINTS! DIM SHARED AS INTEGER FACES =1000:' DIM SHARED AS INTEGER VERT_READ,FACE_READ:' STORES POINTS AND FACES IN OBJECT. '-------------------------------------------------------------------------------' STORAGE FOR OBJECT 1'------------------------------------------------------------------------------- DIM SHARED AS INTEGER TX(VERTICES),TY(VERTICES): ' HOLDS TRANSFORMED OBJECT DIM SHARED AS DOUBLE OBJ_X(VERTICES):' HOLDS RAW X CO-ORD DIM SHARED AS DOUBLE OBJ_Y(VERTICES):' HOLDS RAW Y CO-ORD DIM SHARED AS DOUBLE OBJ_Z(VERTICES):' HOLDS RAW Z CO-ORD DIM SHARED AS INTEGER CONNECT1(FACES):' POLY POINT 1 DIM SHARED AS INTEGER CONNECT2(FACES):' POLY POINT 2 DIM SHARED AS INTEGER CONNECT3(FACES):' POLY POINT 3 DECLARE SUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER) DECLARE SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER) DECLARE SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT) ' RESTORE OBJECT1:' SET OBJECT POINTER! INITIALISE_OBJECT(1):' LOAD OBJECT! '-------------------------------------------------------------------------------' OPEN THE SCREEN;'------------------------------------------------------------------------------- PTC_ALLOWCLOSE(0) PTC_SETDIALOG(1,"COPPERMASTER VECTOR FUNCTIONS"+CHR$(13)+"FULL SCREEN?",0,1) IF (PTC_OPEN("BY SHOCKWAVE",XRES,YRES)=0) THEN END-1 END IF '*******************************************************************************'* MAIN LOOP;'******************************************************************************* DIM GADD AS DOUBLEWHILE(GETASYNCKEYSTATE(VK_ESCAPE)<> -32767 and PTC_GETLEFTBUTTON=FALSE) IF GETASYNCKEYSTATE(VK_F1)= -32767 THEN RESTORE OBJECT1:' SET OBJECT POINTER! INITIALISE_OBJECT(1):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F2)= -32767 THEN RESTORE OBJECT2:' SET OBJECT POINTER! INITIALISE_OBJECT(2):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F3)= -32767 THEN RESTORE OBJECT3:' SET OBJECT POINTER! INITIALISE_OBJECT(3):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F4)= -32767 THEN RESTORE OBJECT4:' SET OBJECT POINTER! INITIALISE_OBJECT(4):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F5)= -32767 THEN RESTORE OBJECT5:' SET OBJECT POINTER! INITIALISE_OBJECT(5):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F6)= -32767 THEN RESTORE OBJECT6:' SET OBJECT POINTER! INITIALISE_OBJECT(6):' LOAD OBJECT! END IF IF GETASYNCKEYSTATE(VK_F7)= -32767 THEN RESTORE OBJECT7:' SET OBJECT POINTER! INITIALISE_OBJECT(7):' LOAD OBJECT! END IF DRAW_OBJECT(333*COS(GADD),333*SIN(GADD),7+6.99*SIN(GADD*5),RGB(55,100,155)) PTC_UPDATE@BUFFER(0) ERASE BUFFER SLEEP 1 GADD=GADD+.002WEND'*******************************************************************************'* EXIT.'*******************************************************************************EXITPROCESS(0) '-------------------------------------------------------------------------------' SUBROUTINES.'-------------------------------------------------------------------------------SUB INITIALISE_OBJECT(BYVAL OBJECT_NUMBER AS SHORT) DIM AS INTEGER L DIM AS DOUBLE RX,RY,RZ'-------------------------------------------------------------------------------' CHOOSE AN OBJECT!'------------------------------------------------------------------------------- SELECT CASE OBJECT_NUMBER CASE 1 VERT_READ=70:' 70 VERTICES IN OBJECT FACE_READ=56:' 56 FACE IN OBJECT CASE 2 VERT_READ=34:' 34 VERTICES IN OBJECT FACE_READ=24:' 24 FACE IN OBJECT CASE 3 VERT_READ=79:' 79 VERTICES IN OBJECT FACE_READ=59:' 59 FACE IN OBJECT CASE 4 VERT_READ=61:' 61 VERTICES IN OBJECT FACE_READ=49:' 49 FACE IN OBJECT CASE 5 VERT_READ=70:' 70 VERTICES IN OBJECT FACE_READ=48:' 48 FACE IN OBJECT CASE 6 VERT_READ=78:' 78 VERTICES IN OBJECT FACE_READ=58:' 58 FACE IN OBJECT CASE 7 VERT_READ=42:' 42 VERTICES IN OBJECT FACE_READ=33:' 33 FACE IN OBJECT CASE ELSE END SELECT '--------------------------------------------------------------------------- ' READ OBJECT '--------------------------------------------------------------------------- '----------------------------------------------------------------------- ' VERTICES; '----------------------------------------------------------------------- FOR L=1 TO VERT_READ READ RX,RY,RZ OBJ_X(L) = RX*XSCALE OBJ_Y(L) = RY*YSCALE OBJ_Z(L) = RZ*ZSCALE NEXT '----------------------------------------------------------------------- 'CONNECTIONS; '----------------------------------------------------------------------- FOR L=1 TO FACE_READ READ CONNECT1(L) READ CONNECT2(L) READ CONNECT3(L) NEXT END SUB'*******************************************************************************'*'* DRAW OBJECT : USAGE:'* DRAW_OBJECT ( X , Y , Z , COLOUR )'* X,Y,Z (FLOATING POINT)'* COLOUR = &HRRGGBB'*******************************************************************************SUB DRAW_OBJECT(BYVAL OX AS DOUBLE, BYVAL OY AS DOUBLE, BYVAL OZ AS DOUBLE, BYVAL OC AS UINTEGER) DIM AS INTEGER L DIM AS DOUBLE HALFX,HALFY HALFX = (XRES SHR 1) HALFY = (YRES SHR 1) '--------------------------------------------------------------------------- ' TRANSFORM AND STORE POINTS; '--------------------------------------------------------------------------- FOR L=1 TO VERT_READ TX(L)=((OBJ_X(L)+OX) / (OBJ_Z(L)+OZ))+HALFX TY(L)=((OBJ_Y(L)+OY) / (OBJ_Z(L)+OZ))+HALFY NEXT '--------------------------------------------------------------------------- ' DRAW THE OBJECT; '--------------------------------------------------------------------------- FOR L=1 TO FACE_READ TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC) NEXT END SUBSUB TRIANGLE(BYVAL X1 AS INTEGER , BYVAL Y1 AS INTEGER, BYVAL X2 AS INTEGER , BYVAL Y2 AS INTEGER , BYVAL X3 AS INTEGER, BYVAL Y3 AS INTEGER , BYVAL TC AS UINTEGER)'-------------------------------------------------------------------------------' FLAT TRIANGLE RENDERER BY SHOCKWAVE 2006.'' USAGE : TRIANGLE ( X1 , Y1 , X2 , Y2 , X3 , Y3 , &HRRGGBB)' CLIPS TO SCREEN BOUNDARIES DEFINED AS XRES AND YRES.''-------------------------------------------------------------------------------'-------------------------------------------------------------------------------' WE NEED TO SORT THE POINTS INTO ORDER FROM TOP TO BOTTOM, EXCHANGE SORT IS OK.' AS WE ONLY HAVE GOT 3 POINTS TO ARRANGE.'------------------------------------------------------------------------------- DIM AS INTEGER TEMPX,TEMPY,LO,LI DIM AS INTEGER PX(3) DIM AS INTEGER PY(3) DIM TFLAG AS INTEGER DIM PP AS UINTEGER PTR DIM AS INTEGER IL1,IL2,SLICE TFLAG=0 PX(1)= X1 PX(2)= X2 PX(3)= X3 PY(1)= Y1 PY(2)= Y2 PY(3)= Y3FOR LO = 1 TO 2 FOR LI =1 TO 2 IF PY(LI+1) <= PY(LI) THEN TEMPX = PX(LI) : TEMPY = PY(LI) PX(LI) = PX(LI+1) PY(LI) = PY(LI+1) PX(LI+1) = TEMPX PY(LI+1) = TEMPY END IF NEXT LINEXT LO'-------------------------------------------------------------------------------' BOOT OUT INVISIBLE TRIANGLES!'------------------------------------------------------------------------------- IF PX(1)<0 AND PX(2)<0 AND PX(3)< 0 THEN TFLAG=1 IF PX(1)>XRES AND PX(2)>XRES AND PX(3)>XRES THEN TFLAG=1 IF PY(1)>YRES AND PY(2)>YRES AND PY(3)>YRES THEN TFLAG=1 DIM AS DOUBLE XP1,XP2:' SCREEN POSITIONS. DIM AS DOUBLE XI1,XI2:' INTERPOLATIONS. '-------------------------------------------------------------------------------' REGULAR TRIANGLE (Y1<Y2 Y2<Y3)'-------------------------------------------------------------------------------IF PY(1)<PY(2) AND PY(2)<PY(3) or (PY(2) = PY(3)) THEN TFLAG=1XP1 = PX(1)XP2 = PX(1)XI1 = (PX(1)-PX(2)) / (PY(2) - PY(1))XI2 = (PX(1)-PX(3)) / (PY(3) - PY(1))FOR LO = PY(1) TO PY(2)-1 IF LO>=0 AND LO<YRES THEN IF XP1<=XP2 THEN IL1=XP1 IL2=XP2 ELSE IL1=XP2 IL2=XP1 END IF IF IL2>XRES THEN IL2=XRES IF IL1<0 THEN IL1=0 SLICE = IL2-IL1IF SLICE>0 THEN PP = @BUFFER(IL1+(LO*XRES)) ASM MOV EAX,DWORD ptr[TC] MOV ECX, [SLICE] MOV EDI, [PP] REP STOSD END ASM END IF END IFXP1=XP1-XI1XP2=XP2-XI2NEXTXI1 = (PX(2)-PX(3)) / (PY(3) - PY(2))XP1 = PX(2)FOR LO = PY(2) TO PY(3)IF LO>=0 AND LO<YRES THEN IF XP1<=XP2 THEN IL1=XP1 IL2=XP2 ELSE IL1=XP2 IL2=XP1 END IF IF IL2>XRES THEN IL2=XRES IF IL1<0 THEN IL1=0 SLICE = IL2-IL1 IF SLICE>0 THEN PP = @BUFFER(IL1+(LO*XRES)) ASM MOV EAX,DWORD ptr[TC] MOV ECX, [SLICE] MOV EDI, [PP] REP STOSD END ASM END IFEND IFXP1=XP1-XI1XP2=XP2-XI2NEXTEND IF'-------------------------------------------------------------------------------' FLAT TOPPED TRIANGLE Y1=Y2'-------------------------------------------------------------------------------IF TFLAG=0 AND PY(1) = PY(2) THEN TFLAG=1 XP1 = PX(1) XP2 = PX(2) XI1 = (PX(1)-PX(3)) / (PY(3) - PY(1)) XI2 = (PX(2)-PX(3)) / (PY(3) - PY(2))FOR LO = PY(1) TO PY(3) IF LO>=0 AND LO<YRES THEN IF XP1<=XP2 THEN IL1=XP1 IL2=XP2 ELSE IL1=XP2 IL2=XP1 END IF IF IL2>XRES THEN IL2=XRES IF IL1<0 THEN IL1=0 SLICE = IL2-IL1 IF SLICE>0 THEN PP = @BUFFER(IL1+(LO*XRES)) ASM MOV EAX,DWORD ptr[TC] MOV ECX, [SLICE] MOV EDI, [PP] REP STOSD END ASM END IFEND IF XP1=XP1-XI1 XP2=XP2-XI2NEXTEND IFEND SUBOBJECT1:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70' "BYE.BYE"'VERTICES : 70DATA -38,-9,0,-38,9,0,-28,9,0,-28,6,0,-31,0,0,-28,-6,0,-28,-9,0,-35,-6,0,-35,6,0,-31,6,0,-34,0,0,-31,-6,0,-26,-9,0,-23,5,0,-23,9,0,-19,9,0,-19,5,0,-16,-9,0DATA -19,-9,0, -21,-1,0, -23,-9,0, -14,-9,0, -14,9,0, -4,9,0, -4,6,0, -11,6,0, -11,1,0, -6,1,0, -6,-1,0, -11,-1,0, -11,-6,0, -4,-6,0, -4,-9,0, -2,9,0DATA -2,4,0,2,4,0,2,9,0,4,-9,0,4,9,0,14,9,0,14,6,0,11,0,0,14,-6,0,14,-9,0,7,-6,0,7,6,0,11,6,0,8,0,0,11,-6,0DATA 16,-9,0,19,5,0,19,9,0,23,9,0,23,5,0,26,-9,0,23,-9,0,21,-1,0,19,-9,0,28,-9,0,28,9,0,38,9,0,38,6,0DATA 31,6,0,31,1,0,36,1,0,36,-1,0,31,-1,0,31,-6,0,38,-6,0,38,-9,0'FACES : 56DATA 1,2,8,2,8,9,2,9,3,9,3,10DATA 10,3,4,10,4,5,10,11,5,11DATA 5,6,11,12,6,12,6,7,12,7,1,8,12,1DATA 13,21,14,14,20,21,19,18,17,19,20,17,14,20,17,14,17,15,15,16,17DATA 22,23,26,22,26,31,23,26,24,26,24,25,27,28,29,27,29,30,22,31,32,22,32,33DATA 34,35,36,34,36,37DATA 38,39,46,38,46,45,39,46,40,46,40,41,47,41,42,47,42,48,48,42,43,48,49,43,43,44,49,38,45,49,38,49,44DATA 50,51,58,51,58,57,51,57,54,57,54,56,56,54,55,51,52,53,51,53,54DATA 59,60,63,59,68,63,60,63,61,63,61,62,64,65,66,64,66,67,68,69,70,68,70,59OBJECT2:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :34'VERTICES: 34DATA -21,-10,0,-19,1,0,-15,1,0,-13,-10,0,-19,5,0,-19,10,0,-15,10,0,-15,5,0,-11,-10,0DATA -11,10,0,-8,10,0,-8,-7,0,-6,-7,0,-4,-4,0,-4,10,0,-1,10,0,-1,-7,0,-3,-10,0,1,-10,0,1,10,0,11,10,0,11,-10,0DATA 4,-7,0,4,7,0,8,7,0,8,-7,0,13,-10,0,15,1,0,19,1,0DATA 21,-10,0,15,5,0,15,10,0,19,10,0,19,5,0' FACES: 24DATA 1,2,3,1,3,4DATA 5,6,7,5,7,8DATA 9,10,11,9,11,12,9,12,18,12,18,13,13,18,17,13,17,14,14,17,15,15,16,17DATA 19,20,24,19,24,23,24,20,21,24,21,25,21,22,25,22,25,26,22,19,26,19,23,26DATA 27,28,29,27,29,30,31,32,33,31,33,34OBJECT3:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :79'VERTICES:79DATA -44,-10,0,-44,10,0,-41,10,0,-41,-7,0,-40,-7,0,-40,10,0,-38,10,0,-38,-7,0,-37,-7,0,-37,10,0,-34,10,0,-34,-7,0,-37,-10,0DATA -32,-10,0,-32,10,0,-29,10,0,-29,-7,0,-25,-7,0,-27,0,0,-25,7,0,-25,10,0,-22,10,0,-22,7,0,-24,0,0,-22,-7,0,-22,-10,0,-20,6,0DATA -20,10,0,-16,10,0,-16,6,0,-14,-10,0,-11,10,0,-7,10,0,-4,-10,0,-6,-10,0,-9,6,0,-12,-10,0,-2,-10,0,-2,-6,0,2,-6,0,2,6,0,-2,6,0,-2,10,0,9,10,0DATA 9,6,0,5,6,0,5,-6,0,9,-6,0,9,-10,0,11,-10,0,11,10,0,21,10,0,21,-2,0,18,-10,0,14,-7,0,14,7,0,18,7,0,18,-4,0,16,-7,0DATA 23,-10,0,23,10,0,33,10,0,33,6,0,26,6,0,26,1,0,31,1,0,31,-1,0,26,-1,0,26,-6,0,33,-6,0,33,-10,0,35,-10,0DATA 35,10,0,45,10,0,45,-10,0,38,-7,0,38,7,0,42,7,0,42,-7,0'FACES:59DATA 1,2,3,1,3,4,5,6,7,5,7,8,9,12,11,9,10,11,1,4,12,1,12,13DATA 14,17,15,15,16,17,14,17,26,17,26,18,26,18,25,18,25,19,25,19,24,19,24,20,24,20,23,20,21,22,20,22,23,27,28,29,27,29,30DATA 31,32,37,37,32,36,32,36,33,36,33,34,34,35,36DATA 38,39,48,38,48,49,42,43,44,42,44,45,40,41,46,40,46,47DATA 50,51,56,50,55,56,51,52,56,56,57,52,52,57,53,53,58,57,58,53,59,59,54,52,50,54,55,54,55,59DATA 53,54,58DATA 60,61,64,60,64,69,60,69,71,69,70,71,65,66,67,65,67,68,61,64,62,64,62,63DATA 72,73,77,72,77,76,73,74,77,77,78,74,74,78,75,78,79,75,72,76,79,72,75,79OBJECT4:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :61'VERTICES : 61DATA -35,-10,0,-35,10,0,-25,10,0,-25,7,0,-32,7,0,-32,-7,0,-25,-7,0,-25,-10,0DATA -23,-10,0,-23,10,0,-13,10,0,-13,-10,0,-20,-7,0,-20,7,0,-16,7,0,-16,-7,0,-11,-10,0,-11,10,0DATA -8,10,0,-8,5,0,-1,5,0,-1,-10,0,-8,-7,0,-8,2,0,-4,2,0,-4,-7,0,1,-10,0DATA 1,10,0,4,10,0,4,5,0,11,5,0,11,-10,0,4,-7,0,4,2,0,8,2,0,8,-7,0DATA 13,-10,0,13,10,0,24,10,0,24,7,0,16,7,0,16,1,0,22,1,0,22,-1,0,16,-1,0DATA 16,-7,0,24,-7,0,24,-10,0,26,-10,0,26,10,0,29,10,0,29,-7,0,32,-7,0DATA 30,0,0,32,7,0,32,10,0,35,10,0,35,7,0,33,0,0,35,-7,0,35,-10,0'' FACES : 49DATA 1,2,5,1,6,5,2,3,4,2,4,5,1,8,6,6,8,7DATA 9,10,14,9,14,13,10,11,14,14,15,11,15,11,12,15,12,16,9,12,13,13,12,16DATA 17,18,19,17,23,19,20,21,25,24,20,25,21,22,25,25,26,22,17,22,23,22,23,26DATA 37,38,41,37,41,46,37,46,48,46,47,48,38,39,40,38,40,41,42,43,44,42,44,45DATA 49,50,51,49,51,52,49,52,53,49,53,61,61,60,53DATA 53,54,59,59,60,53,54,55,58,54,58,59,55,56,57,55,57,58DATA 27,28,29,27,33,29,30,31,34,34,35,31,31,32,35,35,36,32,27,32,36,27,33,36OBJECT5:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :70'VERTICES: 70DATA -35,-10,0,-35,10,0,-32,10,0,-32,-7,0,-31,-7,0,-31,10,0,-29,10,0,-29,-7,0,-28,-7,0,-28,10,0DATA -25,10,0,-25,-7,0,-28,-10,0,-23,-10,0,-23,10,0,-20,10,0,-20,5,0,-16,5,0,-16,10,0,-13,10,0DATA -13,-10,0,-20,-6,0,-20,1,0,-16,1,0,-16,-6,0,-11,-10,0,-11,2,0,-4,2,0,-4,6,0,-11,6,0DATA -11,10,0,-1,10,0,-1,-2,0,-8,-2,0,-8,-6,0,-1,-6,0,-1,-10,0,1,-10,0,1,-6,0,4,-6,0DATA 4,10,0,8,10,0,8,-6,0,11,-6,0,11,-10,0,13,-10,0,13,10,0,23,10,0,23,6,0DATA 16,6,0,16,1,0,21,1,0,21,-1,0,16,-1,0,16,-6,0,23,-6,0,23,-10,0,25,-10,0,25,10,0DATA 28,10,0,28,-7,0,32,-7,0,30,0,0,32,6,0,32,10,0,35,10,0,35,6,0,33,0,0,35,-7,0,35,-10,0'FACES: 48DATA 1,2,3,1,3,4,1,4,12,1,12,13,5,6,7,5,7,8,9,10,11,9,11,12DATA 14,15,16,14,16,22,14,22,25,14,25,21,19,20,21,25,21,19,17,18,24,17,24,23DATA 26,27,34,26,34,35,26,36,35,26,36,37,27,28,33,27,33,34,28,29,32,28,32,33,30,31,32,30,32,29DATA 38,39,44,38,44,45,40,41,42,40,42,43DATA 46,47,50,46,50,55,46,55,56,46,56,57,51,52,53,51,53,54,47,48,49,47,49,50DATA 58,59,60,58,60,61,58,70,69,58,69,61,62,63,68,62,68,69,63,64,67,63,67,68,64,65,66,64,66,67OBJECT6:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :78DATA -41,-10,0,-41,10,0,-31,10,0,-31,7,0,-38,7,0,-38,-7,0,-31,-7,0,-31,-10,0,-29,-10,0,-29,10,0,-19,10,0,-19,-10,0DATA -26,-7,0,-26,7,0,-22,7,0,-22,-7,0,-17,-10,0,-17,10,0,-14,10,0,-14,-7,0,-10,-7,0,-12,0,0,-10,6,0,-10,10,0DATA -7,10,0,-7,6,0,-9,0,0,-7,-7,0,-7,-10,0,-5,-10,0,-5,2,0,2,2,0,2,6,0,-5,6,0,-5,10,0,5,10,0DATA 5,-2,0,-2,-2,0,-2,-6,0,5,-6,0,5,-10,0,7,-10,0,7,10,0,10,10,0,10,5,0,14,5,0,14,10,0,17,10,0DATA 17,-10,0,10,-7,0,10,1,0,14,1,0,14,-7,0,19,-10,0,19,-6,0,23,-6,0,23,6,0,19,6,0,19,10,0,29,10,0DATA 29,6,0,25,6,0,25,-6,0,29,-6,0,29,-10,0,31,-10,0,31,10,0,34,10,0,34,-7,0,38,-7,0,36,0,0,38,6,0DATA 38,10,0,41,10,0,41,6,0,39,0,0,41,-7,0,41,-10,0'FACES: 58DATA 1,2,5,1,5,6,1,6,7,1,7,8,2,3,4,2,4,5DATA 9,10,14,9,13,14,9,13,16,9,16,12,10,11,14,14,11,15,11,12,15,15,12,16DATA 17,18,19,17,19,20,17,20,28,17,28,29,21,28,27,21,27,22,22,23,26,22,26,27,23,24,25,23,26,25DATA 30,31,38,30,38,39,30,39,40,30,40,41,31,32,37,31,37,38,32,33,36,32,36,37,33,34,35,33,35,36DATA 42,43,44,42,44,50,42,50,53,42,53,49,47,48,49,47,49,53,45,46,52,45,51,52DATA 54,55,64,54,64,65,56,57,62,56,62,63,58,59,60,58,60,61DATA 66,67,68,68,69,66,69,77,78,66,69,78,70,71,76,70,76,77,71,72,75,71,75,76,72,73,74,72,74,75OBJECT7:'GENERATED WITH SHOCKWAVES 2D EDITOR. POINTS IN DOT OBJECT :42DATA -23,-10,0,-23,10,0,-20,10,0,-20,-7,0,-19,-7,0,-19,10,0,-17,10,0,-17,-7,0,-16,-7,0,-16,10,0,-13,10,0DATA -13,-7,0,-16,-10,0,-11,-10,0,-11,10,0,-1,10,0,-1,-10,0,-8,-7,0,-8,7,0,-4,7,0,-4,-7,0DATA 1,-10,0,1,10,0,11,10,0,11,6,0,8,0,0,11,-6,0,11,-10,0,4,-7,0,4,7,0,8,7,0,5,0,0,8,-7,0DATA 13,-10,0,16,5,0,16,10,0,20,10,0,20,5,0,23,-10,0,20,-10,0,18,-2,0,16,-10,0'FACES:33DATA 1,2,3,1,3,4,1,4,12,1,13,12,5,6,7,5,7,8,9,10,11,9,11,12DATA 14,15,19,14,19,18,14,18,21,14,21,17,15,16,19,19,16,20,20,21,17,20,16,17DATA 22,23,30,22,29,30,22,29,27,22,27,28,23,24,25,23,30,25,33,27,26,26,32,33,31,32,26,31,26,25DATA 34,35,42,41,42,35,38,39,40,38,40,41,35,38,41,35,36,37,35,37,38
FOR L=1 TO FACE_READ TRIANGLE(TX(CONNECT1(L)),TY(CONNECT1(L)),TX(CONNECT2(L)),TY(CONNECT2(L)),TX(CONNECT3(L)),TY(CONNECT3(L)), OC)NEXT