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 3f78583426ba0c08dc342b84de08974347be1fc6
parent 1c3062ed61b83dd52a38ce569f47b4d4dd124ae2
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Fri,  2 Dec 2022 12:14:57 +0100

Fix building parsing

Diffstat:
Msrc/cg_parsing.c | 38+++++++++++++++++++++++++++++---------
1 file changed, 29 insertions(+), 9 deletions(-)

diff --git a/src/cg_parsing.c b/src/cg_parsing.c @@ -222,6 +222,7 @@ parse_building { res_T res = RES_OK; char* line = NULL; + int m; (void)logger; ERR(txtrdr_read_line(reader)); @@ -229,20 +230,22 @@ parse_building size_t id = 0; double height = 0; char* value = NULL; + char* tmp; - line = remove_spaces(txtrdr_get_line(reader)); + tmp = txtrdr_get_line(reader); + line = remove_spaces(tmp); ERR(strtolower(line, line)); + value = malloc(( strlen(line )) * sizeof(char)); if (sscanf(line, "id=%lu", &id) == 1 ) { building->id = id; } - if (sscanf(line, "height=%lf", &height) == 1 ) { + else if (sscanf(line, "height=%lf", &height) == 1 ) { building->height = height; } - value = malloc(( strlen(line )) * sizeof(char)); - if (sscanf(line, "polygon=%s", value) == 1 ) { + else if (sscanf(line, "polygon=%s", value) == 1 ) { struct polygon_context pg_ctx = {NULL, NULL, 0}; ERR(scpr_polygon_create(NULL, &building->pg)); @@ -265,21 +268,38 @@ parse_building sa_release(pg_ctx.nvert); } - if (sscanf(line, "model=%s", value) == 1 ) { - building->model = get_enum_value(value); + else if (sscanf(line, "model=model%d", &m) == 1 ) { + switch(m) { + case 0: + building->model = model0; + break; + case 1: + building->model = model1; + break; + default: + res = RES_BAD_ARG; + goto error; + } } - if (sscanf(line, "data=%s", value) == 1 ) { + else if (sscanf(line, "data=%s", value) == 1 ) { building->data_name = malloc(sizeof(struct str)); str_init(NULL, building->data_name); str_set(building->data_name, value); } - if (value) free(value); /*if new section break*/ - if (sscanf(line, "[%[^]]", value) == 1 ) { + else if (sscanf(line, "[%[^]]", value) == 1 ) { break; } + + else { + printf("===> %s \n", line); + res = RES_BAD_ARG; + goto error; + } + + free(value); ERR(txtrdr_read_line(reader)); }