0020959: EDF 1531: HEXA_3D fails on shell

in DependsOn(), do not make a sub-mesh of a not closed SHELL
This commit is contained in:
eap 2010-09-01 11:00:43 +00:00
parent d4056b8447
commit b539de9f45

View File

@ -372,23 +372,24 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_COMPOUND: case TopAbs_COMPOUND:
{ {
//MESSAGE("compound"); //MESSAGE("compound");
for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More();exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
for (TopExp_Explorer exp(_subShape, TopAbs_SHELL, TopAbs_SOLID); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_SHELL, TopAbs_SOLID); exp.More(); exp.Next())
exp.Next())
{ {
if ( BRep_Tool::IsClosed(exp.Current() ))
InsertDependence(exp.Current()); //only shell not in solid InsertDependence(exp.Current()); //only shell not in solid
else
for (TopExp_Explorer exp(exp.Current(), TopAbs_FACE); exp.More();exp.Next())
InsertDependence(exp.Current()); // issue 0020959: HEXA_3D fails on shell
} }
for (TopExp_Explorer exp(_subShape, TopAbs_FACE, TopAbs_SHELL); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_FACE, TopAbs_SHELL); exp.More();exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
for (TopExp_Explorer exp(_subShape, TopAbs_EDGE, TopAbs_FACE); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_EDGE, TopAbs_FACE); exp.More();exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -397,8 +398,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_COMPSOLID: case TopAbs_COMPSOLID:
{ {
//MESSAGE("compsolid"); //MESSAGE("compsolid");
for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_SOLID); exp.More(); exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -407,8 +407,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_SHELL: case TopAbs_SHELL:
{ {
//MESSAGE("shell"); //MESSAGE("shell");
for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More(); exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -417,8 +416,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_WIRE: case TopAbs_WIRE:
{ {
//MESSAGE("wire"); //MESSAGE("wire");
for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More(); exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -428,8 +426,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
{ {
//MESSAGE("solid"); //MESSAGE("solid");
if(_father->HasShapeToMesh()) { if(_father->HasShapeToMesh()) {
for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_FACE); exp.More();exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -439,8 +436,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_FACE: case TopAbs_FACE:
{ {
//MESSAGE("face"); //MESSAGE("face");
for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_EDGE); exp.More();exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }
@ -449,8 +445,7 @@ const map < int, SMESH_subMesh * >& SMESH_subMesh::DependsOn()
case TopAbs_EDGE: case TopAbs_EDGE:
{ {
//MESSAGE("edge"); //MESSAGE("edge");
for (TopExp_Explorer exp(_subShape, TopAbs_VERTEX); exp.More(); for (TopExp_Explorer exp(_subShape, TopAbs_VERTEX); exp.More(); exp.Next())
exp.Next())
{ {
InsertDependence(exp.Current()); InsertDependence(exp.Current());
} }