From cb192665c4d52a69b1fb810180f36e467ce4a4cf Mon Sep 17 00:00:00 2001 From: Jean-Francois Remacle <jean-francois.remacle@uclouvain.be> Date: Tue, 7 Mar 2017 15:01:19 +0000 Subject: [PATCH] fixed BL orientation --- Mesh/meshGFaceOptimize.cpp | 51 ++++++++++++++++++++++++++++---------- 1 file changed, 38 insertions(+), 13 deletions(-) diff --git a/Mesh/meshGFaceOptimize.cpp b/Mesh/meshGFaceOptimize.cpp index 252d29803e..f1f1b0ebbe 100644 --- a/Mesh/meshGFaceOptimize.cpp +++ b/Mesh/meshGFaceOptimize.cpp @@ -260,29 +260,54 @@ void transferDataStructure(GFace *gf, std::set<MTri3*, compareTri3Ptr> &AllTris, // parameter space (it would be nicer to change the actual algorithm // to ensure that we create correctly-oriented triangles in the // first place) + + // if BL triangles are considered, then all that is WRONG ! + + if(gf->triangles.size() > 1){ + + bool BL = !gf->getColumns()->_toFirst.empty(); + double n1[3], n2[3]; MTriangle *t = gf->triangles[0]; MVertex *v0 = t->getVertex(0), *v1 = t->getVertex(1), *v2 = t->getVertex(2); - int index0 = data.getIndex (v0); - int index1 = data.getIndex (v1); - int index2 = data.getIndex (v2); - normal3points(data.Us[index0], data.Vs[index0], 0., - data.Us[index1], data.Vs[index1], 0., - data.Us[index2], data.Vs[index2], 0., n1); + + if (!BL){ + int index0 = data.getIndex (v0); + int index1 = data.getIndex (v1); + int index2 = data.getIndex (v2); + normal3points(data.Us[index0], data.Vs[index0], 0., + data.Us[index1], data.Vs[index1], 0., + data.Us[index2], data.Vs[index2], 0., n1); + } + else { + // BL --> PLANAR FACES !!! + normal3points(v0->x(),v0->y(),v0->z(), + v1->x(),v1->y(),v1->z(), + v2->x(),v2->y(),v2->z(), n1); + } for(unsigned int j = 1; j < gf->triangles.size(); j++){ t = gf->triangles[j]; v0 = t->getVertex(0); v1 = t->getVertex(1); v2 = t->getVertex(2); - index0 = data.getIndex (v0); - index1 = data.getIndex (v1); - index2 = data.getIndex (v2); - normal3points(data.Us[index0], data.Vs[index0], 0., - data.Us[index1], data.Vs[index1], 0., - data.Us[index2], data.Vs[index2], 0., n2); + if (!BL){ + int index0 = data.getIndex (v0); + int index1 = data.getIndex (v1); + int index2 = data.getIndex (v2); + normal3points(data.Us[index0], data.Vs[index0], 0., + data.Us[index1], data.Vs[index1], 0., + data.Us[index2], data.Vs[index2], 0., n2); + } + else { + // BL --> PLANAR FACES !!! + normal3points(v0->x(),v0->y(),v0->z(), + v1->x(),v1->y(),v1->z(), + v2->x(),v2->y(),v2->z(), n2); + } double pp; prosca(n1, n2, &pp); + // orient the bignou if(pp < 0) t->reverse(); } - } +} splitEquivalentTriangles(gf, data); computeEquivalences(gf, data); } -- GitLab