00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023 #ifndef _MBSURFACEMESHPOLYGON_H
00024 #define _MBSURFACEMESHPOLYGON_H
00025
00026 #ifdef _WIN32
00027 # pragma warning( push )
00028 # pragma warning(disable:4250)
00029 #endif
00030
00031 #include <mesh/surfaces/MbSurfaceMeshUnstructured.h>
00032 #include <topology/MbPolygonCellsSet.h>
00033 #include <MeshVizXLM/MbVec3.h>
00034
00035 #include <Inventor/STL/vector>
00036 #include <Inventor/STL/iostream>
00037
00047 template <typename _CoordT=MbVec3d, typename _ScalarT=double, typename _Vec3T=MbVec3d>
00048 class MbSurfaceMeshPolygon : public MbSurfaceMeshUnstructured<_CoordT,_ScalarT,_Vec3T>
00049 {
00050
00051 public:
00052
00056 template <typename _Vec3Iter, typename _NodeIdIter, typename _numNodeIter>
00057 MbSurfaceMeshPolygon(_Vec3Iter beginCoord, _Vec3Iter endCoord,
00058 _NodeIdIter beginId, _NodeIdIter endId,
00059 _numNodeIter beginNum, _numNodeIter endNum);
00060
00064 template <typename _NodeIdIter, typename _numNodeIter>
00065 void setTopology(_NodeIdIter beginId, _NodeIdIter endId,
00066 _numNodeIter beginNum, _numNodeIter endNum);
00067
00071 template <typename _BoolIter>
00072 void setDeadCells(_BoolIter beginId, _BoolIter endId)
00073 {
00074 m_topology.assignDeadFlags(beginId,endId);
00075 }
00076
00077 virtual const MbPolygonCellsSet& getTopology() const;
00078
00079 private:
00080 virtual std::ostream& toStream(std::ostream& s) const;
00081
00082 MbPolygonCellsSet m_topology;
00083 };
00084
00085
00086
00087 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00088 template <typename _Vec3Iter, typename _NodeIdIter, typename _numNodeIter>
00089 inline MbSurfaceMeshPolygon<_CoordT,_ScalarT,_Vec3T>::MbSurfaceMeshPolygon(
00090 _Vec3Iter beginCoord, _Vec3Iter endCoord,
00091 _NodeIdIter beginId, _NodeIdIter endId,
00092 _numNodeIter beginNum, _numNodeIter endNum
00093 ) :
00094 MbSurfaceMeshUnstructured<_CoordT,_ScalarT,_Vec3T>(beginCoord,endCoord)
00095 {
00096 setTopology(beginId,endId,beginNum,endNum);
00097 }
00098
00099
00100
00101 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00102 inline const MbPolygonCellsSet&
00103 MbSurfaceMeshPolygon<_CoordT,_ScalarT,_Vec3T>::getTopology() const
00104 {
00105 return m_topology;
00106 }
00107
00108
00109
00110
00111 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00112 template <typename _NodeIdIter, typename _numNodeIter>
00113 inline void
00114 MbSurfaceMeshPolygon<_CoordT,_ScalarT,_Vec3T>::setTopology(_NodeIdIter beginId, _NodeIdIter endId,
00115 _numNodeIter beginNum, _numNodeIter endNum)
00116 {
00117 m_topology.assign(beginId,endId,beginNum,endNum);
00118 }
00119
00120
00121
00122 template <typename _CoordT, typename _ScalarT, typename _Vec3T>
00123 inline std::ostream&
00124 MbSurfaceMeshPolygon<_CoordT,_ScalarT,_Vec3T>::toStream(std::ostream& s) const
00125 {
00126 s << "# MbSurfaceMeshPolygon" << std::endl;
00127
00128
00129 MbSurfaceMeshUnstructured<_CoordT,_ScalarT,_Vec3T>::toStream(s);
00130
00131 return s;
00132 }
00133
00134 #ifdef _WIN32
00135 # pragma warning( pop )
00136 #endif
00137
00138 #endif
00139
00140
00141
00142
00143
00144
00145
00146