00001 
00002 
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012 
00013 
00014 
00031 #ifndef __vtkSMDoubleRangeDomain_h
00032 #define __vtkSMDoubleRangeDomain_h
00033 
00034 #include "vtkSMDomain.h"
00035 
00036 
00037 struct vtkSMDoubleRangeDomainInternals;
00038 
00039 
00040 class VTK_EXPORT vtkSMDoubleRangeDomain : public vtkSMDomain
00041 {
00042 public:
00043   static vtkSMDoubleRangeDomain* New();
00044   vtkTypeRevisionMacro(vtkSMDoubleRangeDomain, vtkSMDomain);
00045   void PrintSelf(ostream& os, vtkIndent indent);
00046 
00051   virtual int IsInDomain(vtkSMProperty* property);
00052 
00056   int IsInDomain(unsigned int idx, double val);
00057 
00061   double GetMinimum(unsigned int idx, int& exists);
00062 
00066   double GetMaximum(unsigned int idx, int& exists);
00067 
00071   double GetResolution(unsigned int idx, int& exists);
00072 
00074   void AddMinimum(unsigned int idx, double value);
00075 
00078   void RemoveMinimum(unsigned int idx);
00079 
00081   void RemoveAllMinima();
00082 
00084   void AddMaximum(unsigned int idx, double value);
00085 
00088   void RemoveMaximum(unsigned int idx);
00089 
00091   void RemoveAllMaxima();
00092 
00094   void AddResolution(unsigned int idx, double value);
00095 
00098   void RemoveResolution(unsigned int idx);
00099 
00101   void RemoveAllResolutions();
00102 
00105   virtual void Update(vtkSMProperty*);
00106   
00108 
00109   virtual void SetAnimationValue(vtkSMProperty *property, int idx,
00110                                  double value);
00112   
00113 protected:
00114   vtkSMDoubleRangeDomain();
00115   ~vtkSMDoubleRangeDomain();
00116 
00119   virtual int ReadXMLAttributes(vtkSMProperty* prop, vtkPVXMLElement* element);
00120 
00121   virtual void SaveState(const char* name, ostream* file, vtkIndent indent);
00122 
00124   void SetEntry(unsigned int idx, int minOrMax, int set, double value);
00125 
00126   
00127   
00128   unsigned int GetNumberOfEntries();
00129   void SetNumberOfEntries(unsigned int size);
00130 
00131   vtkSMDoubleRangeDomainInternals* DRInternals;
00132 
00133 
00134   enum
00135   {
00136     MIN = 0,
00137     MAX = 1,
00138     RESOLUTION = 2
00139   };
00140 
00141 
00142 private:
00143   vtkSMDoubleRangeDomain(const vtkSMDoubleRangeDomain&); 
00144   void operator=(const vtkSMDoubleRangeDomain&); 
00145 };
00146 
00147 #endif