nuclear@6: #ifndef XFERMAP_H_ nuclear@6: #define XFERMAP_H_ nuclear@6: nuclear@6: class TransferFunc { nuclear@6: public: nuclear@6: virtual ~TransferFunc(); nuclear@6: nuclear@6: virtual float map(float x) const = 0; nuclear@6: virtual void map(float x, float *rgba_value) const = 0; nuclear@6: }; nuclear@6: nuclear@6: class TransferWindow : public TransferFunc { nuclear@6: private: nuclear@6: float soft_rad; nuclear@7: float low[3], high[3]; // rgb nuclear@6: nuclear@6: public: nuclear@7: enum { HANDLE_LOW = 0, HANDLE_HIGH = 1}; nuclear@7: nuclear@6: TransferWindow(); nuclear@6: nuclear@7: // handle: 0 or HANDLE_LOW is low, 1 or HANDLE_HIGH is high nuclear@7: // if channel == -1, change all channels simultaneously nuclear@7: void set_handle(int channel, int handle, float val); nuclear@7: float get_handle(int channel, int handle) const; nuclear@7: nuclear@7: int nearest_handle(int channel, float pos) const; nuclear@7: nuclear@6: void set_interval(float a, float b); nuclear@6: void set_interval(float *rgba_low, float *rgba_high); nuclear@6: void set_interval_rgba(int channel, float a, float b); nuclear@6: nuclear@6: void get_interval(float *aptr, float *bptr) const; nuclear@6: void get_interval_rgba(float *rgba_low, float *rgba_high) const; nuclear@6: void get_interval_rgba(int channel, float *aptr, float *bptr) const; nuclear@6: nuclear@6: void set_soft_radius(float s); nuclear@6: float get_soft_radius() const; nuclear@6: nuclear@6: float map(float x) const; nuclear@6: void map(float x, float *rgba_value) const; nuclear@6: }; nuclear@6: nuclear@6: #endif // XFERMAP_H_