00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MbVolumeMeshPolyhedron_H
00024 #define _MbVolumeMeshPolyhedron_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/MbPolyhedronCellsSet.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 MbVolumeMeshPolyhedron : public MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>
00052 {
00053
00054 public:
00055
00059 MbVolumeMeshPolyhedron() {}
00060
00064 template <typename _Vec3Iter, typename _FacetNodeIter, typename _FacetRefIter>
00065 MbVolumeMeshPolyhedron(_Vec3Iter beginCoord, _Vec3Iter endCoord,
00066 _FacetNodeIter beginFacetNode, _FacetNodeIter endFacetNode,
00067 _FacetRefIter beginFacetRef, _FacetRefIter endFacetRef,
00068 const std::vector<size_t>* cellFacets, size_t numCells);
00069
00073 template <typename _Vec3Iter, typename _FacetNodeIter, typename _NumNodeIter, typename _NumFacetIter>
00074 MbVolumeMeshPolyhedron(_Vec3Iter beginCoord, _Vec3Iter endCoord,
00075 _FacetNodeIter beginFacetNode, _FacetNodeIter endFacetNode,
00076 _NumNodeIter beginNumNode, _NumNodeIter endNumNode,
00077 _NumFacetIter beginNumFacet, _NumFacetIter endNumFacet);
00078
00082 template <typename _FacetNodeIter, typename _NumNodeIter, typename _NumFacetIter>
00083 void setTopology(_FacetNodeIter beginFacetNode, _FacetNodeIter endFacetNode,
00084 _NumNodeIter beginNumNode, _NumNodeIter endNumNode,
00085 _NumFacetIter beginNumFacet, _NumFacetIter endNumFacet)
00086 {
00087 m_topology.assign(beginFacetNode,endFacetNode,beginNumNode,endNumNode,beginNumFacet,endNumFacet);
00088 }
00089
00090
00091 virtual const MbPolyhedronCellsSet& getTopology() const;
00092
00096 template <typename _BoolIter>
00097 void setDeadCells(_BoolIter beginId, _BoolIter endId)
00098 {
00099 m_topology.assignDeadFlags(beginId,endId);
00100 }
00101
00102 private:
00103 virtual std::ostream& toStream(std::ostream& s) const;
00104
00105 MbPolyhedronCellsSet m_topology;
00106 };
00107
00108
00109 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00110 template <typename _Vec3Iter, typename _FacetNodeIter, typename _FacetRefIter>
00111 inline MbVolumeMeshPolyhedron<_CoordT,_ScalarT,_Vec3T>::MbVolumeMeshPolyhedron(
00112 _Vec3Iter beginCoord, _Vec3Iter endCoord,
00113 _FacetNodeIter beginFacetNode, _FacetNodeIter endFacetNode,
00114 _FacetRefIter beginFacetRef, _FacetRefIter endFacetRef,
00115 const std::vector<size_t>* cellFacets, size_t numCells
00116 ) :
00117 MbVolumeMeshUnstructured<>(beginCoord,endCoord)
00118 {
00119 m_topology.assign(beginFacetNode,endFacetNode,beginFacetRef,endFacetRef,cellFacets,numCells);
00120 }
00121
00122
00123 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00124 template <typename _Vec3Iter, typename _FacetNodeIter, typename _NumNodeIter, typename _NumFacetIter>
00125 inline MbVolumeMeshPolyhedron<_CoordT,_ScalarT,_Vec3T>::MbVolumeMeshPolyhedron(
00126 _Vec3Iter beginCoord, _Vec3Iter endCoord,
00127 _FacetNodeIter beginFacetNode, _FacetNodeIter endFacetNode,
00128 _NumNodeIter beginNumNode, _NumNodeIter endNumNode,
00129 _NumFacetIter beginNumFacet, _NumFacetIter endNumFacet
00130 ) :
00131 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>(beginCoord,endCoord)
00132 {
00133 setTopology(beginFacetNode,endFacetNode,beginNumNode,endNumNode,beginNumFacet,endNumFacet);
00134 }
00135
00136
00137
00138 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00139 inline const MbPolyhedronCellsSet&
00140 MbVolumeMeshPolyhedron<_CoordT,_ScalarT,_Vec3T>::getTopology() const
00141 {
00142 return m_topology;
00143 }
00144
00145
00146 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00147 inline std::ostream&
00148 MbVolumeMeshPolyhedron<_CoordT,_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00149 {
00150 s << "# MbVolumeMeshPolyhedron" << std::endl;
00151
00152 MbVolumeMeshUnstructured<_CoordT,_ScalarT,_Vec3T>::toStream(s);
00153
00154 return s;
00155 }
00156
00157 #ifdef _WIN32
00158 # pragma warning( pop )
00159 #endif
00160
00161 #endif
00162
00163
00164
00165
00166
00167
00168
00169