00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBVOLUMEMESHHEXAHEDRON_H
00024 #define _MBVOLUMEMESHHEXAHEDRON_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/MbHexahedronCellsSet.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 MbVolumeMeshHexahedron : public MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>
00052 {
00053
00054 public:
00055
00059 MbVolumeMeshHexahedron() {}
00060
00061
00065 template <typename _Vec3Iter, typename _NodeIdIter>
00066 MbVolumeMeshHexahedron(_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
00078
00079 virtual const MbHexahedronCellsSet& getTopology() const;
00080
00084 template <typename _BoolIter>
00085 void setDeadCells(_BoolIter beginId, _BoolIter endId)
00086 {
00087 m_topology.assignDeadFlags(beginId,endId);
00088 }
00089
00090 void touch()
00091 {
00092 m_topology.touch();
00093 this->m_geometry.touch();
00094 }
00095
00096 private:
00097 virtual std::ostream& toStream(std::ostream& s) const;
00098
00099 MbHexahedronCellsSet m_topology;
00100 };
00101
00102
00103
00104 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00105 template <typename _Vec3Iter, typename _NodeIdIter>
00106 inline MbVolumeMeshHexahedron<_CoordT,_ScalarT,_Vec3T>::MbVolumeMeshHexahedron(
00107 _Vec3Iter beginCoord, _Vec3Iter endCoord,
00108 _NodeIdIter beginId, _NodeIdIter endId
00109 ) :
00110 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>(beginCoord,endCoord)
00111 {
00112 setTopology(beginId,endId);
00113 }
00114
00115
00116
00117 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00118 inline const MbHexahedronCellsSet&
00119 MbVolumeMeshHexahedron<_CoordT,_ScalarT,_Vec3T>::getTopology() const
00120 {
00121 return m_topology;
00122 }
00123
00124
00125 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00126 inline std::ostream&
00127 MbVolumeMeshHexahedron<_CoordT,_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00128 {
00129 s << "# MbVolumeMeshHexahedron" << std::endl;
00130
00131 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>::toStream(s);
00132
00133 return s;
00134 }
00135
00136 #ifdef _WIN32
00137 # pragma warning( pop )
00138 #endif
00139
00140 #endif
00141
00142
00143
00144
00145
00146
00147
00148