00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 #ifndef  _MICELLEXTRACTIJK_H
00024 #define  _MICELLEXTRACTIJK_H
00025 
00026 #include <MeshVizXLM/mesh/data/MiDataSetI.h>
00027 #include <MeshVizXLM/mesh/data/MiDataSetIjk.h>
00028 #include <MeshVizXLM/extractors/MiBaseExtractor.h>
00029 #include <MeshVizXLM/extrmesh/data/MeXDataSetI.h>
00030 
00031 #include <MeshVizXLM/mesh/MiVolumeMeshRegular.h>
00032 #include <MeshVizXLM/mesh/MiVolumeMeshRectilinear.h>
00033 #include <MeshVizXLM/mesh/MiVolumeMeshCurvilinear.h>
00034 #include <MeshVizXLM/extrmesh/MeXSurfaceMeshUnstructured.h>
00035 #include <MeshVizXLM/tessellator/MiTessellator.h>
00036 
00037 #include <Inventor/STL/vector>
00038 
00039 class MiCellFilterIjk;
00040 
00052 class MESHVIZXLM_EXTR_API MiCellExtractIjk : virtual public MiBaseExtractor
00053 {
00054 public:
00055     
00056   virtual ~MiCellExtractIjk() {}
00057 
00059 
00066   static MiCellExtractIjk* getNewInstance(const MiVolumeMeshRegular& mesh, bool parallel = true, MiTessellator* tessellator=NULL);
00067   static MiCellExtractIjk* getNewInstance(const MiVolumeMeshRectilinear& mesh, bool parallel = true, MiTessellator* tessellator=NULL);
00068   static MiCellExtractIjk* getNewInstance(const MiVolumeMeshCurvilinear& mesh, bool parallel = true, MiTessellator* tessellator=NULL);
00070 
00074   class triplet 
00075   {
00076   public:
00077     triplet():i(0),j(0),k(0) {} 
00078     triplet(size_t x, size_t y, size_t z):i(x),j(y),k(z) {} 
00079     triplet(size_t v):i(v),j(v),k(v) {} 
00080     size_t i; 
00081     size_t j; 
00082     size_t k; 
00084     friend bool operator ==(const triplet &t1, const triplet &t2) 
00085     { return (t1.i==t2.i && t1.j==t2.j && t1.k==t2.k);}
00087     friend bool operator <(const triplet &t1, const triplet &t2) 
00088     { return (t1.i<t2.i || (t1.i==t2.i && (t1.j<t2.j || (t1.j==t2.j && t1.k<t2.k)))); }
00089   };
00090 
00098   virtual const MeXSurfaceMeshUnstructured&
00099   extractCell(const std::vector<triplet>& cellIndexes, double factor, const MiCellFilterIjk* cellFilter=NULL) = 0;
00100 
00108   virtual const MeXSurfaceMeshUnstructured&
00109   extractCell(double factor, const MiCellFilterIjk* cellFilter=NULL) = 0;
00110  
00118   virtual const MeXScalardSetI& extractScalarSet(const MiScalardSetIjk& inputSet) = 0;
00119 
00127   virtual const MeXVec3dSetI& extractVec3Set(const MiVec3dSetIjk& inputSet) = 0;
00128 
00136   virtual const MeXStringSetI& extractStringSet(const MiStringSetIjk& inputSet) = 0;
00137 
00141   virtual const MeXSurfaceMeshUnstructured& getExtract() const = 0;
00142 
00143 };
00144 
00145 #endif 
00146 
00147 
00148