-// Copyright (C) 2007-2011 CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2012 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
// File : SMESH_subMesh_i.cxx
// Author : Paul RASCLE, EDF
// Module : SMESH
-// $Header$
//
#include "SMESH_subMesh_i.hxx"
#include "SMESH_Gen_i.hxx"
#include "SMESH_Mesh_i.hxx"
+#include "SMESH_PreMeshInfo.hxx"
#include "Utils_CorbaException.hxx"
#include "utilities.h"
: SALOME::GenericObj_i( PortableServer::POA::_nil() )
{
MESSAGE("SMESH_subMesh_i::SMESH_subMesh_i default, not for use");
- ASSERT(0);
+ ASSERT(0);
}
//=============================================================================
int localId )
: SALOME::GenericObj_i( thePOA )
{
- MESSAGE("SMESH_subMesh_i::SMESH_subMesh_i");
_gen_i = gen_i;
_mesh_i = mesh_i;
_localId = localId;
- // ****
+ _preMeshInfo = NULL;
}
//=============================================================================
/*!
SMESH_subMesh_i::~SMESH_subMesh_i()
{
MESSAGE("SMESH_subMesh_i::~SMESH_subMesh_i");
- // ****
+ if ( _preMeshInfo ) delete _preMeshInfo;
+ _preMeshInfo = NULL;
}
//=======================================================================
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetNumberOfElements");
+
+ if ( _preMeshInfo )
+ return _preMeshInfo->NbElements();
+
if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
return 0;
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetNumberOfNodes");
+
if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
return 0;
+ if ( _preMeshInfo )
+ {
+ if ( all ) return _preMeshInfo->NbNodes();
+ else _preMeshInfo->FullLoadFromFile();
+ }
::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS();
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetElementsId");
+
SMESH::long_array_var aResult = new SMESH::long_array();
if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
return aResult._retn();
+ if ( _preMeshInfo )
+ _preMeshInfo->FullLoadFromFile();
+
::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS();
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetElementsByType");
+
SMESH::long_array_var aResult = new SMESH::long_array();
if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
return aResult._retn();
+ if ( _preMeshInfo )
+ _preMeshInfo->FullLoadFromFile();
+
::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
SMESHDS_SubMesh* aSubMeshDS = aSubMesh->GetSubMeshDS();
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetNodesId");
+
SMESH::long_array_var aResult = GetElementsByType( SMESH::NODE );
return aResult._retn();
}
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
- MESSAGE("SMESH_subMesh_i::GetFather");
return _mesh_i->_this();
}
CORBA::Long SMESH_subMesh_i::GetId()
{
- MESSAGE("SMESH_subMesh_i::GetId");
return _localId;
}
throw (SALOME::SALOME_Exception)
{
Unexpect aCatch(SALOME_SalomeException);
+ if ( _preMeshInfo )
+ _preMeshInfo->FullLoadFromFile();
SALOME_MED::MESH_var MEDMesh = GetFather()->GetMEDMesh();
SALOME_MED::Family_array_var families =
//=============================================================================
SMESH::long_array* SMESH_subMesh_i::GetIDs()
{
- SMESH::long_array_var aResult = GetElementsId();
- return aResult._retn();
+ return GetElementsId();
}
//=============================================================================
SMESH::ElementType SMESH_subMesh_i::GetElementType( const CORBA::Long id, const bool iselem )
throw (SALOME::SALOME_Exception)
{
+ if ( _preMeshInfo )
+ _preMeshInfo->FullLoadFromFile();
return GetFather()->GetElementType( id, iselem );
}
//=============================================================================
SMESH::long_array* SMESH_subMesh_i::GetMeshInfo()
{
+ if ( _preMeshInfo )
+ return _preMeshInfo->GetMeshInfo();
+
SMESH::long_array_var aRes = new SMESH::long_array();
aRes->length(SMESH::Entity_Last);
for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
SMESH::array_of_ElementType* SMESH_subMesh_i::GetTypes()
{
+ if ( _preMeshInfo )
+ return _preMeshInfo->GetTypes();
+
SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
{
return GetFather();
}
+
+//=======================================================================
+//function : IsMeshInfoCorrect
+//purpose : * Returns false if GetMeshInfo() returns incorrect information that may
+// * happen if mesh data is not yet fully loaded from the file of study.
+//=======================================================================
+
+bool SMESH_subMesh_i::IsMeshInfoCorrect()
+{
+ return _preMeshInfo ? _preMeshInfo->IsMeshInfoCorrect() : true;
+}