WIP: src/graphics, src/parsing: get multiplicity

This commit is contained in:
Adrien Bourmault 2024-01-12 11:17:40 +01:00
parent 3bb99b5a26
commit 5f2abbda15
3 changed files with 52 additions and 30 deletions

View File

@ -32,4 +32,5 @@ bool model_shutdown(void);
char model_get_dim(void); char model_get_dim(void);
long model_get_dim_value(const char *axis); long model_get_dim_value(const char *axis);
char model_get_multiplicity(void);

View File

@ -235,14 +235,20 @@ void graphics_model_setup (const int stack_id)
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
struct graphic_stack_t *stack = &graphic_stack[stack_id]; struct graphic_stack_t *stack = &graphic_stack[stack_id];
char dimension;
long space_X;
long space_Y;
long space_Z;
int density_max;
char multiplicity;
char dimension = model_get_dim(); dimension = model_get_dim();
g_print("[GRAPH DEBUG] dim = %d\n", dimension); g_print("[GRAPH DEBUG] dim = %d\n", dimension);
long space_X = 1; space_X = 1;
long space_Y = 1; space_Y = 1;
long space_Z = 1; space_Z = 1;
switch(dimension) { switch(dimension) {
case 3: case 3:
@ -265,10 +271,12 @@ void graphics_model_setup (const int stack_id)
g_print("[GRAPH DEBUG] y = %ld\n", space_Y); g_print("[GRAPH DEBUG] y = %ld\n", space_Y);
g_print("[GRAPH DEBUG] z = %ld\n", space_Z); g_print("[GRAPH DEBUG] z = %ld\n", space_Z);
density_max = space_X * space_Y * space_Z;
int density_max = space_X * space_Y * space_Z;
stack->arrows_nb = 0; stack->arrows_nb = 0;
multiplicity = model_get_multiplicity();
g_print("[GRAPH DEBUG] site_multiplicity = %ld\n", multiplicity);
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/
/* S P A C E D R A W I N G */ /* S P A C E D R A W I N G */
@ -282,13 +290,9 @@ void graphics_model_setup (const int stack_id)
/* draw_grids_on_space_faces_lines (stack_id, stack->buffer_lines_size, */ /* draw_grids_on_space_faces_lines (stack_id, stack->buffer_lines_size, */
/* space_X, space_Y, space_Z); */ /* space_X, space_Y, space_Z); */
stack->buffer_vertex_0_arrow = stack->buffer_vertex_0_arrow = stack->buffer_vertex_size;
stack->buffer_vertex_size; stack->buffer_colors_0_arrow = stack->buffer_colors_size;
stack->buffer_colors_0_arrow = stack->buffer_lines_0_arrow = stack->buffer_lines_size;
stack->buffer_colors_size;
stack->buffer_lines_0_arrow =
stack->buffer_lines_size;
/*------------------------------------------------------------------------*/ /*------------------------------------------------------------------------*/

View File

@ -3,8 +3,8 @@
* *
* Desc: Model parsing functions * Desc: Model parsing functions
* *
* Copyright (C) 2023 Arthur Menges <arthur.menges@a-lec.org> * Copyright (C) 2023 Jean Sirmai <jean@a-lec.org>
* Copyright (C) 2023 Adrien Bourmault <neox@a-lec.org> * Copyright (C) 2024 Adrien Bourmault <neox@a-lec.org>
* *
* This file is part of Gem-graph. * This file is part of Gem-graph.
* *
@ -96,7 +96,7 @@ bool model_shutdown(void)
/******************************************************************************/ /******************************************************************************/
static xmlNodePtr getNextChild(xmlNodePtr node, xmlChar *last) static inline xmlNodePtr getNextChild(xmlNodePtr node, xmlChar *last)
{ {
while (node != NULL && xmlStrcmp(node->name, last)) { while (node != NULL && xmlStrcmp(node->name, last)) {
// printf(" <>--- line n°%lu <%s>\n", xmlGetLineNo(node), node->name); // printf(" <>--- line n°%lu <%s>\n", xmlGetLineNo(node), node->name);
@ -105,14 +105,14 @@ static xmlNodePtr getNextChild(xmlNodePtr node, xmlChar *last)
return node; return node;
} }
static xmlChar* splitStrAtSlash(xmlChar *toSplit) static inline xmlChar* splitStrAtSlash(xmlChar *toSplit)
{ {
toSplit = (xmlChar *)xmlStrchr(toSplit, '/'); toSplit = (xmlChar *)xmlStrchr(toSplit, '/');
toSplit = xmlStrsub (toSplit, 1, xmlStrlen(toSplit)); toSplit = xmlStrsub (toSplit, 1, xmlStrlen(toSplit));
return toSplit; return toSplit;
} }
static xmlChar* getFirstTag(xmlChar *path) static inline xmlChar* getFirstTag(xmlChar *path)
{ {
xmlChar *preop = path; xmlChar *preop = path;
path = (xmlChar *)xmlStrchr(path, '/'); path = (xmlChar *)xmlStrchr(path, '/');
@ -124,16 +124,15 @@ static xmlChar* getFirstTag(xmlChar *path)
return xmlStrsub (preop, 0, xmlStrlen(preop) - xmlStrlen(path) - 1); return xmlStrsub (preop, 0, xmlStrlen(preop) - xmlStrlen(path) - 1);
} }
static xmlChar* getLastTag(xmlChar *path) static inline xmlChar* getLastTag(xmlChar *path)
{ {
while ((ulong)xmlStrchr (path, '/')) path = splitStrAtSlash((xmlChar *)path); while ((ulong)xmlStrchr (path, '/'))
path = splitStrAtSlash((xmlChar *)path);
// printf("last tag in the path = <%s>\n", path); // printf("last tag in the path = <%s>\n", path);
return path; // which is no more the given path but only its last tag ! return path; // which is no more the given path but only its last tag !
} }
/******************************************************************************/
/******************************************************************************/
/******************************************************************************/ /******************************************************************************/
static xmlNodePtr model_get_node(xmlChar *path) static xmlNodePtr model_get_node(xmlChar *path)
@ -264,6 +263,32 @@ long model_get_dim_value(const char *axis)
return 0; return 0;
} }
char model_get_multiplicity(void)
{
xmlAttr *attribute;
xmlChar* value;
xmlNodePtr node = model_get_node(
(xmlChar *)"parameters/space-param/site_multiplicity");
if (node->children)
if (node->children->content)
return (char)strtol((char *)node->children->content, NULL, 0);
return 0;
}
char model_get_condition(void)
{
xmlAttr *attribute;
xmlChar* value;
xmlNodePtr node = model_get_node(
(xmlChar *)"parameters/space-param/dimension");
if (xmlHasProp (node, (xmlChar *) "z")) return 3;
if (xmlHasProp (node, (xmlChar *) "y")) return 2;
if (xmlHasProp (node, (xmlChar *) "x")) return 1;
return 0;
}
char model_get_cond_tree (xmlChar *path) char model_get_cond_tree (xmlChar *path)
{ {
@ -297,14 +322,6 @@ int model_get_cond (xmlChar *path, xmlChar *node_id)
node = getNextChild(node->next, (xmlChar *)"condition"); node = getNextChild(node->next, (xmlChar *)"condition");
return 0; return 0;
} }
int model_get_multiplicity (xmlChar *path)
{
xmlNodePtr node = model_get_node(path);
if (node)
return (int)strtol((char *)xmlNodeGetContent(node), NULL, 0);
return 0;
}
int model_get_objects_list(xmlChar *path) int model_get_objects_list(xmlChar *path)
{ {