Ejemplo n.º 1
0
int paperapp::executer(void)
{
	/* !! enum corespondant dans gui.hpp !! */
	bool quitter = false;
    _parametresES parametresES;
    parametresES.resx = 1000;
    parametresES.resy = 700;
    parametresES.colorDepth = 32;
//    parametresES.fov = 80;
    parametresES.flags = SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_OPENGL | SDL_RESIZABLE;//| SDL_FULLSCREEN;
    parametresES.winName = "ApplicationPapier - mesh.obj";
    parametresES.retaille = false;

    donneeSouris mState;
    mState.x = 0;
    mState.y = 0;


	Internationalisation It;
	
	champApplicatif champApp;

    std::stringstream concatstr;
    std::string concat;



    _3d temp = {0.0, 0.0, 0.0 };

	_col tmpcol = {255, 255, 255};
	SDL_Surface* screen = NULL;


	int largeur_paneau = 210;

	InitializeGL(screen, parametresES, false);
    GestionEvenements evenements;

	Mesh mesh("mesh.obj");

	/* calcul du ratio UI / render 3d en fonction de la
	 * resolutionde la fenetre et du format souhaité de l'UI ( A4 )
	 */
	int ui_w = largeur_paneau*parametresES.resy/297;
	int render_w = parametresES.resx-ui_w;

	gui ui ( render_w, 0, ui_w, parametresES.resy, &parametresES, &mState, "style_ui.txt", 0, &champApp);
	gui barre_outils_g ( 0, 0, render_w / 20, parametresES.resy, &parametresES, &mState, "style_ui.txt", 0, &champApp);
	gui dock ( render_w/2-200, 0, 400, 40, &parametresES, &mState, "style_ui.txt", 0, &champApp);
	Render rnd ( 0, 0, 200, 100, "style.txt", &champApp);
	rnd.retailler(0, 0, render_w,	parametresES.resy);

    GLubyte p[3];
    int ptr = 0;
	
	champApp.nettoyer();

	/* remplissage ui */
	ui.set_opacitee (0.9);
	ui.nettoyer ();	 
    // id = 0
	ui.arriere_plan(); champApp.ajoutObjet ( UI, "", 0, -1 );

	  concat = It.Ex("zoom in");
    // id = 1
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	
	  concat =  It.Ex("zoom out");
    // id = 2
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 


      concatstr.str("");
      concatstr <<"# ptr : "<< ptr<<" etat de l'element : "<< champApp.don_etat_objet_id (ptr)
				<<" type : "<< champApp.don_type_objet_ID(ptr);
	  concat = concatstr.str();
    // id = 4
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 

	concatstr.str("");
	concatstr << "ne pas afficher";
	concat = concatstr.str();
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	concatstr.str("");
	concatstr << "ne pas afficher";
	concat = concatstr.str();
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	concatstr.str("");
	concatstr << "ne pas afficher";
	concat = concatstr.str();
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	concatstr.str("");
	concatstr << "ne pas afficher";
	concat = concatstr.str();
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	concatstr.str("");
	concatstr << "ne pas afficher";
	concat = concatstr.str();
	ui.ajout_ObjetUI (TEXTE, concat, champApp.ajoutObjet ( TEXTE, concat, ui.don_id_dernier_ajout(), -1 )); 
	
	
 	concat =  It.Ex("Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?");
    // id = 2
	ui.ajout_ObjetUI (PARAGRAPHE, concat, champApp.ajoutObjet ( PARAGRAPHE, concat, ui.don_id_dernier_ajout(), -1)); 


	champApp.ajoutObjet ( RENDER, "main render", 0, -1);
    // id = 11
	champApp.ajoutObjet ( MESH, "mesh", mesh.nsom (), mesh.ntri ());
	champApp.ajoutObjet ( GROUPE_ARRETES, "-", mesh.narr (), 0);
      concatstr.str("");
      concatstr <<It.Ex("mesh :")<< " " << mesh.ntri() << " " << It.Ex("faces,")<<mesh.nsom()<< " " <<It.Ex("verts");
	  concat = concatstr.str();
    // id = 12
	//ui.ajout_ObjetUI (BARRE_ETAT_UI, concat, champApp.ajoutObjet ( BARRE_ETAT_UI, concat, 0, -1 ));
	int ancien_focus = 0;
	int ptr_catch_1 = 0;
	int ptr_catch_2 = 0;
	
	// champApp.afficher_liste ();

	/* Boucle principale
	 * 
	 * 
	 */
	do {

	/* paragraphe destiné a l'utilisateur
		 * 
		 */
	if ( (unsigned int )ptr >= champApp.don_nObjApp () ) ptr = 0;
	evenements.ecouter();


/*		concatstr.str("");
		concatstr << "ne pas afficher";
		concat = concatstr.str();
		ui.modifier_contenu (4, concat );
	*/	if ( champApp.don_quantitee_objets_actifs_type (FACE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some faces are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (FACE);
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those faces");
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
		}		
		else
		{
			concatstr.str("");
			concatstr << "ne pas afficher";
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
		}
		
		if ( champApp.don_quantitee_objets_actifs_type (VERTICE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some vertex are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (VERTICE);
			concat = concatstr.str();
			ui.modifier_contenu (4, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those vertex");
			concat = concatstr.str();
			ui.modifier_contenu (5, concat );
		}
		else
		{
			concatstr.str("");
			concatstr << "ne pas afficher";
			concat = concatstr.str();
			ui.modifier_contenu (4, concat );
			ui.modifier_contenu (5, concat );
		}
		if ( champApp.don_quantitee_objets_actifs_type (ARRETE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some edge are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (ARRETE);
			concat = concatstr.str();
			ui.modifier_contenu (6, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those edge");
			concat = concatstr.str();
			ui.modifier_contenu (7, concat );
		}
		else
		{
			concatstr.str("");
			concatstr << "ne pas afficher";
			concat = concatstr.str();
			ui.modifier_contenu (6, concat );
			ui.modifier_contenu (7, concat );
		}
		
	/* paragraphe destiné a l'utilisateur
	 *


		concatstr.str("");
		concatstr << It.Ex("you re focused on");
		switch (champApp.don_type_objet_ID(ptr))
		{
			case TEXTE :
			concatstr << " " <<It.Ex("a text area : \"");
			if ( ptr != 3 )	concatstr << champApp.don_contenu_objet_ID (ptr);
				else concatstr << " " <<It.Ex("this text area");
			concatstr <<"\"";
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;
			case PARAGRAPHE :
			concatstr << " " <<It.Ex("a text area : \"");
			if ( ptr != 3 )	concatstr << champApp.don_contenu_objet_ID (ptr);
				else concatstr << " " <<It.Ex("this text area");
			concatstr <<"\"";
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;
				
			case FACE :
			concatstr << " " << champApp.don_contenu_objet_ID (ptr);
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;
			case VERTICE :

			concatstr << " " <<  champApp.don_contenu_objet_ID (ptr) ;
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;
			case RENDER :

			concatstr << " " <<It.Ex("background of")<< " " <<  It.Ex(champApp.don_contenu_objet_ID ( ptr));
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;

			default :

			concatstr << "Plusieurs variations de Lorem Ipsum peuvent être trouvées ici ou là, mais la majeure partie d'entre elles a été altérée par l'addition d'humour ou de mots aléatoires qui ne ressemblent pas une seconde à du texte standard. Si vous voulez utiliser un passage du Lorem Ipsum, vous devez être sûr qu'il n'y a rien d'embarrassant caché dans le texte. Tous les générateurs de Lorem Ipsum sur Internet tendent à reproduire le même extrait sans fin, ce qui fait de lipsum.com le seul vrai générateur de Lorem Ipsum. Iil utilise un dictionnaire de plus de 200 mots latins, en combinaison de plusieurs structures de phrases, pour générer un Lorem Ipsum irréprochable. Le Lorem Ipsum ainsi obtenu ne contient aucune répétition, ni ne contient des mots farfelus, ou des touches d'humour.";
			concat = concatstr.str();
			ui.modifier_contenu (3, concat );
				break;
				
		}			
		concatstr.str("");
		concatstr << "ne pas afficher";
		concat = concatstr.str();
		ui.modifier_contenu (4, concat );
		
		concatstr.str("ne pas afficher");
		concat = concatstr.str();
		ui.modifier_contenu (5, concat );
		concatstr.str("ne pas afficher");
		concat = concatstr.str();
		ui.modifier_contenu (6, concat );

		concatstr.str("ne pas afficher");
		concat = concatstr.str();
		ui.modifier_contenu (7, concat );
		concatstr.str("ne pas afficher");
		concat = concatstr.str();
		ui.modifier_contenu (8, concat );
		concatstr.str("ne pas afficher");
		concat = concatstr.str();
		ui.modifier_contenu (9, concat );

		if ( champApp.don_quantitee_objets_actifs_type (FACE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some faces are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (FACE);
			concat = concatstr.str();
			ui.modifier_contenu (4, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those faces");
			concat = concatstr.str();
			ui.modifier_contenu (5, concat );
		}
		if ( champApp.don_quantitee_objets_actifs_type (VERTICE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some vertex are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (VERTICE);
			concat = concatstr.str();
			ui.modifier_contenu (6, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those vertex");
			concat = concatstr.str();
			ui.modifier_contenu (7, concat );
		}
		if ( champApp.don_quantitee_objets_actifs_type (ARRETE) > 1)
		{
			concatstr.str("");
			concatstr <<It.Ex("some edge are selected,")<<" "<<champApp.don_quantitee_objets_actifs_type (ARRETE);
			concat = concatstr.str();
			ui.modifier_contenu (8, concat );
			concatstr.str("");
			concatstr <<It.Ex("unselect those edge");
			concat = concatstr.str();
			ui.modifier_contenu (9, concat );
		}
	

	

      concatstr.str("");
      concatstr <<It.Ex("mesh :")<< " " << champApp.don_quantitee_objets_actifs_type (FACE) <<"/"
				<< mesh.ntri() << " " << It.Ex("faces,")<<champApp.don_quantitee_objets_actifs_type (VERTICE) <<"/"
				<< mesh.nsom()<< " " <<It.Ex("verts")<<" ptr "<< ptr <<" "<<champApp.don_contenu_objet_ID(ptr)/*<<ptr<<It.Ex (champApp.don_contenu_objet_ID(ptr));
	  concat = concatstr.str();

			ui.modifier_contenu (champApp.don_id_objet_TYPE_N (BARRE_ETAT_UI, 0), concat);
	 */
		/* traitement de l evenement recupere */
//ptr = 0;
		if ( evenements.type() != NON ) {
		switch ( evenements.type() )
		{
			case QUIT :

				quitter = true;
				evenements.oublier_evenement();
				break;

			case CATCH_1 :
				ptr_catch_1 = ptr;
				evenements.oublier_evenement();
				break;
			case CATCH_2 :
				ptr_catch_2 = ptr;
				evenements.oublier_evenement();
				break;
			case RELEASE_1 :
			{
				evenements.oublier_evenement();
				if ( ptr == ptr_catch_1 && champApp.don_type_objet_ID (ptr) != TEXTE )
				{

					if ( champApp.don_etat_objet_id (ptr) )
					champApp.desactiver_objet_id (ptr);
					else
					{
						champApp.activer_objet_id (ptr);
						if ( champApp.don_type_objet_ID (ptr) == FACE )
						{
							int t = champApp.don_n_objet_ID (ptr);
							
						}
					}

				}
					
				

				if ( ptr == ptr_catch_1 && champApp.don_contenu_objet_ID (ptr) == It.Ex("unselect those faces") )
				{

					champApp.desactiver_objets_type (FACE);
				}
				if ( ptr == ptr_catch_1 && champApp.don_contenu_objet_ID (ptr) == It.Ex("unselect those vertex") )
				{

					champApp.desactiver_objets_type (VERTICE);
				}
				if ( ptr == ptr_catch_1 && champApp.don_contenu_objet_ID (ptr) == It.Ex("unselect those edge") )
				{

					champApp.desactiver_objets_type (ARRETE);
				}
				if ( ptr == ptr_catch_1 && champApp.don_contenu_objet_ID (ptr) == It.Ex("zoom in") )
				{

					_3d z = {0.0, 0.0, 50.0};
					rnd.zoom (z);
				}
				if ( ptr == ptr_catch_1 && champApp.don_contenu_objet_ID (ptr) == It.Ex("zoom out") )
				{

					_3d z = {0.0, 0.0, -50.0};
					rnd.zoom (z);
				}
			} break;
			case RELEASE_2 :
				evenements.oublier_evenement();
				break;
			case MOVE_1 : {

					
                if ( champApp.don_type_objet_ID (ptr_catch_1) == RENDER)
						rnd.rotation((_3d) {(double)-evenements.veloc().y*0.025,(double)evenements.veloc().x*0.025, 0.0} );

					
				evenements.oublier_evenement();
				} break;
			case MOVE_2 :
				if (  RENDER == champApp.don_type_objet_ID (ptr_catch_2) )
			{
					temp.z = (double) -evenements.veloc().x*25;
                rnd.zoom( temp );
				}
					
				evenements.oublier_evenement();
				break;
			case MOVE_3 : {

					
               // if ( champApp.don_type_objet_ID (ptr_catch_1) == RENDER)
						rnd.rotation((_3d) {(double)-evenements.veloc().y*0.025,(double)evenements.veloc().x*0.025, 0.0} );

					
				evenements.oublier_evenement();
				} break;
			case FOCUS :
			{
			    mState.x = evenements.veloc().x;
                mState.y = evenements.veloc().y;

				if (ptr != ancien_focus )
				{
					if ( champApp.don_etat_objet_id (ancien_focus) )
					champApp.desactiver_objet_id (ancien_focus);
					else
					champApp.activer_objet_id (ancien_focus);
						
					if ( champApp.don_etat_objet_id (ptr) )
						champApp.desactiver_objet_id (ptr);
					else
						champApp.activer_objet_id (ptr);
				}
				ancien_focus = ptr;

			    evenements.oublier_evenement();
				} break;
			/* Redimentionnement fenetre */
			case RESIZE :
				SDL_GetMouseState(&mState.x, &mState.y);
                parametresES.resx = evenements.veloc().x;
                parametresES.resy = evenements.veloc().y;
                screen = NULL;
                parametresES.retaille = true;
                InitializeGL( screen, parametresES, parametresES.retaille );
                parametresES.retaille = false;


				ui_w = largeur_paneau*parametresES.resy/297;
				render_w = parametresES.resx-ui_w;

				ui.retailler ( render_w, 0, ui_w, parametresES.resy);
		        barre_outils_g.retailler ( 0, 0, render_w / 20, parametresES.resy );
				dock.retailler ( render_w/2-200, 0, 400, 40);
				rnd.retailler(0, 0, render_w,	parametresES.resy);
				evenements.oublier_evenement();
				break;

			default : evenements.oublier_evenement();
				break;
		}}
		else evenements.oublier_evenement();

	
		/* Affichage hors ecran
		 *		
		 *	  chaque element graphique est dessine de la couleur corespondante
		 *    a son identifiant au sein de l' application. En tant qu'element
		 *	  applicatif la constituant.
		 * 
		 */	
        glClearColor(0, 0, 0, 1);
        glClear(GL_COLOR_BUFFER_BIT);
        glClear( GL_DEPTH_BUFFER_BIT );

		rnd.arriere_plan_off (champApp.don_id_objet_TYPE_N (RENDER, 0));
 		rnd.afficher_mesh_off(&mesh, tmpcol);
 		rnd.afficher_sommets_mesh_off (&mesh);
/*		if ( afficher_dock )
			dock.dessiner_ObjetsUI_off ();
	*/	ui.dessiner_ObjetsUI_off ();

		/* - lecture du pixel survole  - */
		glReadBuffer ( GL_BACK_LEFT);
        glReadPixels( evenements.position_souis().x ,
                      parametresES.resy - evenements.position_souis().y,
                      1, 1, GL_RGB, GL_UNSIGNED_BYTE, p );
		ptr = p[2]*65536+p[1]*256+p[0];
		if ( ptr >= (int)champApp.don_nObjApp () ) ptr = 0;


		/* Affichage final
		 * 
		 *	  Les memes elements sont affiches, cette fois de maniere visible 
		 *	  et comprehensible par l'utilisateur.
         */ 

        glClearColor(0.0, 0.0, 0.0, 1.0);
        glClear(GL_COLOR_BUFFER_BIT);
        glClear( GL_DEPTH_BUFFER_BIT );

		rnd.arriere_plan ();
 		rnd.afficher_mesh(&mesh, tmpcol);
		rnd.afficher_sommets_mesh( &mesh);

		ui.dessiner_ObjetsUI ();


		glFlush();
        SDL_GL_SwapBuffers();

	} while ( !quitter );
	sauve( (char*) "capture_paperApp.bmp", 0, 0,100, 100);

	cleanSDL();
	return 0;
}