marExperiment.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Program:   wxMaracas
00004   Module:    $RCSfile: marExperiment.h,v $
00005   Language:  C++
00006   Date:      $Date: 2009/05/14 13:55:07 $
00007   Version:   $Revision: 1.1 $
00008 
00009   Copyright: (c) 2002, 2003
00010   License:
00011   
00012      This software is distributed WITHOUT ANY WARRANTY; without even 
00013      the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
00014      PURPOSE.  See the above copyright notice for more information.
00015 
00016 =========================================================================*/
00017 #ifndef __MAR__KERNEL__EXPERIMENT__HXX__
00018 #define __MAR__KERNEL__EXPERIMENT__HXX__
00019 
00020 #include <vector>
00021 #include "volume.hxx"
00022 #include "marAxis.h"
00023 #include "marDynData.h"
00024 #include "GestionBifurcations.h"
00025 
00026 class MAR_KERNEL_EXPORT marExperiment : public marObject
00027 {
00028 
00029 public:
00030 
00031   marExperiment( marParameters* p = NULL );
00032   ~marExperiment( );
00033 
00034   wxString& getDescription( ) { return( _description ); };
00035   void setDescription( wxString& d )    { _description = d; };
00036 
00037   marDynData* getDynData( )     { return( _dynData ); };
00038 
00039   void getVOI( int* voi ) { memcpy( voi, _voi, sizeof( int ) * 6 ); };
00040   void setVOI( int* voi ) { memcpy( _voi, voi, sizeof( int ) * 6 ); };
00041 
00042   void initExperiment( kVolume* volume );
00043 
00044   void setStartPoint( int* sp )
00045   {
00046     setStartPoint( sp[ 0 ], sp[ 1 ], sp[ 2 ] );
00047   }
00048 
00049   void setStartPoint( int sx, int sy, int sz );
00050   void extractVascularTree( int sens = 1, double *vit=NULL, int cleanLevel=0 );
00051   void DeleteAxis ( unsigned int index );
00052 
00053 //  marContour* generateContour( int slice, int x, int y, std::vector< double* >* points);
00054   vtkPolyData* generateContour( int slice, int x, int y, std::vector< double* >* points);
00055 
00056   void applyChangeResolution( );
00057 
00058   int getNumberOfAxes( )
00059   {
00060     return( _axes.size( ) - 1 );
00061   };
00062 
00063   marAxis* getAxis( int i = -1 ) 
00064   { 
00065     return( _axes[ i + 1 ] ); 
00066   };
00067 
00068   void appendAxis( marAxis* ax )
00069   {
00070     _axes.push_back( ax );
00071     _axes[ 0 ] = ax;
00072   }
00073 
00074   void setAxis( int i )
00075   {
00076     _axes[ 0 ] = _axes[ i + 1 ];
00077   }
00078 
00079   int   getQuantStart( )  { return _axes[0]->getStartQuant( );};
00080   int   getQuantFinish( ) { return _axes[0]->getFinishQuant( );};
00081   void  backQuant( );
00082 
00083   void prepareQuantification( );
00084 
00085   marContour*           getContour( int i )                     { return(_axes[0]->getContour           ( i ,  _dynData->getVolume( )  ));      };
00086   vtkImageData*         getSliceImage( int i )          { return(_axes[0]->getSliceImage        ( i ,  _dynData->getVolume( )  ));      };
00087   vtkProbeFilter*       get3DSlice( int i )                     { return(_axes[0]->get3DSlice           ( i ,  _dynData->getVolume( )  ));      };
00088   vtkPoints*            get3Dcontour( int i )           { return(_axes[0]->get3Dcontour         ( i ,  _dynData->getVolume( )  ));      };
00089   vtkPolyData*          get2Dcontour( int i )           { return(_axes[0]->get2Dcontour         ( i ,  _dynData->getVolume( )  ));      };
00090   vtkPoints*            get2DDiameterMin( int i )       { return(_axes[0]->get2DDiameterMin     ( i ,  _dynData->getVolume( )  ));      };
00091   vtkPoints*            get2DDiameterMax( int i )       { return(_axes[0]->get2DDiameterMax     ( i ,  _dynData->getVolume( )  ));      };
00092   double                        getTotalLength()                        { return _axes[0]->getTotalLength() * _dynData->getActualVoxel() ;              };
00093   double                        getSubAxisLength()                      { return _axes[0]->getSubAxisLength() * _dynData->getActualVoxel();             };
00094   double                        getReferenceArea()                      { return _axes[0]->getReferenceArea( _dynData->getVolume( ));                   };
00095   double                        getReferenceAverDiam()          { return _axes[0]->getReferenceAverDiam( _dynData->getVolume( ));               };
00096 
00097   double                        getAverageArea(int pIni, int pEnd) {return _axes[0]->getAverageArea(pIni,pEnd, _dynData->getVolume( ) );                };
00098   int                           getNumberOfSlices( )            { return _axes[0]->getNumberOfContours();                                                               };
00099 
00100   void calculateAxesSignal( );
00101   void prepareContourImages( );
00102 
00103   void ClearContours();
00104   void RegenerateAxis();
00105   void RegenerateSignal();
00106   void RecalculateAxis();
00107 
00108   //General methods.
00109   void reset( );
00110   void copyFrom( const marObject& from );
00111 
00112   //Persistence methods.
00113   bool save( std::ofstream& os );
00114   bool load( std::ifstream& is );
00115 
00116 private:
00117 
00118   wxString _description;
00119   marDynData* _dynData;
00120   int _voi[ 6 ];
00121   int _startPoint[ 3 ];
00122 
00123   std::vector< marAxis* > _axes;
00124 };
00125 
00126 #endif // __MAR__KERNEL__EXPERIMENT__HXX__

Generated on 18 Mar 2010 for creaMaracasVisu_lib by  doxygen 1.6.1