-// 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 SMDS : implementaion of Salome mesh data structure
// File : SMDS_Mesh.hxx
// Module : SMESH
-
+//
#ifndef _SMDS_Mesh_HeaderFile
#define _SMDS_Mesh_HeaderFile
#include "SMDS_MeshInfo.hxx"
#include "SMDS_ElemIterator.hxx"
#include "SMDS_VolumeOfNodes.hxx"
+#include "SMDS_VtkEdge.hxx"
+#include "SMDS_VtkFace.hxx"
#include "SMDS_VtkVolume.hxx"
#include "ObjectPool.hxx"
+#include "SMDS_UnstructuredGrid.hxx"
#include <boost/shared_ptr.hpp>
#include <set>
#include <vector>
#include <vtkSystemIncludes.h>
-class vtkUnstructuredGrid;
+#include "Utils_SALOME_Exception.hxx"
+#define MYASSERT(val) if (!(val)) throw SALOME_Exception(LOCALIZED("assertion not verified"));
class SMDS_EXPORT SMDS_Mesh:public SMDS_MeshObject{
public:
inline vtkUnstructuredGrid* getGrid() {return myGrid; };
inline int getMeshId() {return myMeshId; };
- SMDS_NodeIteratorPtr nodesIterator() const;
+ SMDS_NodeIteratorPtr nodesIterator(bool idInceasingOrder=false) const;
SMDS_0DElementIteratorPtr elements0dIterator() const;
SMDS_EdgeIteratorPtr edgesIterator() const;
SMDS_FaceIteratorPtr facesIterator() const;
const SMDS_MeshNode *n7,
const SMDS_MeshNode *n8);
- const SMDS_MeshFace *FindFace(std::vector<int> nodes_ids) const;
- static const SMDS_MeshFace* FindFace(std::vector<const SMDS_MeshNode *> nodes);
+ const SMDS_MeshFace *FindFace(const std::vector<int>& nodes_ids) const;
+ static const SMDS_MeshFace* FindFace(const std::vector<const SMDS_MeshNode *>& nodes);
+ static const SMDS_MeshElement* FindElement(const std::vector<const SMDS_MeshNode *>& nodes,
+ const SMDSAbs_ElementType type=SMDSAbs_All,
+ const bool noMedium=true);
/*!
* \brief Raise an exception if free memory (ram+swap) too low
typedef std::vector<SMDS_MeshCell *> SetOfCells;
void updateNodeMinMax();
- inline int fromVtkToSmds(int vtkid) { return myVtkIndex[vtkid]; };
+ inline int fromVtkToSmds(int vtkid) { MYASSERT(vtkid>=0); return myVtkIndex[vtkid]; };
+ inline int fromSmdsToVtk(int smdsid) { MYASSERT(smdsid>=0); return myIDElements[smdsid]; };
void incrementNodesCapacity(int nbNodes);
void incrementCellsCapacity(int nbCells);
-
- int myCellLinksSize;
+ void adjustStructure();
+ void dumpGrid(string ficdump="dumpGrid");
static int chunkSize;
-private:
+protected:
SMDS_Mesh(SMDS_Mesh * parent);
SMDS_MeshFace * createTriangle(const SMDS_MeshNode * node1,
const SMDS_MeshNode * node2,
- const SMDS_MeshNode * node3);
+ const SMDS_MeshNode * node3,
+ int ID);
SMDS_MeshFace * createQuadrangle(const SMDS_MeshNode * node1,
const SMDS_MeshNode * node2,
const SMDS_MeshNode * node3,
int myMeshId;
//! actual nodes coordinates, cells definition and reverse connectivity are stored in a vtkUnstructuredGrid
- vtkUnstructuredGrid* myGrid;
+ SMDS_UnstructuredGrid* myGrid;
//! Small objects like SMDS_MeshNode are allocated by chunks to limit memory costs of new
ObjectPool<SMDS_MeshNode>* myNodePool;
//! Small objects like SMDS_VtkVolume are allocated by chunks to limit memory costs of new
ObjectPool<SMDS_VtkVolume>* myVolumePool;
+ ObjectPool<SMDS_VtkFace>* myFacePool;
+ ObjectPool<SMDS_VtkEdge>* myEdgePool;
//! SMDS_MeshNodes refer to vtk nodes (vtk id = index in myNodes),store reference to this mesh, and subshape
SetOfNodes myNodes;