glviewvol

annotate src/volume.h @ 14:0d2447b9c512

did the histogram... doesn't seem to work right
author John Tsiombikas <nuclear@member.fsf.org>
date Thu, 01 Jan 2015 06:36:45 +0200
parents 773f89037a35
children
rev   line source
nuclear@12 1 /*
nuclear@12 2 glviewvol is an OpenGL 3D volume data viewer
nuclear@12 3 Copyright (C) 2014 John Tsiombikas <nuclear@member.fsf.org>
nuclear@12 4
nuclear@12 5 This program is free software: you can redistribute it and/or modify
nuclear@12 6 it under the terms of the GNU General Public License as published by
nuclear@12 7 the Free Software Foundation, either version 3 of the License, or
nuclear@12 8 (at your option) any later version.
nuclear@12 9
nuclear@12 10 This program is distributed in the hope that it will be useful,
nuclear@12 11 but WITHOUT ANY WARRANTY; without even the implied warranty of
nuclear@12 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
nuclear@12 13 GNU General Public License for more details.
nuclear@12 14
nuclear@12 15 You should have received a copy of the GNU General Public License
nuclear@12 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
nuclear@12 17 */
nuclear@0 18 #ifndef VOLUME_H_
nuclear@0 19 #define VOLUME_H_
nuclear@0 20
nuclear@1 21 #include <vector>
nuclear@0 22 #include "image.h"
nuclear@0 23
nuclear@0 24 class Volume {
nuclear@0 25 public:
nuclear@0 26 virtual ~Volume();
nuclear@0 27
nuclear@1 28 // returns 0 if the volume is continuously defined
nuclear@0 29 virtual int num_samples(int dim) const;
nuclear@0 30
nuclear@1 31 // central differences offset will be delta / num_samples for discrete volumes
nuclear@1 32 // and delta for continuous volumes
nuclear@0 33 virtual void normalf(float *norm, float x, float y, float z, float delta = 1.0);
nuclear@0 34 virtual void normali(float *norm, int x, int y, int z);
nuclear@0 35
nuclear@0 36 virtual float valuef(float x, float y, float z) const = 0;
nuclear@0 37 virtual float valuei(int x, int y, int z) const = 0;
nuclear@0 38 };
nuclear@0 39
nuclear@0 40 class VoxelVolume : public Volume {
nuclear@0 41 protected:
nuclear@1 42 int size[3];
nuclear@0 43 std::vector<Image> slices;
nuclear@0 44
nuclear@14 45 float *hist;
nuclear@14 46 int num_hist_samples;
nuclear@14 47 bool hist_valid;
nuclear@14 48
nuclear@0 49 public:
nuclear@0 50 VoxelVolume();
nuclear@3 51 ~VoxelVolume();
nuclear@0 52
nuclear@0 53 bool load(const char *fname);
nuclear@0 54
nuclear@0 55 int num_samples(int dim) const;
nuclear@0 56
nuclear@0 57 float valuef(float x, float y, float z) const;
nuclear@0 58 float valuei(int x, int y, int z) const;
nuclear@14 59
nuclear@14 60 float *calc_histogram(int hist_samples);
nuclear@0 61 };
nuclear@0 62
nuclear@0 63 #endif // VOLUME_H_