/*========================================================================= Program: wxMaracas Module: $RCSfile: marContour.h,v $ Language: C++ Date: $Date: 2008/10/31 16:32:54 $ Version: $Revision: 1.1 $ Copyright: (c) 2002, 2003 License: This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ #ifndef __MAR__KERNEL__CONTOUR__HXX__ #define __MAR__KERNEL__CONTOUR__HXX__ #include "marObject.h" //#include #include "volume.hxx" #include "mathdefs.h" #include #include /** /def marObject * \brief Contour object. */ class MAR_KERNEL_EXPORT marContour : public marObject { public: /** Default constructor. */ marContour( double s, marParameters* p = NULL ); /** Default destructor. */ ~marContour( ) { reset( ); }; double getS( ) { return( _s ); }; void setS( double s ) { _s = s; }; /** Adds a contour point. */ void addContourPoint( double x, double y ); /** Resamples current contour, according to actual parameters, * to have more or less points. */ void resample( ); /** Returns if the contour has any points. */ bool isCalculated( ); /** General analyzers. */ int getNumberOfPoints( ); void getPoint( double* p, int i ); /** Quantification analyzers. */ void calculateVariables(); void do_spline( ); double getArea() { return _area; } double getPerimeter() { return _perimeter; } double getDiameterFromArea() { return _diameterFromArea; } double getDiameterFromPerimeter() { return _diameterFromPerimeter; } double getMinimumDiameter() { return _minimumDiameter; } double getMaximumDiameter() { return _maximumDiameter; } double getAverageDiameter() { return _averageDiameter; } void getMaximumLine( double* pO, double* pF ); void getMinimumLine( double* pO, double* pF ); /** General methods. */ void reset( ); void copyFrom( const marObject& from ); vtkUnstructuredGrid* Draw( ); void Delete( ); /** Persistence methods. */ bool save( std::ofstream& os ); bool load( std::ifstream& is ); private: void calculateArea(); void calculatePerimeter(); void calculateDiameterFromArea() { _diameterFromArea = sqrt( 4.0 * getArea( ) / GTM_PI ) ; } void calculateDiameterFromPerimeter() { _diameterFromPerimeter = getPerimeter( ) / GTM_PI ; } void calculateMinimumMaximumDiameter(); void calculateAverageDiameter() { _averageDiameter = ( getMaximumDiameter( ) + getMinimumDiameter( ) ) * 0.5 ; } std::vector< double* > _points; // EED borrame // std::vector< temPoint< float,2 >* > _no_spline_points; // Points that define contour without spline (persistence) std::vector< double* > _no_spline_points; // Points that define contour without spline (persistence) double _s; // paramètre curviligne (entre 0 et 1) double _min[ 4 ]; double _max[ 4 ]; vtkUnstructuredGrid* _allData; double _area; double _perimeter; double _diameterFromArea; double _diameterFromPerimeter; double _minimumDiameter; double _maximumDiameter; double _averageDiameter; }; #endif // __MAR__KERNEL__CONTOUR__HXX__