ImageD  v2_7_5 (24.06.22)
ImageD is an image processing software designed for rapid prototyping and implementing algorithms and solutions for science, research and teaching.
d_visdat_slicing.h
Go to the documentation of this file.
1 /************************************
2  * added: 16.04.2019 *
3  * author: David Eilenstein *
4  * contact: D.Eilenstein@gsi.de *
5  * project: ImageD *
6  * facility: GSI Darmstadt, Ger *
7  ************************************/
8 
9 #ifndef D_VISDAT_SLICING_H
10 #define D_VISDAT_SLICING_H
11 
12 //own
13 #include <d_enum.h>
14 #include <d_error_handler.h>
15 #include <d_visdat_dim.h>
16 #include <d_visdat_range.h>
17 #include <d_visdat_slice_1d.h>
18 #include <d_visdat_slice_2d.h>
19 #include <d_visdat_slice_3d.h>
20 
21 //Qt
22 #include <QDateTime>
23 #include <QString>
24 #include <QStringList>
25 
26 //Qt::Charts
27 
28 //general
29 #include <iostream>
30 #include <sstream>
31 #include <fstream>
32 #include <vector>
33 #include <algorithm>
34 
35 //openCV
36 #include <opencv2/core/core.hpp>
37 #include <opencv2/highgui/highgui.hpp>
38 #include <opencv2/imgproc/imgproc.hpp>
39 
40 //namespaces
41 using namespace std;
42 //using namespace cv; (prohibited because of abigous names with qtdatavisualization)
43 #include <d_opencv_typedefs.h>
44 
50 {
51 public:
53  D_VisDat_Slicing(int SlicingPrototype);
54  D_VisDat_Slicing(int Dims, int SlicingPrototype);
55 
56  //inherits from D_VisDat_Range -> range definition is implemented in range class
57 
58  int ProcDims_Count ();
59  bool is_0D () {return (ProcDims_Count() == 0);}
60  bool is_1D () {return (ProcDims_Count() == 1);}
61  bool is_2D () {return (ProcDims_Count() == 2);}
62  bool is_3D () {return (ProcDims_Count() == 3);}
63  bool is_4D () {return (ProcDims_Count() == 4);}
64  bool is_5D () {return (ProcDims_Count() == 5);}
65  bool is_6D () {return (ProcDims_Count() == 6);}
66  bool is_proc_X () {return static_cast<bool>(v_ProcDims[c_DIM_X]);}
67  bool is_proc_Y () {return static_cast<bool>(v_ProcDims[c_DIM_Y]);}
68  bool is_proc_Z () {return static_cast<bool>(v_ProcDims[c_DIM_Z]);}
69  bool is_proc_T () {return static_cast<bool>(v_ProcDims[c_DIM_T]);}
70  bool is_proc_S () {return static_cast<bool>(v_ProcDims[c_DIM_S]);}
71  bool is_proc_P () {return static_cast<bool>(v_ProcDims[c_DIM_P]);}
72  bool is_proc_Dim (int d) {return static_cast<bool>(d >= 0 && d < c_DIM_NUMBER_OF ? v_ProcDims[d] : 0);}
73  bool is_proc_XY () {return static_cast<bool>(v_ProcDims[c_DIM_X]) && static_cast<bool>(v_ProcDims[c_DIM_Y]);}
74  bool is_proc_XYZ () {return static_cast<bool>(v_ProcDims[c_DIM_X]) && static_cast<bool>(v_ProcDims[c_DIM_Y]) && static_cast<bool>(v_ProcDims[c_DIM_Z]);}
75  bool is_proc_XYT () {return static_cast<bool>(v_ProcDims[c_DIM_X]) && static_cast<bool>(v_ProcDims[c_DIM_Y]) && static_cast<bool>(v_ProcDims[c_DIM_T]);}
76 
77  vector<int> ProcDims () {return v_ProcDims;}
78  int ProcDim (int p);
79 
80  void set_proc_X (bool proc) {v_ProcDims[c_DIM_X] = proc;}
81  void set_proc_Y (bool proc) {v_ProcDims[c_DIM_Y] = proc;}
82  void set_proc_Z (bool proc) {v_ProcDims[c_DIM_Z] = proc;}
83  void set_proc_T (bool proc) {v_ProcDims[c_DIM_T] = proc;}
84  void set_proc_S (bool proc) {v_ProcDims[c_DIM_S] = proc;}
85  void set_proc_P (bool proc) {v_ProcDims[c_DIM_P] = proc;}
86  void set_proc_Dim (int d, bool proc) {if(d >= 0 && d < c_DIM_NUMBER_OF) v_ProcDims[d] = proc;}
87  void set_proc_Dims (vector<int> v_proc) {if(v_proc.size() == v_ProcDims.size()) v_ProcDims = v_proc;}
88 
89  QString QS_info ();
90 
91  bool loop_Init (D_VisDat_Dim dim2loop);
92  bool loop_Next ();
93  int loop_SliceCount ();
94 
95  D_VisDat_Slice_1D loop1D_SliceCurrent ();
96  D_VisDat_Slice_2D loop2D_SliceCurrent ();
97  D_VisDat_Slice_3D loop3D_SliceCurrent();
98  D_VisDat_Slice_1D loop1D_SliceByIndex (int i);
99  D_VisDat_Slice_2D loop2D_SliceByIndex (int i);
100  D_VisDat_Slice_3D loop3D_SliceByIndex (int i);
101 
102 
103 
104 private:
105  vector<int> v_ProcDims;
106  void Init_Slicing ();
107 
108  vector<int> v_LoopSize;
109  vector<int> v_LoopCur;
110  bool Loop_Init = false;
111 };
112 
113 #endif // D_VISDAT_SLICING_H
D_VisDat_Slicing::is_4D
bool is_4D()
Definition: d_visdat_slicing.h:63
D_VisDat_Slicing::loop_Next
bool loop_Next()
Definition: d_visdat_slicing.cpp:268
D_VisDat_Slicing::loop_Init
bool loop_Init(D_VisDat_Dim dim2loop)
Definition: d_visdat_slicing.cpp:235
c_DIM_X
@ c_DIM_X
Definition: d_enum.h:235
c_DIM_Z
@ c_DIM_Z
Definition: d_enum.h:237
c_PLANE_XY
@ c_PLANE_XY
Definition: d_enum.h:293
c_DIM_T
@ c_DIM_T
Definition: d_enum.h:238
D_VisDat_Slicing::set_proc_T
void set_proc_T(bool proc)
Definition: d_visdat_slicing.h:83
D_VisDat_Slicing::is_2D
bool is_2D()
Definition: d_visdat_slicing.h:61
c_SLICE_2D_YZ
@ c_SLICE_2D_YZ
Definition: d_enum.h:269
D_VisDat_Slicing::is_proc_S
bool is_proc_S()
Definition: d_visdat_slicing.h:70
D_VisDat_Slicing::QS_info
QString QS_info()
Definition: d_visdat_slicing.cpp:217
c_DIM_Y
@ c_DIM_Y
Definition: d_enum.h:236
c_PLANE_XS
@ c_PLANE_XS
Definition: d_enum.h:296
c_SLICE_4D_XYZT
@ c_SLICE_4D_XYZT
Definition: d_enum.h:272
D_VisDat_Slicing::is_5D
bool is_5D()
Definition: d_visdat_slicing.h:64
D_VisDat_Range
The D_VisDat_Range class Describes the intersect of two D_VisDat_Dim , so it is a 6D subvolume.
Definition: d_visdat_range.h:46
D_VisDat_Slicing::set_proc_Dim
void set_proc_Dim(int d, bool proc)
Definition: d_visdat_slicing.h:86
c_SLICE_6D_ALL
@ c_SLICE_6D_ALL
Definition: d_enum.h:273
D_VisDat_Slicing::is_proc_Dim
bool is_proc_Dim(int d)
Definition: d_visdat_slicing.h:72
d_visdat_slice_3d.h
c_PLANE_YP
@ c_PLANE_YP
Definition: d_enum.h:301
D_VisDat_Slicing::loop1D_SliceByIndex
D_VisDat_Slice_1D loop1D_SliceByIndex(int i)
Definition: d_visdat_slicing.cpp:325
c_SLICE_1D_Y
@ c_SLICE_1D_Y
Definition: d_enum.h:262
D_VisDat_Dim
The D_VisDat_Dim class Represents a 6D volume.
Definition: d_visdat_dim.h:49
D_VisDat_Slicing::is_proc_T
bool is_proc_T()
Definition: d_visdat_slicing.h:69
d_visdat_dim.h
c_DIM_S
@ c_DIM_S
Definition: d_enum.h:239
c_PLANE_ZP
@ c_PLANE_ZP
Definition: d_enum.h:304
c_PLANE_XZ
@ c_PLANE_XZ
Definition: d_enum.h:294
c_PLANE_XP
@ c_PLANE_XP
Definition: d_enum.h:297
D_VisDat_Slicing::is_proc_XYZ
bool is_proc_XYZ()
Definition: d_visdat_slicing.h:74
D_VisDat_Slicing::D_VisDat_Slicing
D_VisDat_Slicing()
Definition: d_visdat_slicing.cpp:11
c_PLANE_XT
@ c_PLANE_XT
Definition: d_enum.h:295
D_VisDat_Slicing::set_proc_Z
void set_proc_Z(bool proc)
Definition: d_visdat_slicing.h:82
c_SLICE_3D_XYT
@ c_SLICE_3D_XYT
Definition: d_enum.h:271
D_VisDat_Slicing::loop3D_SliceByIndex
D_VisDat_Slice_3D loop3D_SliceByIndex(int i)
Definition: d_visdat_slicing.cpp:405
D_VisDat_Slicing::is_6D
bool is_6D()
Definition: d_visdat_slicing.h:65
c_SLICE_1D_X
@ c_SLICE_1D_X
Definition: d_enum.h:261
d_visdat_range.h
c_PLANE_TP
@ c_PLANE_TP
Definition: d_enum.h:306
D_VisDat_Slicing::is_0D
bool is_0D()
Definition: d_visdat_slicing.h:59
D_VisDat_Slicing::loop_SliceCount
int loop_SliceCount()
Definition: d_visdat_slicing.cpp:288
D_VisDat_Dim::size_Dim
int size_Dim(int idx)
Definition: d_visdat_dim.h:65
D_VisDat_Slicing::ProcDims_Count
int ProcDims_Count()
Definition: d_visdat_slicing.cpp:190
D_VisDat_Slicing::is_3D
bool is_3D()
Definition: d_visdat_slicing.h:62
c_PLANE_TS
@ c_PLANE_TS
Definition: d_enum.h:305
D_VisDat_Slice_2D
The D_VisDat_Slice_2D class Represents a 2D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_2d.h:18
D_VisDat_Slice_1D
The D_VisDat_Slice_1D class Represents a 1D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_1d.h:18
D_VisDat_Range::Init
void Init()
Definition: d_visdat_range.cpp:99
D_VisDat_Slice_3D
The D_VisDat_Slice_3D class Represents a 3D slice through a D_VisDat_Obj.
Definition: d_visdat_slice_3d.h:18
D_VisDat_Slicing::is_1D
bool is_1D()
Definition: d_visdat_slicing.h:60
c_PLANE_YT
@ c_PLANE_YT
Definition: d_enum.h:299
D_VisDat_Slicing::loop3D_SliceCurrent
D_VisDat_Slice_3D loop3D_SliceCurrent()
Definition: d_visdat_slicing.cpp:317
D_VisDat_Slicing
The D_VisDat_Slicing class Describes how a D_VisDat_Obj shall be sliced.
Definition: d_visdat_slicing.h:50
D_VisDat_Slicing::ProcDims
vector< int > ProcDims()
Definition: d_visdat_slicing.h:77
c_SLICE_3D_XYZ
@ c_SLICE_3D_XYZ
Definition: d_enum.h:270
D_VisDat_Slicing::loop1D_SliceCurrent
D_VisDat_Slice_1D loop1D_SliceCurrent()
Definition: d_visdat_slicing.cpp:301
c_PLANE_ZT
@ c_PLANE_ZT
Definition: d_enum.h:302
D_VisDat_Slicing::is_proc_XY
bool is_proc_XY()
Definition: d_visdat_slicing.h:73
d_visdat_slice_2d.h
c_PLANE_YZ
@ c_PLANE_YZ
Definition: d_enum.h:298
d_visdat_slicing.h
c_DIM_P
@ c_DIM_P
Definition: d_enum.h:240
D_VisDat_Slicing::set_proc_P
void set_proc_P(bool proc)
Definition: d_visdat_slicing.h:85
d_visdat_slice_1d.h
c_DIM_NUMBER_OF
@ c_DIM_NUMBER_OF
Definition: d_enum.h:241
c_SLICE_1D_Z
@ c_SLICE_1D_Z
Definition: d_enum.h:263
d_opencv_typedefs.h
D_VisDat_Slicing::set_proc_Dims
void set_proc_Dims(vector< int > v_proc)
Definition: d_visdat_slicing.h:87
c_SLICE_1D_T
@ c_SLICE_1D_T
Definition: d_enum.h:264
c_PLANE_ZS
@ c_PLANE_ZS
Definition: d_enum.h:303
D_VisDat_Slicing::set_proc_Y
void set_proc_Y(bool proc)
Definition: d_visdat_slicing.h:81
D_VisDat_Slicing::is_proc_P
bool is_proc_P()
Definition: d_visdat_slicing.h:71
D_VisDat_Slicing::set_proc_S
void set_proc_S(bool proc)
Definition: d_visdat_slicing.h:84
D_VisDat_Slicing::is_proc_XYT
bool is_proc_XYT()
Definition: d_visdat_slicing.h:75
D_VisDat_Slicing::loop2D_SliceCurrent
D_VisDat_Slice_2D loop2D_SliceCurrent()
Definition: d_visdat_slicing.cpp:309
D_VisDat_Slicing::set_proc_X
void set_proc_X(bool proc)
Definition: d_visdat_slicing.h:80
d_enum.h
QSL_DimIndices
const QStringList QSL_DimIndices
Definition: d_enum.h:251
D_VisDat_Slicing::is_proc_Z
bool is_proc_Z()
Definition: d_visdat_slicing.h:68
D_VisDat_Slicing::is_proc_X
bool is_proc_X()
Definition: d_visdat_slicing.h:66
c_SLICE_1D_S
@ c_SLICE_1D_S
Definition: d_enum.h:265
D_VisDat_Slicing::ProcDim
int ProcDim(int p)
Definition: d_visdat_slicing.cpp:200
D_VisDat_Slicing::is_proc_Y
bool is_proc_Y()
Definition: d_visdat_slicing.h:67
d_error_handler.h
c_SLICE_1D_P
@ c_SLICE_1D_P
Definition: d_enum.h:266
c_PLANE_YS
@ c_PLANE_YS
Definition: d_enum.h:300
c_SLICE_2D_XY
@ c_SLICE_2D_XY
Definition: d_enum.h:267
D_VisDat_Slicing::loop2D_SliceByIndex
D_VisDat_Slice_2D loop2D_SliceByIndex(int i)
Definition: d_visdat_slicing.cpp:365
c_SLICE_2D_XZ
@ c_SLICE_2D_XZ
Definition: d_enum.h:268
c_PLANE_SP
@ c_PLANE_SP
Definition: d_enum.h:307