Tutorial 3: Drag n Drop
Dans ce tutorial nous allons donc voir comment afficher la position de l'atomic sélectionné et comment ajouter un autre objet grâce au Drag n Drop.
Affichage de la position
Drag'n Drop
La première chose à faire c'est d'ajouter une variable ShowPos
| static
RwBool FPSOn = FALSE; static RwBool ShowPos = FALSE; |
Ensuite il faut ajouter ensuite la ligne dans InitializeMenu() qui permet d'indiquer qu'il y a une nouvelle ligne dans le menu:
| static RwBool InitializeMenu(void) { static RwChar fpsLabel[] = RWSTRING("FPS_F"); static RwChar nearLabel[] = RWSTRING("Near Clip"); static RwChar farLabel[] = RWSTRING("Far Clip"); static RwChar showLabel[] = RWSTRING("Show Position"); if( MenuOpen(TRUE,
&ForegroundColor, &BackgroundColor) ) return
TRUE; return FALSE; |
C'est la fonction DisplayOnScreenInfo() qui affiche ce qu'il faut à l'écran. Donc nous allons dire que si ShowPos est à true, on affiche la position de l'objet sélectionné.
| static
void DisplayOnScreenInfo(RwCamera *camera) { RwChar caption[256]; RtCharsetDesc charsetDesc; RwInt32 crw, crh; crw = RwRasterGetWidth(RwCameraGetRaster(camera)); RtCharsetGetDesc(Charset, &charsetDesc); if( FPSOn ) RsCharsetPrint( Charset, caption,
0, 0, rsPRINTPOSTOPRIGHT ); if( ShowPos ) //on affiche
la position RsCharsetPrint( Charset,caption,0,2,rsPRINTPOSTOPRIGHT); return; |
On compile, on exécute, on apûie sur F1, on met en place le cube et on affiche sa position.

Pour ajouter le [S], pour indiquer qu'il faut appuyer sur S pour afficher la position, il suffit d'ajouter "_S" à la suite du showLabel. Maintenant, on va apprendre le Drag'n Drop.
La première étape est de rajouter le code qui va gérer l'événement rsFILELOAD dans AppEventHandler(). Pour se faire, il faut copier le code qui est ecécuté lors de l'appui de F1 dans cette partie du gestionnaire.
| case rsFILELOAD: { RpClump *clump = DffLoad("models/cube.dff"); if (clump) { RwV3d v = {0.0f, 0.0f, 5.0f}; RwFrameTranslate(RpClumpGetFrame(clump), &v, rwCOMBINEREPLACE); return rsEVENTPROCESSED; |
On compile et on exécute. Maintenant, à chaque fois qu'on clique dépose un fichier dans l'application, alors un cube est dessiné comme lorsqu'on appuie sur F1. C'est bien mais ça serait plus intéressant que ça affiche le fichier que l'on dépose!! En fait, le paramètre passé à AppEventHandler() contient le nom du fichier déposé. IL n'y a donc pas grand chose à rajouter:
| case rsFILELOAD: { RwChar * name = (RwChar*)param; RpClump *clump = DffLoad(name); if (clump) RwFrameTranslate(RpClumpGetFrame(clump),
&v, rwCOMBINEREPLACE); return rsEVENTPROCESSED; |
Ainsi, à chaque fois qu'on lit un fichier .DFF, il s'affiche automatiquement
dans l'application.
On compile, on exécute, et on dépose des fichiers dans l'application.

Nous avons fini avec les intéractions avec l'utilisateur. Nous allons voir dans le tutorial suivant comment créer des plug-ins. Tutorial4