#include "Utils_ExceptHandlers.hxx"
+#include <boost/thread/thread.hpp>
+#include <boost/bind.hpp>
+
using namespace std;
// maximum stored group name length in MED file
//================================================================================
SMESH_Mesh::SMESH_Mesh():
- _groupId( 0 ), _nbSubShapes( 0 )
+ _id(-1),
+ _studyId(-1),
+ _idDoc(-1),
+ _groupId( 0 ),
+ _nbSubShapes( 0 ),
+ _isShapeToMesh( false ),
+ _myDocument( 0 ),
+ _myMeshDS( 0 ),
+ _gen( 0 ),
+ _isAutoColor( false ),
+ _isModified( false ),
+ _shapeDiagonal( 0.0 ),
+ _rmGroupCallUp( 0 )
{
- _myMeshDS = 0;
- _isShapeToMesh = false;
- _isAutoColor = false;
- _isModified = false;
- _shapeDiagonal = 0.0;
- _rmGroupCallUp = 0;
+}
+
+namespace
+{
+ void deleteMeshDS(SMESHDS_Mesh* meshDS)
+ {
+ //cout << "deleteMeshDS( " << meshDS << endl;
+ delete meshDS;
+ }
}
//=============================================================================
}
_mapGroup.clear();
+ // delete sub-meshes
+ map <int, SMESH_subMesh*>::iterator sm = _mapSubMesh.begin();
+ for ( ; sm != _mapSubMesh.end(); ++sm )
+ {
+ delete sm->second;
+ sm->second = 0;
+ }
+ _mapSubMesh.clear();
+
if ( _rmGroupCallUp) delete _rmGroupCallUp;
_rmGroupCallUp = 0;
+
+ // remove self from studyContext
+ if ( _gen )
+ {
+ StudyContextStruct * studyContext = _gen->GetStudyContext( _studyId );
+ studyContext->mapMesh.erase( _id );
+ }
+ if ( _myDocument )
+ _myDocument->RemoveMesh( _id );
+ _myDocument = 0;
+
+ if ( _myMeshDS )
+ // delete _myMeshDS, in a thread in order not to block closing a study with large meshes
+ boost::thread aThread(boost::bind( & deleteMeshDS, _myMeshDS ));
+}
+
+//================================================================================
+/*!
+ * \brief Return true if a mesh with given id exists
+ */
+//================================================================================
+
+bool SMESH_Mesh::MeshExists( int meshId ) const
+{
+ return _myDocument ? _myDocument->GetMesh( meshId ) : false;
}
//=============================================================================
SMESH_Hypothesis::Hypothesis_Status ret = subMesh->AlgoStateEngine(event, anHyp);
- // subShapes
+ // sub-shapes
if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
anHyp->GetDim() <= SMESH_Gen::GetShapeDim(aSubShape)) // is added on father
{
subMesh->CheckConcurentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK)
ret = SMESH_Hypothesis::HYP_CONCURENT;
- // subShapes
+ // sub-shapes
if (!SMESH_Hypothesis::IsStatusFatal(ret) &&
anHyp->GetDim() <= SMESH_Gen::GetShapeDim(aSubShape)) // is removed from father
{
}
//================================================================================
/*!
- * \brief Return submeshes of groups containing the given subshape
+ * \brief Return submeshes of groups containing the given sub-shape
*/
//================================================================================
return _myMeshDS->GetMeshInfo().NbQuadrangles(order);
}
+//================================================================================
+/*!
+ * \brief Return number of biquadratic quadrangles in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbBiQuadQuadrangles() const throw(SALOME_Exception)
+{
+ Unexpect aCatch(SalomeException);
+ return _myMeshDS->GetMeshInfo().NbBiQuadQuadrangles();
+}
+
//================================================================================
/*!
* \brief Return the number of polygonal faces in the mesh
return _myMeshDS->GetMeshInfo().NbHexas(order);
}
+//================================================================================
+/*!
+ * \brief Return number of triquadratic hexahedrons in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbTriQuadraticHexas() const throw(SALOME_Exception)
+{
+ Unexpect aCatch(SalomeException);
+ return _myMeshDS->GetMeshInfo().NbTriQuadHexas();
+}
+
//================================================================================
/*!
* \brief Return number of pyramids of given order in the mesh
return _myMeshDS->GetMeshInfo().NbPrisms(order);
}
+//================================================================================
+/*!
+ * \brief Return number of hexagonal prisms in the mesh
+ */
+//================================================================================
+
+int SMESH_Mesh::NbHexagonalPrisms() const throw(SALOME_Exception)
+{
+ Unexpect aCatch(SalomeException);
+ return _myMeshDS->GetMeshInfo().NbHexPrisms();
+}
+
//================================================================================
/*!
* \brief Return number of polyhedrons in the mesh