diff --git a/include/parsing.h b/include/parsing.h index 46f2f14..1fa9179 100644 --- a/include/parsing.h +++ b/include/parsing.h @@ -32,4 +32,5 @@ bool model_shutdown(void); char model_get_dim(void); long model_get_dim_value(const char *axis); +char model_get_multiplicity(void); diff --git a/src/graphics/graphics.c b/src/graphics/graphics.c index 142c285..8bcc16c 100644 --- a/src/graphics/graphics.c +++ b/src/graphics/graphics.c @@ -235,14 +235,20 @@ void graphics_model_setup (const int 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); - long space_X = 1; - long space_Y = 1; - long space_Z = 1; + space_X = 1; + space_Y = 1; + space_Z = 1; switch(dimension) { 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] z = %ld\n", space_Z); - - int density_max = space_X * space_Y * space_Z; + density_max = space_X * space_Y * space_Z; 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 */ @@ -282,13 +290,9 @@ void graphics_model_setup (const int stack_id) /* draw_grids_on_space_faces_lines (stack_id, stack->buffer_lines_size, */ /* space_X, space_Y, space_Z); */ - stack->buffer_vertex_0_arrow = - stack->buffer_vertex_size; - stack->buffer_colors_0_arrow = - stack->buffer_colors_size; - stack->buffer_lines_0_arrow = - stack->buffer_lines_size; - + stack->buffer_vertex_0_arrow = stack->buffer_vertex_size; + stack->buffer_colors_0_arrow = stack->buffer_colors_size; + stack->buffer_lines_0_arrow = stack->buffer_lines_size; /*------------------------------------------------------------------------*/ diff --git a/src/parsing/parsing.c b/src/parsing/parsing.c index 72a249a..5a6f1d7 100644 --- a/src/parsing/parsing.c +++ b/src/parsing/parsing.c @@ -3,8 +3,8 @@ * * Desc: Model parsing functions * - * Copyright (C) 2023 Arthur Menges - * Copyright (C) 2023 Adrien Bourmault + * Copyright (C) 2023 Jean Sirmai + * Copyright (C) 2024 Adrien Bourmault * * 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)) { // printf(" <>--- line n°%lu <%s>\n", xmlGetLineNo(node), node->name); @@ -105,14 +105,14 @@ static xmlNodePtr getNextChild(xmlNodePtr node, xmlChar *last) return node; } -static xmlChar* splitStrAtSlash(xmlChar *toSplit) +static inline xmlChar* splitStrAtSlash(xmlChar *toSplit) { toSplit = (xmlChar *)xmlStrchr(toSplit, '/'); toSplit = xmlStrsub (toSplit, 1, xmlStrlen(toSplit)); return toSplit; } -static xmlChar* getFirstTag(xmlChar *path) +static inline xmlChar* getFirstTag(xmlChar *path) { xmlChar *preop = path; path = (xmlChar *)xmlStrchr(path, '/'); @@ -124,16 +124,15 @@ static xmlChar* getFirstTag(xmlChar *path) 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); return path; // which is no more the given path but only its last tag ! } -/******************************************************************************/ -/******************************************************************************/ /******************************************************************************/ static xmlNodePtr model_get_node(xmlChar *path) @@ -264,6 +263,32 @@ long model_get_dim_value(const char *axis) 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) { @@ -297,14 +322,6 @@ int model_get_cond (xmlChar *path, xmlChar *node_id) node = getNextChild(node->next, (xmlChar *)"condition"); 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) {