star-enclosures-3d

Extract enclosures from 3D geometry
git clone git://git.meso-star.fr/star-enclosures-3d.git
Log | Files | Refs | README | LICENSE

commit aa79affa86b89328fea7635eec8f274d2c77dc27
parent b67720f2fa6264a6d810fed1c170c85bfabe2757
Author: Christophe Coustet <christophe.coustet@meso-star.com>
Date:   Thu, 11 Jun 2020 09:28:57 +0200

BugFix: some degenerated triangles where not detected

Diffstat:
Msrc/senc3d_scene.c | 16++++++++++++----
1 file changed, 12 insertions(+), 4 deletions(-)

diff --git a/src/senc3d_scene.c b/src/senc3d_scene.c @@ -141,7 +141,7 @@ senc3d_scene_create } /* Get triangles */ FOR_EACH(nt, 0, ntris) { - int j; + int j, dg; trg_id_t s; medium_id_t med[2] = { SENC3D_UNSPECIFIED_MEDIUM, SENC3D_UNSPECIFIED_MEDIUM }; @@ -161,10 +161,18 @@ senc3d_scene_create ASSERT(ind[j] <= VRTX_MAX__); tmp.vertice_id[j] = (vrtx_id_t)ind[j]; } - if(tmp.vertice_id[0] == tmp.vertice_id[1] + dg = tmp.vertice_id[0] == tmp.vertice_id[1] || tmp.vertice_id[0] == tmp.vertice_id[2] - || tmp.vertice_id[1] == tmp.vertice_id[2]) - { + || tmp.vertice_id[1] == tmp.vertice_id[2]; + if(!dg) { + double edge1[3], edge2[3], n[3]; + const union double3* vertices = darray_position_cdata_get(&scn->vertices); + d3_sub(edge1, vertices[tmp.vertice_id[1]].vec, vertices[tmp.vertice_id[0]].vec); + d3_sub(edge2, vertices[tmp.vertice_id[2]].vec, vertices[tmp.vertice_id[0]].vec); + d3_cross(n, edge1, edge2); + dg = d3_len(n) == 0; + } + if(dg) { log_err(scn->dev, LIB_NAME":%s: triangle "PRTF_TRG" is degenerated.\n", FUNC_NAME, nt); res = RES_BAD_ARG;