mirror of
https://git.salome-platform.org/gitpub/modules/smesh.git
synced 2024-12-27 09:50:34 +05:00
23321: EDF 12916 - Meshing problem
StdMeshers_QuadToTriaAdaptor: solution for note (0021305) implemented but deactivated StdMeshers_Projection_2d.cxx - morph deactivated for nb wires == 1
This commit is contained in:
parent
cb6af2f3e3
commit
0a3339671c
@ -302,7 +302,7 @@ SMESH_Swig::SMESH_Swig()
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
MESSAGE("Constructeur");
|
//MESSAGE("Constructeur");
|
||||||
|
|
||||||
if(CORBA::is_nil(anORB))
|
if(CORBA::is_nil(anORB))
|
||||||
ProcessVoidEvent(new TEvent(anORB));
|
ProcessVoidEvent(new TEvent(anORB));
|
||||||
@ -402,7 +402,7 @@ SMESH_Swig::Init(int theStudyID)
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
MESSAGE("Init");
|
//MESSAGE("Init");
|
||||||
|
|
||||||
ProcessVoidEvent(new TEvent(theStudyID,
|
ProcessVoidEvent(new TEvent(theStudyID,
|
||||||
myStudy,
|
myStudy,
|
||||||
@ -414,7 +414,7 @@ SMESH_Swig::Init(int theStudyID)
|
|||||||
//===============================================================
|
//===============================================================
|
||||||
SMESH_Swig::~SMESH_Swig()
|
SMESH_Swig::~SMESH_Swig()
|
||||||
{
|
{
|
||||||
MESSAGE("Destructeur");
|
//MESSAGE("Destructeur");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1273,6 +1273,7 @@ namespace {
|
|||||||
const TAssocTool::TNodeNodeMap& src2tgtNodes )
|
const TAssocTool::TNodeNodeMap& src2tgtNodes )
|
||||||
{
|
{
|
||||||
if ( srcWires.size() != tgtWires.size() ) return false;
|
if ( srcWires.size() != tgtWires.size() ) return false;
|
||||||
|
if ( srcWires.size() == 1 ) return false; // tmp
|
||||||
|
|
||||||
// count boundary points
|
// count boundary points
|
||||||
int iP = 1, nbP = 0;
|
int iP = 1, nbP = 0;
|
||||||
|
@ -1012,6 +1012,8 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
groupDS = 0;
|
groupDS = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const bool toFindVolumes = aMesh.NbVolumes() > 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());
|
||||||
@ -1023,6 +1025,9 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
if ( !myElemSearcher )
|
if ( !myElemSearcher )
|
||||||
myElemSearcher = SMESH_MeshAlgos::GetElementSearcher( *meshDS );
|
myElemSearcher = SMESH_MeshAlgos::GetElementSearcher( *meshDS );
|
||||||
SMESH_ElementSearcher* searcher = const_cast<SMESH_ElementSearcher*>(myElemSearcher);
|
SMESH_ElementSearcher* searcher = const_cast<SMESH_ElementSearcher*>(myElemSearcher);
|
||||||
|
SMESHUtils::Deleter<SMESH_ElementSearcher>
|
||||||
|
volSearcher( SMESH_MeshAlgos::GetElementSearcher( *meshDS ));
|
||||||
|
vector< const SMDS_MeshElement* > suspectFaces, foundVolumes;
|
||||||
|
|
||||||
TColgp_Array1OfPnt PN(1,5);
|
TColgp_Array1OfPnt PN(1,5);
|
||||||
TColgp_Array1OfVec VN(1,4);
|
TColgp_Array1OfVec VN(1,4);
|
||||||
@ -1042,7 +1047,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
if ( what == NOT_QUAD )
|
if ( what == NOT_QUAD )
|
||||||
continue;
|
continue;
|
||||||
if ( volumes[0] && volumes[1] )
|
if ( volumes[0] && volumes[1] )
|
||||||
continue; // face is shared by two volumes - no space for a pyramid
|
continue; // face is shared by two volumes - no room for a pyramid
|
||||||
|
|
||||||
if ( what == DEGEN_QUAD )
|
if ( what == DEGEN_QUAD )
|
||||||
{
|
{
|
||||||
@ -1143,6 +1148,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
}
|
}
|
||||||
|
|
||||||
// Restrict pyramid height by intersection with other faces
|
// Restrict pyramid height by intersection with other faces
|
||||||
|
|
||||||
gp_Vec tmpDir(PC,PCbest); tmpDir.Normalize();
|
gp_Vec tmpDir(PC,PCbest); tmpDir.Normalize();
|
||||||
double tmp = PN(1).Distance(PN(3)) + PN(2).Distance(PN(4));
|
double tmp = PN(1).Distance(PN(3)) + PN(2).Distance(PN(4));
|
||||||
// far points: in (PC, PCbest) direction and vice-versa
|
// far points: in (PC, PCbest) direction and vice-versa
|
||||||
@ -1154,8 +1160,24 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
|
|||||||
gp_Pnt intPnt [2];
|
gp_Pnt intPnt [2];
|
||||||
int intFaceInd [2] = { 0, 0 };
|
int intFaceInd [2] = { 0, 0 };
|
||||||
|
|
||||||
|
if ( toFindVolumes && 0 ) // non-conformal mesh is not suitable for any mesher so far
|
||||||
|
{
|
||||||
|
// there are volumes in the mesh, in a non-conformal mesh an neighbor
|
||||||
|
// volume can be not found yet
|
||||||
|
for ( int isRev = 0; isRev < 2; ++isRev )
|
||||||
|
{
|
||||||
|
if ( volumes[isRev] ) continue;
|
||||||
|
gp_Pnt testPnt = PC.XYZ() + tmpDir.XYZ() * height * ( isRev ? -0.1: 0.1 );
|
||||||
|
foundVolumes.clear();
|
||||||
|
if ( volSearcher->FindElementsByPoint( testPnt, SMDSAbs_Volume, foundVolumes ))
|
||||||
|
volumes[isRev] = foundVolumes[0];
|
||||||
|
}
|
||||||
|
if ( volumes[0] && volumes[1] )
|
||||||
|
continue; // no room for a pyramid
|
||||||
|
}
|
||||||
|
|
||||||
gp_Ax1 line( PC, tmpDir );
|
gp_Ax1 line( PC, tmpDir );
|
||||||
vector< const SMDS_MeshElement* > suspectFaces;
|
suspectFaces.clear();
|
||||||
searcher->GetElementsNearLine( line, SMDSAbs_Face, suspectFaces);
|
searcher->GetElementsNearLine( line, SMDSAbs_Face, suspectFaces);
|
||||||
|
|
||||||
for ( size_t iF = 0; iF < suspectFaces.size(); ++iF )
|
for ( size_t iF = 0; iF < suspectFaces.size(); ++iF )
|
||||||
|
Loading…
Reference in New Issue
Block a user