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 90decfc5cd6fa3564dd8432b1baf7b18d406ae29
parent 7fb16b86948bb957ac8a8d8c93a5a28f761e2d4e
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Mon, 27 Jan 2025 14:37:52 +0100

Create (empty) stardis files

Diffstat:
Msrc/cg_city.c | 31++++++++++++++++++++++++++++++-
Msrc/cg_city.h | 2++
2 files changed, 32 insertions(+), 1 deletion(-)

diff --git a/src/cg_city.c b/src/cg_city.c @@ -384,7 +384,7 @@ create_city = SCPR_INTERSECTOR_CHECK_CALLBACKS_NULL__; struct callback_ctx ctx = CB_CTX_NULL__; struct scpr_polygon* tmp_polygon = NULL; - struct str name; + struct str name, filename; int error_occured = 0; struct building* building = NULL; struct darray_polygons offset_polygons; @@ -395,6 +395,7 @@ create_city time_current(&t0); str_init(allocator, &name); + str_init(allocator, &filename); darray_polygons_init(allocator, &offset_polygons); htable_names_init(allocator, &names); @@ -426,6 +427,25 @@ create_city city->dump_footprints_level = args->dump_footprints_level; htable_names_init(allocator, &city->dump_footprint_names); htable_common_init(allocator, &city->common); + ERR(str_printf(&filename, "%s.txt", args->stardis_basename)); + city->stardis_model = fopen(str_cget(&filename), "w"); + if(!city->stardis_model) { + logger_print(logger, LOG_ERROR, + "Cannot create stardis model file: '%s'.\n", + str_cget(&filename)); + res = RES_IO_ERR; + goto error; + } + ERR(str_printf(&filename, "%s.sh", args->stardis_basename)); + city->set_vars = fopen(str_cget(&filename), "w"); + if(!city->set_vars) { + logger_print(logger, LOG_ERROR, + "Cannot create stardis shell script file: '%s'.\n", + str_cget(&filename)); + res = RES_IO_ERR; + goto error; + } + ground_init(allocator, &city->ground); ERR(vertex_denoiser_create(allocator, pow(10, -(CLIPPER_PRECISON+2)), &city->denoiser)); @@ -590,6 +610,7 @@ create_city ERR(scpr_intersector_check(close_intersector, &callbacks, &ctx)); exit: + str_release(&filename); str_release(&name); darray_polygons_release(&offset_polygons); if(tmp_polygon) SCPR(polygon_ref_put(tmp_polygon)); @@ -630,6 +651,14 @@ release_city(struct city* city) res = RES_BAD_ARG; goto error; } + if(city->stardis_model) { + fclose(city->stardis_model); + city->stardis_model = NULL; + } + if(city->set_vars) { + fclose(city->set_vars); + city->set_vars = NULL; + } if(city->scpr) SCPR(device_ref_put(city->scpr)); if(city->denoiser) vertex_denoiser_release(city->denoiser); if(city->array_and_tables_initialized) { diff --git a/src/cg_city.h b/src/cg_city.h @@ -142,6 +142,8 @@ struct city { int keep_running_on_errors; int dump_footprints_level; int array_and_tables_initialized; + FILE* stardis_model; + FILE* set_vars; }; res_T