reperage des Agglos avec la souris

This commit is contained in:
Tatiyk
2016-12-29 18:05:14 +01:00
parent 9c675a5c58
commit 5ebb734f0c
6 changed files with 59 additions and 22 deletions

@ -80,6 +80,7 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
// De petits tableaux pour sauvegarder l'adresse de certains objets en mémoire
sfCircleShape *tabPointeursCercle[nbElements];
sfText *tabPointeursTexte[nbElements];
sfCircleShape *tabPointeursCercleAgglos[nbAgglos];
// On affiche la carte !
@ -87,7 +88,7 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
if(mode == GLOBAL)
{
nbPointAgglosMin = getMinAgglo(agglos, nbAgglos);
affichageLogs(window, renderTexture, renderSprite, tabPointConvertis, tabPoint, nbElements, &nbPointsAffiches,nbPointAgglosMin, tabPointeursCercle, aggloConverti, nbAgglos, mode);
affichageLogs(window, renderTexture, renderSprite, tabPointConvertis, tabPoint, nbElements, &nbPointsAffiches, nbPointAgglosMin, tabPointeursCercle, aggloConverti, nbAgglos, tabPointeursCercleAgglos, mode);
while(1)
{
sfTexture *originalTexture = sfTexture_copy(sfRenderTexture_getTexture(renderTexture));
@ -111,9 +112,10 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
renderSprite = loadSpriteFromTexture((sfVector2f){0.0, 0.0}, originalTexture);
sfRenderTexture_drawSprite(renderTexture, renderSprite, NULL);
afficherCoordonneesPoint(&event, renderTexture, &renderSprite, nbPointsAffiches, tabPointeursCercle, tabDateConverties, font);
afficherCoordonneesPoint(window, &event, renderTexture, &renderSprite, nbPointsAffiches, tabPointeursCercle, tabDateConverties, font);
displayBackgroundSprite(window, renderSprite);
selectionnerAgglomerats(window, &event,nbAgglos, tabPointeursCercleAgglos, aggloConverti);
}
}
}
@ -140,7 +142,7 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
}
}
affichageLogs(window, renderTexture, renderSprite, tabPointConvertis, tabPoint, nbElements, &nbPointsAffiches, nbPointAgglosMin, tabPointeursCercle, aggloConverti, nbAgglos, mode);
affichageLogs(window, renderTexture, renderSprite, tabPointConvertis, tabPoint, nbElements, &nbPointsAffiches, nbPointAgglosMin, tabPointeursCercle, aggloConverti, nbAgglos,tabPointeursCercleAgglos, mode);
}
else
@ -153,6 +155,7 @@ ErrEnum controlePoints(sfRenderWindow *window, const char *cheminFichier, Mode m
{
detruireCarte(&mapTexture, &mapSprite, MAPFILE);
detruireCercles(nbElements, tabPointeursCercle);
detruireCercles(nbAgglos, tabPointeursCercleAgglos);
detruireTextes(nbElements, tabPointeursTexte);
sfFont_destroy(font);
free(aggloConverti);

@ -28,7 +28,7 @@ void affichageMenuContinu(sfRenderWindow *const window, sfRenderTexture *renderT
}
void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture, sfSprite *renderSprite, sfVector2f *tabPointConvertis, Point *tabPoint, uint32_t nbElements, uint32_t *nbPointsAffiches, uint32_t nbPointAgglosMin, sfCircleShape *tabPointeursCercle[nbElements], AgglomeratConverti *agglos, uint32_t nbAgglos, const Mode mode)
void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture, sfSprite *renderSprite, sfVector2f *tabPointConvertis, Point *tabPoint, uint32_t nbElements, uint32_t *nbPointsAffiches, uint32_t nbPointAgglosMin, sfCircleShape *tabPointeursCercle[nbElements], AgglomeratConverti *agglos, uint32_t nbAgglos, sfCircleShape *tabPointeursCercleAgglos[nbAgglos], const Mode mode)
{
sfEvent event;
(void)agglos;
@ -81,8 +81,7 @@ void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture,
{
for (uint32_t i = 0; i < nbAgglos; i++)
{
afficherAgglo(renderTexture, agglos[i],&tabPointeursCercle[*nbPointsAffiches], nbPointAgglosMin);
*nbPointsAffiches +=1;
afficherAgglo(renderTexture, &agglos[i],&tabPointeursCercleAgglos[i], nbPointAgglosMin);
}
}
sfRenderTexture_display(renderTexture);
@ -107,20 +106,43 @@ void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture,
}
void afficherCoordonneesPoint(const sfEvent *const event, sfRenderTexture *const renderTexture, sfSprite **renderSprite, const uint32_t nbPointsAffiches, sfCircleShape *tabPointeursCercles[nbPointsAffiches], char **tabDatesConverties, const sfFont *font)
void afficherCoordonneesPoint(sfRenderWindow *const window, sfEvent *event, sfRenderTexture *const renderTexture, sfSprite **renderSprite, const uint32_t nbPointsAffiches, sfCircleShape *tabPointeursCercles[nbPointsAffiches], char **tabDatesConverties, const sfFont *font)
{
for(uint32_t i = 0; i < nbPointsAffiches; i++)
{
sfVector2f positionCercle = sfCircleShape_getPosition(tabPointeursCercles[i]);
if(mouseIsInCircle((sfVector2f){event->mouseMove.x, event->mouseMove.y}, (Cercle){positionCercle, CIRCLERADIUS}))
if(mouseIsInCircle((sfVector2f){event->mouseMove.x - CIRCLERADIUS, event->mouseMove.y - CIRCLERADIUS}, (Cercle){positionCercle, CIRCLERADIUS}))
{
sfText *texte = creerTexte((sfVector2f){positionCercle.x + OFFSETFORDATE, positionCercle.y - OFFSETFORDATE}, tabDatesConverties[i], font, 20, sfBlack);
sfRenderTexture_drawText(renderTexture, texte, NULL);
*renderSprite = loadSpriteFromRenderTexture(renderTexture);
sfText_destroy(texte);
sfRenderWindow_waitEvent(window, event);
if((event->type == sfEvtMouseButtonPressed) && (sfMouse_isButtonPressed(sfMouseRight)))
{
printf("Point numéro : %d\n", i);
}
break;
}
}
}
void selectionnerAgglomerats(sfRenderWindow *const window, sfEvent *event, const uint32_t nbAgglos, sfCircleShape *tabPointeursCerclesAgglos[nbAgglos],AgglomeratConverti *agglos)
{
for(uint32_t i = 0; i < nbAgglos; i++)
{
sfVector2f positionCercle = sfCircleShape_getPosition(tabPointeursCerclesAgglos[i]);
if(mouseIsInCircle((sfVector2f){event->mouseMove.x - agglos[i].tailleCercle, event->mouseMove.y - agglos[i].tailleCercle}, (Cercle){positionCercle,agglos[i].tailleCercle}))
{
sfRenderWindow_waitEvent(window, event);
if((event->type == sfEvtMouseButtonPressed) && (sfMouse_isButtonPressed(sfMouseRight)))
{
printf("Point agglos numéro : %d\n", i);
}
break;
}
}
}

@ -31,10 +31,11 @@ void affichageMenuContinu(sfRenderWindow *const window, sfRenderTexture *renderT
* @param tabPointeursCercle Tableau de pointeurs sur objets de type 'sfCircleShape', pour conserver leur adresse une fois affichés.
* @param agglos Tableau des agglos que l'on va afficher.
* @param nbAgglos Taille de Tableau d'agglos.
* @param tabPointeursCercleAgglos Tableau de pointeurs sur objet e type 'sfCircleShape', contenant les agglos, pour conserver leur adresse une fois affichés.
* @param mode Mode dans lequel on effectue l'affichage !
* @return Procédure.
*/
void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture, sfSprite *renderSprite, sfVector2f *tabPointConvertis, Point *tabPoint, uint32_t nbElements, uint32_t *nbPointsAffiches, uint32_t nbPointAgglosMin, sfCircleShape *tabPointeursCercle[nbElements], AgglomeratConverti *agglos, uint32_t nbAgglos, const Mode mode);
void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture, sfSprite *renderSprite, sfVector2f *tabPointConvertis, Point *tabPoint, uint32_t nbElements, uint32_t *nbPointsAffiches, uint32_t nbPointAgglosMin, sfCircleShape *tabPointeursCercle[nbElements], AgglomeratConverti *agglos, uint32_t nbAgglos, sfCircleShape *tabPointeursCercleAgglos[nbAgglos], const Mode mode);
/**
@ -52,4 +53,8 @@ void affichageLogs(sfRenderWindow *const window, sfRenderTexture *renderTexture,
* @param font Fonte à utiliser pour afficher les dates à côté des points !
* @return Procédure.
*/
void afficherCoordonneesPoint(const sfEvent *const event, sfRenderTexture *const renderTexture, sfSprite **renderSprite, const uint32_t nbPointsAffiches, sfCircleShape *tabPointeursCercles[nbPointsAffiches], char **tabDatesConverties, const sfFont *font);
void afficherCoordonneesPoint(sfRenderWindow *const window, sfEvent *event, sfRenderTexture *const renderTexture, sfSprite **renderSprite, const uint32_t nbPointsAffiches, sfCircleShape *tabPointeursCercles[nbPointsAffiches], char **tabDatesConverties, const sfFont *font);
void selectionnerAgglomerats(sfRenderWindow *const window, sfEvent *event, const uint32_t nbAgglos, sfCircleShape *tabPointeursCerclesAgglos[nbAgglos], AgglomeratConverti *agglos);

@ -37,6 +37,7 @@ struct Agglomerat
uint32_t nbPts;
Route **ptRoute;
double rayon;
double tailleCercle;
};
struct AgglomeratConverti
@ -46,6 +47,7 @@ struct AgglomeratConverti
uint32_t nbPts;
Route **ptRoute;
double rayon;
double tailleCercle;
};

@ -49,34 +49,39 @@ void afficherPoint(sfRenderTexture *const renderTexture, sfVector2f points, sfCi
*ptrCercle = cercle;
}*/
void afficherAgglo(sfRenderTexture *const renderTexture, AgglomeratConverti agglos, sfCircleShape **ptrCercle, uint32_t nbPointAgglosMin)
void afficherAgglo(sfRenderTexture *const renderTexture, AgglomeratConverti *agglos, sfCircleShape **ptrCercle, uint32_t nbPointAgglosMin)
{
sfCircleShape *cercle = NULL;
if (agglos.nbPts <= nbPointAgglosMin * 1.5)
if (agglos->nbPts <= nbPointAgglosMin * 1.5)
{
cercle = creerCercle((sfVector2f){agglos.moy.x, agglos.moy.y}, CIRCLERADIUSAGGLO, sfBlue);
cercle = creerCercle((sfVector2f){agglos->moy.x, agglos->moy.y}, CIRCLERADIUSAGGLO, sfBlue);
agglos->tailleCercle = CIRCLERADIUSAGGLO;
}
else
{
if (agglos.nbPts <= nbPointAgglosMin * 2)
if (agglos->nbPts <= nbPointAgglosMin * 2)
{
cercle = creerCercle((sfVector2f){agglos.moy.x, agglos.moy.y}, CIRCLERADIUSAGGLO * 1.5, sfBlue);
cercle = creerCercle((sfVector2f){agglos->moy.x, agglos->moy.y}, CIRCLERADIUSAGGLO * 1.5, sfBlue);
agglos->tailleCercle = CIRCLERADIUSAGGLO * 1.5;
}
else
{
if (agglos.nbPts <= nbPointAgglosMin * 2.5)
if (agglos->nbPts <= nbPointAgglosMin * 2.5)
{
cercle = creerCercle((sfVector2f){agglos.moy.x, agglos.moy.y}, CIRCLERADIUSAGGLO * 2, sfBlue);
cercle = creerCercle((sfVector2f){agglos->moy.x, agglos->moy.y}, CIRCLERADIUSAGGLO * 2, sfBlue);
agglos->tailleCercle = CIRCLERADIUSAGGLO * 2;
}
else
{
if (agglos.nbPts <= nbPointAgglosMin * 3)
if (agglos->nbPts <= nbPointAgglosMin * 3)
{
cercle = creerCercle((sfVector2f){agglos.moy.x, agglos.moy.y}, CIRCLERADIUSAGGLO * 2.5, sfBlue);
cercle = creerCercle((sfVector2f){agglos->moy.x, agglos->moy.y}, CIRCLERADIUSAGGLO * 2.5, sfBlue);
agglos->tailleCercle = CIRCLERADIUSAGGLO * 2.5;
}
else
{
cercle = creerCercle((sfVector2f){agglos.moy.x, agglos.moy.y}, CIRCLERADIUSAGGLO * 3, sfBlue);
cercle = creerCercle((sfVector2f){agglos->moy.x, agglos->moy.y}, CIRCLERADIUSAGGLO * 3, sfBlue);
agglos->tailleCercle = CIRCLERADIUSAGGLO * 3;
}
}
}

@ -41,7 +41,7 @@ void afficherPoint(sfRenderTexture *const renderTexture, sfVector2f points, sfCi
* @param nbPointAggloMin Nombre de point minimal dans une agglo
* @return Procédure.
*/
void afficherAgglo(sfRenderTexture *const renderTexture, AgglomeratConverti agglos, sfCircleShape **ptrCercle, uint32_t nbPointAgglosMin);
void afficherAgglo(sfRenderTexture *const renderTexture, AgglomeratConverti *agglos, sfCircleShape **ptrCercle, uint32_t nbPointAgglosMin);
/**
* @brief Affiche une carte à partir d'une image et charge les pointeurs ad hoc !