commit f4b93bd2f8e08fdc0a27b3b988e77875fe7494e7
parent 014ef1e6f00a519da3b23b4956112205414688e8
Author: Benjamin Piaud <benjamin.piaud@meso-star.com>
Date: Tue, 4 Oct 2022 15:59:13 +0200
Parsing prototype file for city implatation
Diffstat:
| M | src/cg_city.c | | | 111 | ++++++++++++------------------------------------------------------------------- |
| M | src/cg_parsing.c | | | 39 | ++++++++++++++++++++++++++------------- |
2 files changed, 42 insertions(+), 108 deletions(-)
diff --git a/src/cg_city.c b/src/cg_city.c
@@ -34,8 +34,7 @@ city_init(struct logger* logger, struct city* city, struct args* args)
char* line = NULL;
struct building* building = NULL;
struct building b;
- struct data_model0 data0, data1;
- /*struct ground ground;*/
+ struct data_model0 data0;
ERR(txtrdr_file(NULL, str_cget(&args->city_model_file), '#', &reader));
@@ -44,9 +43,20 @@ parse:
while (txtrdr_get_line(reader)){
line = txtrdr_get_line(reader);
ERR(strtolower(line, line));
- /*if (strcmp(line, "[building]") == 0) {*/
- /*parse_building(reader);*/
- /*goto parse;*/
+ if (strcmp(line, "[building]") == 0) {
+ ERR(parse_building(logger, reader, &b));
+ b.model = MODEL0;
+ b.data = malloc(sizeof(struct data_model0));
+ data0.wall = 0.2;
+ data0.slab = 0.3;
+ *(struct data_model0*)(b.data) = data0;
+ b.build_cad = &build_cad_model0;
+ b.export_stl = &export_stl_model0;
+ b.release = &release_model0;
+ b.build_footprint = &build_footprint_model0;
+ sa_push(city->building, b);
+ goto parse;
+ }
if (strcmp(line, "[ground]") == 0) {
ERR(parse_ground(logger, reader, &city->ground));
goto parse;
@@ -54,98 +64,8 @@ parse:
ERR(txtrdr_read_line(reader));
}
- b.id = 0;
- b.model = MODEL0;
- b.height = 3;
- b.polygon_count = 1;
- b.pg = malloc(b.polygon_count * sizeof(struct pg_polygon));
- ERR(pg_init(&b.pg[0], 4));
- b.pg[0].x[0] = 0; b.pg[0].y[0] = 0;
- b.pg[0].x[1] = 0; b.pg[0].y[1] = 10;
- b.pg[0].x[2] = 10; b.pg[0].y[2] = 10;
- b.pg[0].x[3] = 10; b.pg[0].y[3] = 0;
- b.data = malloc(sizeof(struct data_model0));
- data0.wall = 0.2;
- data0.slab = 0.3;
- *(struct data_model0*)(b.data) = data0;
- b.build_cad = &build_cad_model0;
- b.export_stl = &export_stl_model0;
- b.release = &release_model0;
- b.build_footprint = &build_footprint_model0;
-
- sa_push(city->building, b);
-
- b.id = 1;
- b.model = MODEL0;
- b.height = 3.5;
- b.polygon_count = 1;
- b.pg = malloc(b.polygon_count * sizeof(struct pg_polygon));
- ERR(pg_init(&b.pg[0], 3));
- b.pg[0].x[0] = 20; b.pg[0].y[0] = 0;
- b.pg[0].x[1] = 25; b.pg[0].y[1] = 10;
- b.pg[0].x[2] = 30; b.pg[0].y[2] = 1;
- b.data = malloc(sizeof(struct data_model0));
- data1.wall = 0.15;
- data1.slab = 0.1;
- *(struct data_model0*)(b.data) = data1;
- b.build_cad = &build_cad_model0;
- b.export_stl = &export_stl_model0;
- b.release = &release_model0;
- b.build_footprint = &build_footprint_model0;
-
- sa_push(city->building, b);
-
city->n = sa_size(city->building);
-#define NBUILD 2
- /*building = malloc(NBUILD * sizeof(struct building)); */
-
-/* building[0].id = 0;*/
- /*building[0].model = MODEL0;*/
- /*building[0].height = 3;*/
- /*building[0].polygon_count = 1;*/
- /*building[0].pg = malloc(building[0].polygon_count * sizeof(struct pg_polygon));*/
- /*ERR(pg_init(&building[0].pg[0], 4));*/
- /*building[0].pg[0].x[0] = 0; building[0].pg[0].y[0] = 0;*/
- /*building[0].pg[0].x[1] = 0; building[0].pg[0].y[1] = 10;*/
- /*building[0].pg[0].x[2] = 10; building[0].pg[0].y[2] = 10;*/
- /*building[0].pg[0].x[3] = 10; building[0].pg[0].y[3] = 0;*/
- /*building[0].data = malloc(sizeof(struct data_model0));*/
- /*data0.wall = 0.2;*/
- /*data0.slab = 0.3;*/
- /**(struct data_model0*)(building[0].data) = data0;*/
- /*building[0].build_cad = &build_cad_model0;*/
- /*building[0].export_stl = &export_stl_model0;*/
- /*building[0].release = &release_model0;*/
- /*building[0].build_footprint = &build_footprint_model0;*/
-
-/* building[1].id = 1;*/
- /*building[1].model = MODEL0;*/
- /*building[1].height = 3.5;*/
- /*building[1].polygon_count = 1;*/
- /*building[1].pg = malloc(building[1].polygon_count * sizeof(struct pg_polygon));*/
- /*ERR(pg_init(&building[1].pg[0], 3));*/
- /*building[1].pg[0].x[0] = 20; building[1].pg[0].y[0] = 0;*/
- /*building[1].pg[0].x[1] = 25; building[1].pg[0].y[1] = 10;*/
- /*building[1].pg[0].x[2] = 30; building[1].pg[0].y[2] = 1;*/
- /*building[1].data = malloc(sizeof(struct data_model0));*/
- /*data1.wall = 0.15;*/
- /*data1.slab = 0.1;*/
- /**(struct data_model0*)(building[1].data) = data1;*/
- /*building[1].build_cad = &build_cad_model0;*/
- /*building[1].export_stl = &export_stl_model0;*/
- /*building[1].release = &release_model0;*/
- /*building[1].build_footprint = &build_footprint_model0;*/
-
- /*city->n = NBUILD;*/
- /*city->building = building;*/
-
- /*city->ground.extent[0] = -100; */
- /*city->ground.extent[1] = 100; */
- /*city->ground.extent[2] = -100; */
- /*city->ground.extent[3] = 100; */
- /*city->ground.depth = 3; */
-
exit:
return res;
@@ -185,6 +105,7 @@ city_cad_build(struct logger* logger, struct city* city)
size_t i,n;
ERR(scad_initialize(logger, NULL, 3));
+
/* iterate on building */
n = city->n;
for (i=0; i<n; ++i) {
diff --git a/src/cg_parsing.c b/src/cg_parsing.c
@@ -144,6 +144,7 @@ parse_building
ERR(txtrdr_read_line(reader));
while (txtrdr_get_line(reader)){
size_t id = 0;
+ double height = 0;
char* value = NULL;
line = remove_spaces(txtrdr_get_line(reader));
@@ -153,19 +154,31 @@ parse_building
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 (sscanf(line, "height=%lf", &height) == 1 ) {
+ building->height = height;
+ }
+
+ value = malloc(( strlen(line )) * sizeof(char));
+ if (sscanf(line, "polygon=%s", value) == 1 ) {
+ size_t sz = 0;
+ double polygon[8];
+ if (cstr_to_list_double(value, ',', polygon, &sz, 8)
+ != RES_OK || sz != 8) {
+ logger_print(logger, LOG_ERROR,
+ "[polygon] extent value not valid: 8 values required.\n");
+ res = RES_BAD_ARG;
+ if (value) free(value);
+ goto error;
+ }
+ building->polygon_count = 1;
+ building->pg = malloc(building->polygon_count * sizeof(struct pg_polygon));
+ pg_init(&building->pg[0], 4);
+ building->pg[0].x[0] = polygon[0]; building->pg[0].y[0] = polygon[1];
+ building->pg[0].x[1] = polygon[2]; building->pg[0].y[1] = polygon[3];
+ building->pg[0].x[2] = polygon[4]; building->pg[0].y[2] = polygon[5];
+ building->pg[0].x[3] = polygon[6]; building->pg[0].y[3] = polygon[7];
+ }
+ if (value) free(value);
/*if new section goto check and exit*/
if (sscanf(line, "[%[^]]", value) == 1 ) {