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 e946083eb5004db684d8baf38ca4a18b3da8dd31
parent d1e5fe1489fb341013b3a7a21157a3894c0cc2f3
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu,  9 Mar 2023 18:22:25 +0100

Fix some star-cad geometry not released

Diffstat:
Msrc/cg_construction_mode_0.c | 21++++++++++++++-------
Msrc/cg_construction_mode_1.c | 35++++++++++++++++++++---------------
2 files changed, 34 insertions(+), 22 deletions(-)

diff --git a/src/cg_construction_mode_0.c b/src/cg_construction_mode_0.c @@ -762,18 +762,25 @@ release_cad_cmode_0 goto error; } - if(data_cad->cavity) SCAD(geometry_delete(data_cad->cavity)); - if(data_cad->floor) SCAD(geometry_delete(data_cad->floor)); - if(data_cad->ground_connection) SCAD(geometry_delete(data_cad->ground_connection)); - if(data_cad->roof) SCAD(geometry_delete(data_cad->roof)); - if(data_cad->wall) SCAD(geometry_delete(data_cad->wall)); - if(data_cad->fake_ground) SCAD(geometry_delete(data_cad->fake_ground)); +#define GDEL(Field) \ + if(data_cad->Field) SCAD(geometry_delete(data_cad->Field)); \ + /* To ease debugging, write NULL after deletion */ \ + data_cad->Field = NULL + GDEL(cavity); + GDEL(floor); + GDEL(ground_connection); + GDEL(roof); + GDEL(wall); + GDEL(fake_ground); + GDEL(boundary[0]); + GDEL(boundary[1]); for(i = 0; i < data_cad->n_connection; i++) { - SCAD(geometry_delete(data_cad->connection[i])); + GDEL(connection[i]); } MEM_RM(allocator, data_cad->boundary); MEM_RM(allocator, data_cad->connection); MEM_RM(allocator, data_cad); +#undef GDEL exit: return res; diff --git a/src/cg_construction_mode_1.c b/src/cg_construction_mode_1.c @@ -1881,21 +1881,25 @@ release_cad_cmode_1 goto error; } - if(data_cad->attic_cavity) SCAD(geometry_delete(data_cad->attic_cavity)); - if(data_cad->crawlspace_cavity) SCAD(geometry_delete(data_cad->crawlspace_cavity)); - if(data_cad->external_insulation) SCAD(geometry_delete(data_cad->external_insulation)); - if(data_cad->fake_ground) SCAD(geometry_delete(data_cad->fake_ground)); - if(data_cad->floor) SCAD(geometry_delete(data_cad->floor)); - if(data_cad->floor_insulation) SCAD(geometry_delete(data_cad->floor_insulation)); - if(data_cad->foundation) SCAD(geometry_delete(data_cad->foundation)); - if(data_cad->glass) SCAD(geometry_delete(data_cad->glass)); - if(data_cad->ground_connection) SCAD(geometry_delete(data_cad->ground_connection)); - if(data_cad->habitable_cavity) SCAD(geometry_delete(data_cad->habitable_cavity)); - if(data_cad->intermediate_floor) SCAD(geometry_delete(data_cad->intermediate_floor)); - if(data_cad->internal_insulation) SCAD(geometry_delete(data_cad->internal_insulation)); - if(data_cad->roof) SCAD(geometry_delete(data_cad->roof)); - if(data_cad->roof_insulation) SCAD(geometry_delete(data_cad->roof_insulation)); - if(data_cad->wall) SCAD(geometry_delete(data_cad->wall)); +#define GDEL(Field) \ + if(data_cad->Field) SCAD(geometry_delete(data_cad->Field)); \ + /* To ease debugging, write NULL after deletion */ \ + data_cad->Field = NULL + GDEL(attic_cavity); + GDEL(crawlspace_cavity); + GDEL(external_insulation); + GDEL(fake_ground); + GDEL(floor); + GDEL(floor_insulation); + GDEL(foundation); + GDEL(glass); + GDEL(ground_connection); + GDEL(habitable_cavity); + GDEL(intermediate_floor); + GDEL(internal_insulation); + GDEL(roof); + GDEL(roof_insulation); + GDEL(wall); for(i = 0; i < darray_geometries_size_get(&data_cad->boundary); i++) { struct scad_geometry* b = darray_geometries_data_get(&data_cad->boundary)[i]; ERR(scad_geometry_delete(b)); @@ -1907,6 +1911,7 @@ release_cad_cmode_1 darray_geometries_release(&data_cad->boundary); darray_geometries_release(&data_cad->connection); MEM_RM(allocator, data_cad); +#undef GDEL exit: return res;