Eigene Dateien/Vis/src/VTransferFunction2D.h

Go to the documentation of this file.
00001 #pragma once
00002 
00003 #ifndef __v_transfer_function2d_h
00004 #define __v_transfer_function2d_h
00005 
00006 #include <map>
00007 #include <vector>
00008 
00009 #include "VVector.h"
00010 #include "VFramebufferObject.h"
00011 
00012 
00013 class QVolRendCanvas;
00014 
00018 struct vTransferFunction2DPoint
00019 {
00023         vTransferFunction2DPoint() : m_Color(), m_Alpha(1.0f), m_gmag(1.0f), m_density(0)
00024         {
00025 
00026         }
00027 
00028         VVector m_Color;        
00029         float m_Alpha;          
00030         float m_gmag;           
00031         float m_density;        
00032 };
00033 
00034 
00038 struct vNormal2DPoint
00039 {
00043         vNormal2DPoint() :x(0.0f), y(0.0f), rgb(), alpha(0.0f)
00044         {
00045 
00046         }
00047 
00048         
00049         float x;                
00050         float y;                
00051         VVector rgb;    
00052         float alpha;    
00053 };
00054 
00058 struct vTransferFunctionWannabeTriangle
00059 {
00063         vTransferFunctionWannabeTriangle( ) :a_offsetw(0.0f),a_offseth(0.0f),a_skew(0.0f)
00064         {
00065 
00066         }
00067 
00068 
00076         vTransferFunctionWannabeTriangle(       vNormal2DPoint p1, 
00077                                                                                 vNormal2DPoint p2, 
00078                                                                                 vNormal2DPoint p3,
00079                                                                                 vNormal2DPoint p4) : point1(p1), point2(p2), point3(p3), point4(p4),
00080                                                                                                                          a_offsetw(0.0f),a_offseth(0.0f),a_skew(0.0f)
00081         {
00082 
00083         }
00084 
00085         
00086         vNormal2DPoint point1;                                  
00087         vNormal2DPoint point2;                                  
00088         vNormal2DPoint point3;                                  
00089         vNormal2DPoint point4;                                  
00091         float a_offsetw;                                                
00092         float a_offseth;                                                
00093         float a_skew;                                                   
00094 };
00095 
00100 class VTransferFunction2D
00101 {
00102 public:
00103 
00107         VTransferFunction2D() :  
00108                                                         m_VolumeHistogram2D(0), 
00109                                                         m_VolumeHistogramDisplayList2D(0),
00110                                                         m_hasChanged(true), 
00111                                                         m_TransferFunction2DHandle(0), 
00112                                                         m_Histogram2DTextureHandle(0),
00113                                                         m_FramebufferObject(NULL)
00114         {
00115 
00116         }
00117 
00121         ~VTransferFunction2D();
00122 
00126         void reinit();
00127 
00131         void draw2d();
00132 
00137         void setHistogram2D(unsigned char * volumeHistogram2d);
00138         
00145         vTransferFunction2DPoint getTransferFunctionPoint(float density, float gmag);
00146 
00153         vTransferFunctionWannabeTriangle getTransferFunction2dTriangle(float density, float gmag);
00154 
00162         VVector transferFunctionPointInRange(float selectedDensity, float gmag, float range);
00163 
00168         void addTransferFunctionPoint(vTransferFunction2DPoint newPoint);
00169 
00175         void addTransferFunctionPoint(vTransferFunctionWannabeTriangle t, vTransferFunction2DPoint newPoint);
00176 
00183         void removeTransferFunctionPoint(float density, float gmag, float tres);
00184 
00191         int findIndexTransferFunctionPoint(float density, float gmag, float tres);
00192 
00199         void changeTriangleSize( int index, float offsetw, float offseth );
00200 
00206         void changeTriangleSkew( int index, float skew );
00207 
00216         void changePointColor(float density, float gmag, VVector color, float a, float tres);
00217 
00224         void changePointPosition(int index, float newx, float newy);
00225 
00230         std::vector<vTransferFunctionWannabeTriangle> getFullTransferFunction()
00231         {
00232                 if(m_hasChanged)
00233                 {
00234                         this->interpolateTransferTriangles();
00235                 }
00236                 return m_FuncControlTriangles;
00237         }
00238 
00243         unsigned int getGLHandle()
00244         {
00245                 if(m_hasChanged)
00246                 {
00247                         this->interpolateTransferTriangles();
00248                 }
00249                 return m_FramebufferObject->getTextureHandle();
00250                 //return m_TransferFunctionHandle;
00251         }
00252 
00257         void setMainCanvas(QVolRendCanvas * maincanvas)
00258         {
00259                 m_MainCanvas = maincanvas;
00260         }
00261         
00266         bool load(std::string filename);
00267 
00272         bool save(std::string filename);
00273 
00277         void clear()
00278         {
00279                 m_FuncControlTriangles.clear();
00280                 m_FuncControlPoints.clear();
00281                 m_TransferFunction2DHandle = 0;
00282                 m_hasChanged =  true;
00283         }
00284 
00288         void renderTest()
00289         {
00290                 m_FramebufferObject->renderToLowerRightQuad();
00291         }
00292 
00293 private:
00294         
00298         void generateDisplayList2D();
00299 
00303         void interpolateTransferTriangles();
00304 
00311         double round(double Zahl, int Stellen)
00312         {
00313                 double v[] = { 1, 10, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8 };  // mgl. verlängern
00314                 return floor(Zahl * v[Stellen] + 0.5) / v[Stellen];
00315         }
00316 
00317         std::vector<vTransferFunction2DPoint> m_FuncControlPoints;                              
00318         std::vector<vTransferFunctionWannabeTriangle> m_FuncControlTriangles;   
00320         unsigned char *m_VolumeHistogram2D;                                                                     
00322         unsigned int m_VolumeHistogramDisplayList2D;                                            
00323         unsigned int m_TransferFunction2DHandle;                                                        
00324         unsigned int m_Histogram2DTextureHandle;                                                        
00325         bool m_hasChanged;                                                                                                      
00326         QVolRendCanvas * m_MainCanvas;                                                                          
00328         VFramebufferObject * m_FramebufferObject;                                                       
00330 };
00331 
00332 #endif //__v_transfer_function_h

Generated on Wed Dec 5 05:15:09 2007 for VolRendering by  doxygen 1.5.4