00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBVOLUMEMESHTETRAHEDRON_H
00024 #define _MBVOLUMEMESHTETRAHEDRON_H
00025
00026 #ifdef _WIN32
00027 # pragma warning( push )
00028 # pragma warning(disable:4250)
00029 #endif
00030
00031 #include <MeshVizXLM/mesh/MiVolumeMeshUnstructured.h>
00032 #include <MeshVizXLM/mesh/topology/MiVolumeTopologyExplicitI.h>
00033
00034 #include <mesh/volumes/MbVolumeMeshUnstructured.h>
00035 #include <topology/MbTetrahedronCellsSet.h>
00036 #include <MeshVizXLM/MbVec3.h>
00037
00038 #include <Inventor/STL/vector>
00039 #include <Inventor/STL/iostream>
00040
00050 template <typename _CoordT=MbVec3d, typename _ScalarT=double, typename _Vec3T=MbVec3d>
00051 class MbVolumeMeshTetrahedron : public MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>
00052 {
00053
00054 public:
00055
00059 MbVolumeMeshTetrahedron() {}
00060
00061
00065 template <typename _Vec3Iter, typename _NodeIdIter>
00066 MbVolumeMeshTetrahedron(_Vec3Iter beginCoord, _Vec3Iter endCoord,
00067 _NodeIdIter beginId, _NodeIdIter endId);
00068
00072 template <typename _NodeIdIter>
00073 void setTopology(_NodeIdIter beginId, _NodeIdIter endId)
00074 {
00075 m_topology.assign(beginId,endId);
00076 }
00077
00081 size_t getNumNodes();
00082
00083 virtual const MbTetrahedronCellsSet& getTopology() const;
00084
00088 template <typename _BoolIter>
00089 void setDeadCells(_BoolIter beginId, _BoolIter endId)
00090 {
00091 m_topology.assignDeadFlags(beginId,endId);
00092 }
00093
00094 void touch()
00095 {
00096 m_topology.touch();
00097 this->m_geometry.touch();
00098 }
00099
00100 private:
00104 virtual std::ostream& toStream(std::ostream& s) const;
00105
00106 MbTetrahedronCellsSet m_topology;
00107 };
00108
00109
00110
00111 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00112 template <typename _Vec3Iter, typename _NodeIdIter>
00113 inline MbVolumeMeshTetrahedron<_CoordT,_ScalarT,_Vec3T>::MbVolumeMeshTetrahedron(
00114 _Vec3Iter beginCoord, _Vec3Iter endCoord,
00115 _NodeIdIter beginId, _NodeIdIter endId
00116 ) :
00117 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>(beginCoord,endCoord)
00118 {
00119 setTopology(beginId,endId);
00120 }
00121
00122
00123
00124 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00125 inline const MbTetrahedronCellsSet&
00126 MbVolumeMeshTetrahedron<_CoordT,_ScalarT,_Vec3T>::getTopology() const
00127 {
00128 return m_topology;
00129 }
00130
00131
00132 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00133 inline size_t
00134 MbVolumeMeshTetrahedron<_CoordT,_ScalarT,_Vec3T>::getNumNodes()
00135 {
00136 return m_topology.getEndNodeId();
00137 }
00138
00139
00140 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00141 inline std::ostream&
00142 MbVolumeMeshTetrahedron<_CoordT,_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00143 {
00144 s << "# MbVolumeMeshTetrahedron " << std::endl;
00145
00146 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>::toStream(s);
00147
00148 return s;
00149 }
00150
00151 #ifdef _WIN32
00152 # pragma warning( pop )
00153 #endif
00154
00155 #endif
00156
00157
00158
00159
00160
00161
00162
00163