00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00039 #ifndef __vtkBivariateLinearTableThreshold__h
00040 #define __vtkBivariateLinearTableThreshold__h
00041
00042 #include "vtkTableAlgorithm.h"
00043 #include "vtkSmartPointer.h"
00044
00045 class vtkDataArrayCollection;
00046 class vtkDoubleArray;
00047 class vtkIdTypeArray;
00048 class vtkTable;
00049
00050 class VTK_INFOVIS_EXPORT vtkBivariateLinearTableThreshold : public vtkTableAlgorithm
00051 {
00052 public:
00053 static vtkBivariateLinearTableThreshold* New();
00054 vtkTypeMacro(vtkBivariateLinearTableThreshold, vtkTableAlgorithm);
00055 void PrintSelf(ostream& os, vtkIndent indent);
00056
00058
00060 vtkSetMacro(Inclusive,int);
00061 vtkGetMacro(Inclusive,int);
00063
00066 void AddColumnToThreshold(vtkIdType column, vtkIdType component);
00067
00069 int GetNumberOfColumnsToThreshold();
00070
00073 void GetColumnToThreshold(vtkIdType idx, vtkIdType& column, vtkIdType& component);
00074
00076 void ClearColumnsToThreshold();
00077
00079 vtkIdTypeArray* GetSelectedRowIds(int selection=0);
00080
00081
00082 enum OutputPorts
00083 {
00084 OUTPUT_ROW_IDS=0,
00085 OUTPUT_ROW_DATA
00086 };
00087 enum LinearThresholdType
00088 {
00089 BLT_ABOVE=0,
00090 BLT_BELOW,
00091 BLT_NEAR,
00092 BLT_BETWEEN
00093 };
00094
00095
00097 void Initialize();
00098
00100 void AddLineEquation(double* p1, double* p2);
00101
00103 void AddLineEquation(double* p, double slope);
00104
00106 void AddLineEquation(double a, double b, double c);
00107
00109 void ClearLineEquations();
00110
00112
00116 vtkGetMacro(LinearThresholdType,int);
00117 vtkSetMacro(LinearThresholdType,int);
00118 void SetLinearThresholdTypeToAbove() { this->SetLinearThresholdType(vtkBivariateLinearTableThreshold::BLT_ABOVE); }
00119 void SetLinearThresholdTypeToBelow() { this->SetLinearThresholdType(vtkBivariateLinearTableThreshold::BLT_BELOW); }
00120 void SetLinearThresholdTypeToNear() { this->SetLinearThresholdType(vtkBivariateLinearTableThreshold::BLT_NEAR); }
00121 void SetLinearThresholdTypeToBetween() { this->SetLinearThresholdType(vtkBivariateLinearTableThreshold::BLT_BETWEEN); }
00123
00125
00128 vtkSetVector2Macro(ColumnRanges,double);
00129 vtkGetVector2Macro(ColumnRanges,double);
00131
00133
00135 vtkSetMacro(DistanceThreshold,double);
00136 vtkGetMacro(DistanceThreshold,double);
00138
00140
00146 vtkSetMacro(UseNormalizedDistance,int);
00147 vtkGetMacro(UseNormalizedDistance,int);
00148 vtkBooleanMacro(UseNormalizedDistance,int);
00150
00152 static void ComputeImplicitLineFunction(double* p1, double* p2, double* abc);
00153
00155 static void ComputeImplicitLineFunction(double* p, double slope, double* abc);
00156
00157 protected:
00158 vtkBivariateLinearTableThreshold();
00159 virtual ~vtkBivariateLinearTableThreshold();
00160
00161 double ColumnRanges[2];
00162 double DistanceThreshold;
00163 int Inclusive;
00164 int LinearThresholdType;
00165 int NumberOfLineEquations;
00166 int UseNormalizedDistance;
00167
00168
00169 vtkSmartPointer<vtkDoubleArray> LineEquations;
00170 class Internals;
00171 Internals* Implementation;
00172
00173
00174 virtual int RequestData(
00175 vtkInformation*,
00176 vtkInformationVector**,
00177 vtkInformationVector*);
00178
00179 virtual int FillInputPortInformation( int port, vtkInformation* info );
00180 virtual int FillOutputPortInformation( int port, vtkInformation* info );
00181
00184 virtual int ApplyThreshold(vtkTable* tableToThreshold, vtkIdTypeArray* acceptedIds);
00185
00187 int ThresholdAbove(double x, double y);
00188
00190 int ThresholdBelow(double x, double y);
00191
00193 int ThresholdNear(double x, double y);
00194
00196 int ThresholdBetween(double x, double y);
00197 private:
00198 vtkBivariateLinearTableThreshold(const vtkBivariateLinearTableThreshold&);
00199 void operator=(const vtkBivariateLinearTableThreshold&);
00200 };
00201
00202 #endif