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:
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