#include // ============ Code rudimentaire pour preparer un objet Fig ============ // Voir en commentaires les hypotheses simplificatrices #define MAX_SEG 50 char * actionNames[] = { "STROKE", "FILL" }; // Un objet Fig aura un nombre maximum de segments (50) typedef struct _Fig { int nb; // nombre reel de "segments" int x[MAX_SEG]; // coordonnees des points int y[MAX_SEG]; float lineW; // largeur du trace (si action "stroke") int action; // 0 : stroke, 1 : fill } Fig; // Creation d'un objet Fig : fixer certaines valeurs d'attributs par defaut Fig newFig( ) { Fig f; f.nb = 0; // pourra etre modifie ensuite par addCoords() f.lineW = 1.; // a la creation, supposer une largeur de trait 1 f.action = 0; // a la creation, supposer une action "stroke" return f; } void addCoords( Fig *fp, int row, int col ) { // y, puis x !! if( fp->nb < MAX_SEG ) { fp->x[fp->nb] = col; fp->y[fp->nb] = row; fp->nb++; } } void setLineWidth( Fig *fp, float lw ) { fp->lineW = lw; } void setAction( Fig *fp, int action ) { fp->action = action; } void checkFig( Fig f ) { int i; printf("----- Fig lw=%f action=%s-----\n", f.lineW, actionNames[f.action] ); for( i=0; i < f.nb; i++ ) printf( "(%d,%d) ",f.x[i], f.y[i] ); printf("\n"); } // ============ Code rudimentaire pour stocker plusieurs objets Fig ============ // Stockage de references dans un tableau : nombre maximum plafonne #define MAX_FIGS 20 typedef struct _FigArray { int nb; Fig figs[MAX_FIGS]; } FigArray; void addFig( FigArray *fap, Fig fp ) { if( fap->nb < MAX_FIGS ) { fap->figs[fap->nb++] = fp; } } void checkFigArray( FigArray fa ) { int i; printf("============== FigArray =================\n"); for( i=0; i < fa.nb; i++ ) checkFig( fa.figs[i] ); } // ========== Pour la Partie II : Code C utilise pour generer de code Java ========= // Simples impressions a partir de structures Fig et FigArray void genFigCode( Fig fg ) { int iPoint; printf( "\nv.content.addJFig( new JFig(\n" ); printf( "new int[] { " ); for( iPoint=0; iPoint < fg.nb-1; iPoint++ ) printf("%d, ", fg.x[iPoint] ); printf("%d },\n", fg.x[iPoint] ); printf( "new int[] { " ); for( iPoint=0; iPoint < fg.nb-1; iPoint++ ) printf("%d, ", fg.y[iPoint] ); printf("%d },\n", fg.y[iPoint] ); printf("%ff,", fg.lineW ); // specif. %ff : pour imprimer 1.f, par exemple printf("JFig.Action.%s ) );\n", actionNames[fg.action] ); } void genAllFigsCode( FigArray fa ) { int iFig; printf( "\n\n======== CODE Java GENERE ========:\n"); for( iFig=0; iFig