X-Git-Url: http://git.salome-platform.org/gitweb/?a=blobdiff_plain;f=src%2FSMESHGUI%2FSMESHGUI_MeshOp.cxx;h=4d27d31aed8ae5c2fbcedc828f461b4db9deb33a;hb=1b26521843d50c2ed99d5e8d898bfbb8f13a9d40;hp=14fed46e849792a8beba33a79563a3b1569fa8e5;hpb=7b613d2b8b0677db796f7ed6ec1abbec51896937;p=modules%2Fsmesh.git diff --git a/src/SMESHGUI/SMESHGUI_MeshOp.cxx b/src/SMESHGUI/SMESHGUI_MeshOp.cxx index 14fed46e8..4d27d31ae 100644 --- a/src/SMESHGUI/SMESHGUI_MeshOp.cxx +++ b/src/SMESHGUI/SMESHGUI_MeshOp.cxx @@ -61,7 +61,9 @@ #include // OCCT includes +#include #include +#include #include // IDL includes @@ -453,24 +455,42 @@ void SMESHGUI_MeshOp::selectionDone() for (int iss = 0; iss < aSeq->length() && shapeDim < 3; iss++) { GEOM::GEOM_Object_var aGeomVar = aSeq[iss]; switch ( aGeomVar->GetShapeType() ) { - case GEOM::SOLID: - case GEOM::SHELL: shapeDim = 3; break; + case GEOM::SOLID: shapeDim = 3; break; + case GEOM::SHELL: + { + //shapeDim = 3; // Bug 0016155: EDF PAL 447: If the shape is a Shell, disable 3D tab + shapeDim = (shapeDim < 2) ? 2 : shapeDim; + TopoDS_Shape aShape; + if (GEOMBase::GetShape(aGeomVar, aShape)) { + if (aShape.Closed()) + shapeDim = 3; + } + } + break; case GEOM::FACE: shapeDim = (shapeDim < 2) ? 2 : shapeDim; break; case GEOM::WIRE: case GEOM::EDGE: shapeDim = (shapeDim < 1) ? 1 : shapeDim; break; case GEOM::VERTEX: break; default: - TopoDS_Shape aShape; - if ( GEOMBase::GetShape(aGeomVar, aShape)) { - TopExp_Explorer exp( aShape, TopAbs_SHELL ); - if ( exp.More() ) - shapeDim = 3; - else if ( exp.Init( aShape, TopAbs_FACE ), exp.More() ) - shapeDim = (shapeDim < 2) ? 2 : shapeDim; - else if ( exp.Init( aShape, TopAbs_EDGE ), exp.More() ) - shapeDim = (shapeDim < 1) ? 1 : shapeDim; - else - ;//shapeDim = 0; + { + TopoDS_Shape aShape; + if (GEOMBase::GetShape(aGeomVar, aShape)) { + TopExp_Explorer exp (aShape, TopAbs_SHELL); + if (exp.More()) { + //shapeDim = 3; // Bug 0016155: EDF PAL 447: If the shape is a Shell, disable 3D tab + shapeDim = (shapeDim < 2) ? 2 : shapeDim; + for (; exp.More() && shapeDim == 2; exp.Next()) { + if (exp.Current().Closed()) + shapeDim = 3; + } + } + else if ( exp.Init( aShape, TopAbs_FACE ), exp.More() ) + shapeDim = (shapeDim < 2) ? 2 : shapeDim; + else if ( exp.Init( aShape, TopAbs_EDGE ), exp.More() ) + shapeDim = (shapeDim < 1) ? 1 : shapeDim; + else + ;//shapeDim = 0; + } } } }