WIP: Pause ! Erase est OK mais l'ajout des flèches est zarbi+++ sleep(??) lignes 849 et 864

This commit is contained in:
Jean Sirmai 2023-08-12 16:55:32 +02:00
parent 7942e69f5e
commit e2e60dfb37
Signed by: jean
GPG Key ID: FB3115C340E057E3
1 changed files with 32 additions and 25 deletions

View File

@ -34,6 +34,7 @@
#include <GL/glext.h> #include <GL/glext.h>
#include <glib-2.0/glib.h> #include <glib-2.0/glib.h>
#include <math.h> #include <math.h>
#include <time.h>
#include <errno.h> #include <errno.h>
//#include "../../include/base.h" //#include "../../include/base.h"
@ -671,15 +672,14 @@ static bool create_arrow (GLuint *arrows, long weight, long site, long x, long y
weight, site, x, y, z); weight, site, x, y, z);
arrows_nb ++; arrows_nb ++;
buffer_lines_size += 14;
buffer_lines_origin = g_realloc(buffer_lines_origin, buffer_lines_size * 2 * sizeof(GLuint) * 2); buffer_lines_origin = g_realloc(buffer_lines_origin, buffer_lines_size * 2 * sizeof(GLuint) * 2);
*(arrows + buffer_lines_size + 0) = weight; *(arrows + arrows_nb + 0) = weight;
*(arrows + buffer_lines_size + 1) = site; *(arrows + arrows_nb + 1) = site;
*(arrows + buffer_lines_size + 2) = x; *(arrows + arrows_nb + 2) = x;
*(arrows + buffer_lines_size + 3) = y; *(arrows + arrows_nb + 3) = y;
*(arrows + buffer_lines_size + 4) = z; *(arrows + arrows_nb + 4) = z;
buffer_lines_size += 14;
return 1; return 1;
} }
@ -711,6 +711,8 @@ static bool erase_arrow (GLuint *arrows, long address,
static long check_for_arrow (GLuint *arrows, long site, long x, long y, long z) static long check_for_arrow (GLuint *arrows, long site, long x, long y, long z)
{ {
if (arrows_nb == 0) return -1;
long address = -1, f_weight = -1, f_site = -1, f_x = -1, f_y = -1, f_z = -1; long address = -1, f_weight = -1, f_site = -1, f_x = -1, f_y = -1, f_z = -1;
for (int i = 0; i < arrows_nb; i++) for (int i = 0; i < arrows_nb; i++)
{ {
@ -725,7 +727,7 @@ static long check_for_arrow (GLuint *arrows, long site, long x, long y, long z)
if (DETAIL) printf("arrows_nb = %ld checked arrow (%ld,%ld,%ld,%ld) found at address %ld (line %ld)",\ if (DETAIL) printf("arrows_nb = %ld checked arrow (%ld,%ld,%ld,%ld) found at address %ld (line %ld)",\
arrows_nb, site, x, y, z, address, address / 5); arrows_nb, site, x, y, z, address, address / 5);
if (DETAIL && f_weight > 1) printf(" weight = %ld", f_weight); if (DETAIL && f_weight > 1) printf(" weight = %ld", f_weight);
printf("\n"); if (DETAIL) printf("\n");
} }
} }
return address; /* returns the address of the arrow if there is one return address; /* returns the address of the arrow if there is one
@ -733,16 +735,17 @@ static long check_for_arrow (GLuint *arrows, long site, long x, long y, long z)
} }
static void show_arrows_array (GLuint *arrows, long arrows_nb, long address, long weight, long site, long x, long y, long z) static void show_arrows_array (GLuint *arrows, long address, long weight, long site, long x, long y, long z)
{ {
printf("\n\n[ n] load | site x y z ----- < arrows_nb = %ld > -------", arrows_nb); printf("\n[ n] load | site x y z ----- < arrows_nb = %ld > ------", arrows_nb);
if (arrows_nb == address) printf(" graphic state ----------------\n"); if (arrows_nb == 0) printf("--------------------------- no arrows\n");
else printf("------------------------------------------\n"); else if (address == -1) printf("--------------------------- create new arrow\n");
else printf("--------------------------- erase arrow at address = %ld / 5\n", address);
for (int i = 0; i < arrows_nb; i++) for (int i = 0; i < arrows_nb; i++)
{ {
printf("[%2d] = %2d | %2d, %2d, %2d, %2d ",\ printf("[%2d] = %2d | %2d, %2d, %2d, %2d ",\
i, *(arrows + i * 5 + 0), *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ i, *(arrows + i * 5 + 0), *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\
*(arrows + i * 5 + 3), *(arrows + i * 5 + 4)); *(arrows + i * 5 + 3), *(arrows + i * 5 + 4));
if (weight == 0 && i == address / 5) printf(" <<<| < - > (%d, %d, %d, %d) @ [%ld]",\ if (weight == 0 && i == address / 5) printf(" <<<| < - > (%d, %d, %d, %d) @ [%ld]",\
*(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\
@ -751,7 +754,7 @@ static void show_arrows_array (GLuint *arrows, long arrows_nb, long address, lon
*(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\ *(arrows + i * 5 + 1), *(arrows + i * 5 + 2),\
*(arrows + i * 5 + 3), *(arrows + i * 5 + 4), address / 5); *(arrows + i * 5 + 3), *(arrows + i * 5 + 4), address / 5);
if (weight == 0 && i > address / 5 && i < arrows_nb - 1) printf(" |"); if (weight == 0 && i > address / 5 && i < arrows_nb - 1) printf(" |");
if (weight == 0 && i == arrows_nb - 1) printf(" >>>|"); if (weight == 0 && i == arrows_nb - 1 && i != address / 5) printf(" >>>|");
printf("\n"); printf("\n");
} }
} }
@ -759,9 +762,8 @@ static void show_arrows_array (GLuint *arrows, long arrows_nb, long address, lon
static bool set_arrow (GLuint *arrows, long weight, long site, long x, long y, long z) static bool set_arrow (GLuint *arrows, long weight, long site, long x, long y, long z)
{ {
long address = (check_for_arrow (arrows, site, x, y, z)); long address = (check_for_arrow (arrows, site, x, y, z));
if (1) show_arrows_array(arrows, arrows_nb, address, weight, site, x, y, z); show_arrows_array(arrows, address, weight, site, x, y, z);
if (address == -1 && weight == 0) return 0; if (address == -1 && weight == 0) return 0;
if (address == -1 && weight > 0) return create_arrow (arrows, weight, site, x, y, z); if (address == -1 && weight > 0) return create_arrow (arrows, weight, site, x, y, z);
@ -785,8 +787,6 @@ static bool set_arrow (GLuint *arrows, long weight, long site, long x, long y, l
/* Initializes the buffer of a gl_area /* Initializes the buffer of a gl_area
* Calls according to the user preferences * Calls according to the user preferences
* @param gl_area, ptr to the gl_area widget * @param gl_area, ptr to the gl_area widget
@ -846,13 +846,14 @@ void graphics_init_buffers(const void *gl_area)
model_space_size_z * model_space_size_y, model_space_size_z, model_space_size_z * model_space_size_y, model_space_size_z,
arrows, arrows_nb); arrows, arrows_nb);
sleep(0);
set_arrow(arrows, 0, 4, 3, 0, 0); set_arrow(arrows, 0, 4, 3, 0, 0);
set_arrow(arrows, 0, 5, 3, 0, 1); set_arrow(arrows, 0, 5, 3, 0, 1);
set_arrow(arrows, 0, 5, 2, 1, 1); set_arrow(arrows, 0, 5, 2, 1, 1);
set_arrow(arrows, 0, 4, 2, 1, 0); set_arrow(arrows, 0, 4, 2, 1, 0);
set_arrow(arrows, 0, 2, 2, 1, 1); set_arrow(arrows, 0, 2, 2, 1, 1);
set_arrow(arrows, 0, 3, 2, 2, 1); set_arrow(arrows, 0, 3, 2, 2, 1);
set_arrow(arrows, 0, 0, 0, 0, 0); set_arrow(arrows, 0, 0, 0, 0, 0);
set_arrow(arrows, 0, 1, 1, 0, 0); set_arrow(arrows, 0, 1, 1, 0, 0);
set_arrow(arrows, 0, 1, 3, 0, 0); set_arrow(arrows, 0, 1, 3, 0, 0);
@ -860,14 +861,20 @@ void graphics_init_buffers(const void *gl_area)
set_arrow(arrows, 0, 4, 0, 1, 0); set_arrow(arrows, 0, 4, 0, 1, 0);
set_arrow(arrows, 0, 5, 0, 1, 1); set_arrow(arrows, 0, 5, 0, 1, 1);
// set_arrow(arrows, 1, 0, 0, 0, 2); sleep(0);
// set_arrow(arrows, 1, 1, 1, 0, 2);
/* set_arrow(arrows, 1, 2, 0, 0, 2); */
/* set_arrow(arrows, 1, 3, 0, 1, 2); */
// set_arrow(arrows, 2, 1, 1, 0, 2); set_arrow(arrows, 1, 0, 0, 0, 2);
set_arrow(arrows, 1, 1, 1, 0, 2);
if (1) show_arrows_array(arrows, arrows_nb, arrows_nb, -1, -1, -1, -1, -1); // set_arrow(arrows, 0, 0, 0, 0, 2);
// set_arrow(arrows, 0, 1, 1, 0, 2);
set_arrow(arrows, 1, 2, 0, 0, 2);
set_arrow(arrows, 1, 3, 0, 1, 2);
set_arrow(arrows, 3, 1, 1, 0, 2);
if (1) set_arrow(arrows, -1, -1, -1, -1, -1); // I use this to see the variables state
// before "drawing_some_arrows
draw_some_arrows (buffer_lines_origin, s, draw_some_arrows (buffer_lines_origin, s,
model_space_size_z * model_space_size_y, model_space_size_z, model_space_size_z * model_space_size_y, model_space_size_z,