mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2025-02-22 14:15:38 +05:00
PR: tools for crack meshing : when building pyramids on complex shapes, orientation detection is difficult (concavities) and can be helped if a group of faces correctly oriented is provided. (check the presence of a group named "skinFaces")
This commit is contained in:
parent
16fcf4dea0
commit
80cf9ab761
@ -28,6 +28,8 @@
|
|||||||
|
|
||||||
#include "SMESH_Algo.hxx"
|
#include "SMESH_Algo.hxx"
|
||||||
#include "SMESH_MesherHelper.hxx"
|
#include "SMESH_MesherHelper.hxx"
|
||||||
|
#include "SMESH_Group.hxx"
|
||||||
|
#include "SMESHDS_GroupBase.hxx"
|
||||||
|
|
||||||
#include <IntAna_IntConicQuad.hxx>
|
#include <IntAna_IntConicQuad.hxx>
|
||||||
#include <IntAna_Quadric.hxx>
|
#include <IntAna_Quadric.hxx>
|
||||||
@ -38,7 +40,9 @@
|
|||||||
#include <TopoDS.hxx>
|
#include <TopoDS.hxx>
|
||||||
#include <gp_Lin.hxx>
|
#include <gp_Lin.hxx>
|
||||||
#include <gp_Pln.hxx>
|
#include <gp_Pln.hxx>
|
||||||
|
#include "utilities.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
#include <numeric>
|
#include <numeric>
|
||||||
#include <limits>
|
#include <limits>
|
||||||
|
|
||||||
@ -898,6 +902,36 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
if ( aMesh.NbQuadrangles() < 1 )
|
if ( aMesh.NbQuadrangles() < 1 )
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
// find if there is a group of faces identified as skin faces, with normal going outside the volume
|
||||||
|
std::string groupName = "skinFaces";
|
||||||
|
SMESHDS_GroupBase* groupDS = 0;
|
||||||
|
SMESH_Mesh::GroupIteratorPtr groupIt = aMesh.GetGroups();
|
||||||
|
while ( groupIt->more() )
|
||||||
|
{
|
||||||
|
groupDS = 0;
|
||||||
|
SMESH_Group * group = groupIt->next();
|
||||||
|
if ( !group ) continue;
|
||||||
|
groupDS = group->GetGroupDS();
|
||||||
|
if ( !groupDS || groupDS->IsEmpty() )
|
||||||
|
{
|
||||||
|
groupDS = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
if (groupDS->GetType() != SMDSAbs_Face)
|
||||||
|
{
|
||||||
|
groupDS = 0;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
std::string grpName = group->GetName();
|
||||||
|
if (grpName == groupName)
|
||||||
|
{
|
||||||
|
MESSAGE("group skinFaces provided");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
groupDS = 0;
|
||||||
|
}
|
||||||
|
|
||||||
vector<const SMDS_MeshElement*> myPyramids;
|
vector<const SMDS_MeshElement*> myPyramids;
|
||||||
SMESH_MesherHelper helper(aMesh);
|
SMESH_MesherHelper helper(aMesh);
|
||||||
helper.IsQuadraticSubMesh(aMesh.GetShapeToMesh());
|
helper.IsQuadraticSubMesh(aMesh.GetShapeToMesh());
|
||||||
@ -1062,6 +1096,10 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// if the face belong to the group of skinFaces, do not build a pyramid outside
|
||||||
|
if (groupDS && groupDS->Contains(face))
|
||||||
|
intersected[0] = false;
|
||||||
|
|
||||||
// Create one or two pyramids
|
// Create one or two pyramids
|
||||||
|
|
||||||
for ( int isRev = 0; isRev < 2; ++isRev )
|
for ( int isRev = 0; isRev < 2; ++isRev )
|
||||||
|
Loading…
Reference in New Issue
Block a user