city_generator2

Generated conformal 3D meshes representing a city
git clone git://git.meso-star.fr/city_generator2.git
Log | Files | Refs | README | LICENSE

commit 7292b5ed640c497645b319c208139ca8983c48e0
parent 08e4cfc029f07d21c7fef152649244417baf5792
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date:   Thu, 22 Sep 2022 15:30:52 +0200

Continue with parsing

Diffstat:
Msrc/cg_parsing.c | 68++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/cg_parsing.h | 7+++++++
2 files changed, 75 insertions(+), 0 deletions(-)

diff --git a/src/cg_parsing.c b/src/cg_parsing.c @@ -126,3 +126,71 @@ exit: error: goto exit; } + + +res_T +parse_building + (struct logger* logger, + struct txtrdr* reader, + struct building* building) +{ + res_T res = RES_OK; + char* line = NULL; + + ERR(txtrdr_read_line(reader)); + while (txtrdr_get_line(reader)){ + size_t id = 0; + char* value = NULL; + + line = remove_spaces(txtrdr_get_line(reader)); + ERR(strtolower(line, line)); + + if (sscanf(line, "id=%lf", &id) == 1 ) { + building->id = id; + } + + value = malloc(( strlen(line )) * sizeof(char)); + if (sscanf(line, "extent=%s", value) == 1 ) { + size_t sz = 0; + if (cstr_to_list_double(value, ',', ground->extent, &sz, 4) + != RES_OK || sz != 4) { + logger_print(logger, LOG_ERROR, + "[ground] extent value not valid: 4 values required.\n"); + res = RES_BAD_ARG; + if (value) free(value); + goto error; + } + } + if (value) free(value); + + [>if new section goto check and exit<] + if (sscanf(line, "[%[^]]", value) == 1 ) { + goto check; + } + ERR(txtrdr_read_line(reader)); + } + +check: + [>check depth<] + if (ground->depth <= 0) { + logger_print(logger, LOG_ERROR, + "[ground] depth value not valid: must be > 0.\n"); + res = RES_BAD_ARG; + goto error; + } + + [>check extent<] + if (ground->extent[0] >= ground->extent[1] + || ground->extent[2] >= ground->extent[3]) { + logger_print(logger, LOG_ERROR, + "[ground] extent value not valid: xmax must be > xmin and ymax must be > ymin.\n"); + res = RES_BAD_ARG; + goto error; + } + + +exit: + return res; +error: + goto exit; +} diff --git a/src/cg_parsing.h b/src/cg_parsing.h @@ -21,6 +21,7 @@ #include <rsys/logger.h> #include "cg_ground.h" +#include "cg_building.h" #ifndef PARSING_H #define PARSING_H @@ -33,5 +34,11 @@ parse_ground struct txtrdr* reader, struct ground* ground); +res_T +parse_building + (struct logger* logger, + struct txtrdr* reader, + struct building* building); + #endif /*PARSING_H*/