0021106: EDF 1691 SMESH: MEsh.Group(SubShape) fails on Shells

Forbid 3D mesh on the SHELL
This commit is contained in:
eap 2011-10-13 06:35:00 +00:00
parent cf76763e47
commit f95be2abe0
2 changed files with 15 additions and 8 deletions

View File

@ -931,7 +931,7 @@ int SMESH_Gen::GetShapeDim(const TopAbs_ShapeEnum & aShapeType)
dim[ TopAbs_COMPOUND ] = MeshDim_3D; dim[ TopAbs_COMPOUND ] = MeshDim_3D;
dim[ TopAbs_COMPSOLID ] = MeshDim_3D; dim[ TopAbs_COMPSOLID ] = MeshDim_3D;
dim[ TopAbs_SOLID ] = MeshDim_3D; dim[ TopAbs_SOLID ] = MeshDim_3D;
dim[ TopAbs_SHELL ] = MeshDim_3D; dim[ TopAbs_SHELL ] = MeshDim_2D;
dim[ TopAbs_FACE ] = MeshDim_2D; dim[ TopAbs_FACE ] = MeshDim_2D;
dim[ TopAbs_WIRE ] = MeshDim_1D; dim[ TopAbs_WIRE ] = MeshDim_1D;
dim[ TopAbs_EDGE ] = MeshDim_1D; dim[ TopAbs_EDGE ] = MeshDim_1D;

View File

@ -510,12 +510,13 @@ bool SMESH_subMesh::CanAddHypothesis(const SMESH_Hypothesis* theHypothesis) cons
{ {
int aHypDim = theHypothesis->GetDim(); int aHypDim = theHypothesis->GetDim();
int aShapeDim = SMESH_Gen::GetShapeDim(_subShape); int aShapeDim = SMESH_Gen::GetShapeDim(_subShape);
if (aHypDim == 3 && aShapeDim == 3) { // issue 21106. Forbid 3D mesh on the SHELL
// check case of open shell // if (aHypDim == 3 && aShapeDim == 3) {
//if (_subShape.ShapeType() == TopAbs_SHELL && !_subShape.Closed()) // // check case of open shell
if (_subShape.ShapeType() == TopAbs_SHELL && !BRep_Tool::IsClosed(_subShape)) // //if (_subShape.ShapeType() == TopAbs_SHELL && !_subShape.Closed())
return false; // if (_subShape.ShapeType() == TopAbs_SHELL && !BRep_Tool::IsClosed(_subShape))
} // return false;
// }
if ( aHypDim <= aShapeDim ) if ( aHypDim <= aShapeDim )
return true; return true;
@ -531,8 +532,14 @@ bool SMESH_subMesh::IsApplicableHypotesis(const SMESH_Hypothesis* theHypothesis,
const TopAbs_ShapeEnum theShapeType) const TopAbs_ShapeEnum theShapeType)
{ {
if ( theHypothesis->GetType() > SMESHDS_Hypothesis::PARAM_ALGO) if ( theHypothesis->GetType() > SMESHDS_Hypothesis::PARAM_ALGO)
{
// algorithm // algorithm
return ( theHypothesis->GetShapeType() & (1<< theShapeType)); if ( theHypothesis->GetShapeType() & (1<< theShapeType))
// issue 21106. Forbid 3D mesh on the SHELL
return !( theHypothesis->GetDim() == 3 && theShapeType == TopAbs_SHELL );
else
return false;
}
// hypothesis // hypothesis
switch ( theShapeType ) { switch ( theShapeType ) {