00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00015 
00016 
00017 
00018 
00019 
00020 
00021 
00022 
00023 
00024 
00025 
00026 
00027 
00028 #ifndef _math_isosurf_isosurf_h
00029 #define _math_isosurf_isosurf_h
00030 
00031 #ifdef __GNUC__
00032 #pragma interface
00033 #endif
00034 
00035 #include <math/isosurf/surf.h>
00036 
00037 class IsosurfaceGen {
00038   protected:
00039     double _resolution;
00040   public:
00041     IsosurfaceGen();
00042     virtual ~IsosurfaceGen();
00043     virtual void isosurface(double value,
00044                             TriangulatedSurface& surf) = 0;
00045     virtual void set_resolution(double);
00046 };
00047 
00048 class ImplicitSurfacePolygonizer: public IsosurfaceGen {
00049   private:
00050     
00051     
00052     static ImplicitSurfacePolygonizer* current;
00053     static int add_triangle_to_current(int,int,int,VERTICES);
00054     static double value_of_current(double x, double y, double z);
00055   protected:
00056     Ref<Volume> _volume;
00057 
00058 #ifdef HAVE_STL
00059     std::vector<Ref<Vertex> >  _tmp_vertices;
00060 #else
00061     Array<Ref<Vertex> >  _tmp_vertices;
00062 #endif
00063     TriangulatedSurface* _surf;
00064     double _value;
00065   public:
00066     ImplicitSurfacePolygonizer(const Ref<Volume>&);
00067     virtual ~ImplicitSurfacePolygonizer();
00068     virtual void isosurface(double value,
00069                             TriangulatedSurface& surf);
00070 };  
00071 
00072 #endif
00073 
00074 
00075 
00076 
00077