nuclear@12: /* nuclear@12: glviewvol is an OpenGL 3D volume data viewer nuclear@12: Copyright (C) 2014 John Tsiombikas nuclear@12: nuclear@12: This program is free software: you can redistribute it and/or modify nuclear@12: it under the terms of the GNU General Public License as published by nuclear@12: the Free Software Foundation, either version 3 of the License, or nuclear@12: (at your option) any later version. nuclear@12: nuclear@12: This program is distributed in the hope that it will be useful, nuclear@12: but WITHOUT ANY WARRANTY; without even the implied warranty of nuclear@12: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the nuclear@12: GNU General Public License for more details. nuclear@12: nuclear@12: You should have received a copy of the GNU General Public License nuclear@12: along with this program. If not, see . nuclear@12: */ 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_