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@0: #ifndef VOLUME_H_ nuclear@0: #define VOLUME_H_ nuclear@0: nuclear@1: #include nuclear@0: #include "image.h" nuclear@0: nuclear@0: class Volume { nuclear@0: public: nuclear@0: virtual ~Volume(); nuclear@0: nuclear@1: // returns 0 if the volume is continuously defined nuclear@0: virtual int num_samples(int dim) const; nuclear@0: nuclear@1: // central differences offset will be delta / num_samples for discrete volumes nuclear@1: // and delta for continuous volumes nuclear@0: virtual void normalf(float *norm, float x, float y, float z, float delta = 1.0); nuclear@0: virtual void normali(float *norm, int x, int y, int z); nuclear@0: nuclear@0: virtual float valuef(float x, float y, float z) const = 0; nuclear@0: virtual float valuei(int x, int y, int z) const = 0; nuclear@0: }; nuclear@0: nuclear@0: class VoxelVolume : public Volume { nuclear@0: protected: nuclear@1: int size[3]; nuclear@0: std::vector slices; nuclear@0: nuclear@0: public: nuclear@0: VoxelVolume(); nuclear@3: ~VoxelVolume(); nuclear@0: nuclear@0: bool load(const char *fname); nuclear@0: nuclear@0: int num_samples(int dim) const; nuclear@0: nuclear@0: float valuef(float x, float y, float z) const; nuclear@0: float valuei(int x, int y, int z) const; nuclear@0: }; nuclear@0: nuclear@0: #endif // VOLUME_H_