-// Copyright (C) 2007-2008 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2010 CEA/DEN, EDF R&D, OPEN CASCADE
//
// Copyright (C) 2003-2007 OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
// CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
//
// See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
//
+
// SMESH SMESH_I : idl implementation based on 'SMESH' unit's calsses
// File : SMESH_subMesh_i.cxx
// Author : Paul RASCLE, EDF
//=============================================================================
SMESH_subMesh_i::SMESH_subMesh_i( PortableServer::POA_ptr thePOA,
- SMESH_Gen_i* gen_i,
- SMESH_Mesh_i* mesh_i,
- int localId )
+ SMESH_Gen_i* gen_i,
+ SMESH_Mesh_i* mesh_i,
+ int localId )
: SALOME::GenericObj_i( thePOA )
{
MESSAGE("SMESH_subMesh_i::SMESH_subMesh_i");
TopoDS_Shape S = _mesh_i->_mapSubMesh[ _localId ]->GetSubShape();
if ( !S.IsNull() ) {
aShapeObj = _gen_i->ShapeToGeomObject( S );
- //mzn: N7PAL16232, N7PAL16233
- //In some cases it's possible that GEOM_Client contains the shape same to S, but
- //with another orientation.
- if (aShapeObj->_is_nil())
- aShapeObj = _gen_i->ShapeToGeomObject( S.Reversed() );
+ //mzn: N7PAL16232, N7PAL16233
+ //In some cases it's possible that GEOM_Client contains the shape same to S, but
+ //with another orientation.
+ if (aShapeObj->_is_nil())
+ aShapeObj = _gen_i->ShapeToGeomObject( S.Reversed() );
}
}
}
return aRes._retn();
}
+
+
+//=======================================================================
+//function : GetTypes
+//purpose : Returns types of elements it contains
+//=======================================================================
+
+SMESH::array_of_ElementType* SMESH_subMesh_i::GetTypes()
+{
+ SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
+
+ ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
+ TopoDS_Shape shape = aSubMesh->GetSubShape();
+ while ( !shape.IsNull() && shape.ShapeType() == TopAbs_COMPOUND )
+ {
+ TopoDS_Iterator it( shape );
+ shape = it.More() ? it.Value() : TopoDS_Shape();
+ }
+ if ( !shape.IsNull() )
+ {
+ types->length( 1 );
+ switch ( ::SMESH_Gen::GetShapeDim( shape ))
+ {
+ case 0: types[0] = SMESH::ELEM0D; break;
+ case 1: types[0] = SMESH::EDGE; break;
+ case 2: types[0] = SMESH::FACE; break;
+ case 3: types[0] = SMESH::VOLUME; break;
+ default:
+ types->length(0);
+ }
+ }
+ return types._retn();
+}
+
+//=======================================================================
+//function : GetMesh
+//purpose : interface SMESH_IDSource
+//=======================================================================
+
+SMESH::SMESH_Mesh_ptr SMESH_subMesh_i::GetMesh()
+{
+ return GetFather();
+}