mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-01-26 08:30:33 +05:00
020674: EDF 870 SMESH: Mesh generated by Netgen not usable by GHS3D
avoid creating degenetrated faces
This commit is contained in:
parent
d7c779851c
commit
8d2789db83
@ -604,8 +604,31 @@ bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector & wires,
|
|||||||
// set UV
|
// set UV
|
||||||
uvslf[m].x = uvPt->u * scalex;
|
uvslf[m].x = uvPt->u * scalex;
|
||||||
uvslf[m].y = uvPt->v * scaley;
|
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 );
|
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++;
|
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 * n2 = mefistoToDS[ nust[m++] - 1 ];
|
||||||
const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] - 1 ];
|
const SMDS_MeshNode * n3 = mefistoToDS[ nust[m++] - 1 ];
|
||||||
|
|
||||||
|
// avoid creating degenetrated faces
|
||||||
|
bool isDegen = ( myTool->HasDegenenaratedEdges() && ( n1 == n2 || n1 == n3 || n2 == n3 ));
|
||||||
|
if ( !isDegen )
|
||||||
|
{
|
||||||
SMDS_MeshElement * elt;
|
SMDS_MeshElement * elt;
|
||||||
if (triangleIsWellOriented)
|
if (triangleIsWellOriented)
|
||||||
elt = myTool->AddFace(n1, n2, n3);
|
elt = myTool->AddFace(n1, n2, n3);
|
||||||
else
|
else
|
||||||
elt = myTool->AddFace(n1, n3, n2);
|
elt = myTool->AddFace(n1, n3, n2);
|
||||||
|
|
||||||
meshDS->SetMeshElementOnShape(elt, faceID);
|
meshDS->SetMeshElementOnShape(elt, faceID);
|
||||||
|
}
|
||||||
m++;
|
m++;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user