From 8d2789db83e816fede862f7527ecb27c22404daf Mon Sep 17 00:00:00 2001 From: eap Date: Mon, 1 Feb 2010 13:29:23 +0000 Subject: [PATCH] 020674: EDF 870 SMESH: Mesh generated by Netgen not usable by GHS3D avoid creating degenetrated faces --- src/StdMeshers/StdMeshers_MEFISTO_2D.cxx | 43 +++++++++++++++++++----- 1 file changed, 35 insertions(+), 8 deletions(-) diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx index f913336eb..717e88b5f 100644 --- a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx +++ b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx @@ -604,8 +604,31 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector & wires, // set UV uvslf[m].x = uvPt->u * scalex; uvslf[m].y = uvPt->v * scaley; - if ( uvPt->node->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX ) + switch ( uvPt->node->GetPosition()->GetTypeOfPosition()) + { + case SMDS_TOP_VERTEX: mOnVertex.push_back( m ); + break; + case SMDS_TOP_EDGE: + // In order to detect degenerated faces easily, we replace + // nodes on a degenerated edge by node on the vertex of that edge + if ( myTool->IsDegenShape( uvPt->node->GetPosition()->GetShapeId() )) + { + int edgeID = uvPt->node->GetPosition()->GetShapeId(); + SMESH_subMesh* edgeSM = myTool->GetMesh()->GetSubMeshContaining( edgeID ); + SMESH_subMeshIteratorPtr smIt = edgeSM->getDependsOnIterator( /*includeSelf=*/0, + /*complexShapeFirst=*/0); + if ( smIt->more() ) + { + SMESH_subMesh* vertexSM = smIt->next(); + SMDS_NodeIteratorPtr nIt = vertexSM->GetSubMeshDS()->GetNodes(); + if ( nIt->more() ) + mefistoToDS[m] = nIt->next(); + } + } + break; + default:; + } m++; } @@ -778,13 +801,17 @@ void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust, const SMDS_MeshNode * n2 = mefistoToDS[ nust[m++] - 1 ]; const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] - 1 ]; - SMDS_MeshElement * elt; - if (triangleIsWellOriented) - elt = myTool->AddFace(n1, n2, n3); - else - elt = myTool->AddFace(n1, n3, n2); - - meshDS->SetMeshElementOnShape(elt, faceID); + // avoid creating degenetrated faces + bool isDegen = ( myTool->HasDegenenaratedEdges() && ( n1 == n2 || n1 == n3 || n2 == n3 )); + if ( !isDegen ) + { + SMDS_MeshElement * elt; + if (triangleIsWellOriented) + elt = myTool->AddFace(n1, n2, n3); + else + elt = myTool->AddFace(n1, n3, n2); + meshDS->SetMeshElementOnShape(elt, faceID); + } m++; } -- 2.39.2