PelVis
MyRenderer.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vtkSmartPointer.h>
4 #include <vtkActor.h>
5 #include <vtkOpenGLPolyDataMapper.h>
6 #include <vtkRenderer.h>
7 #include <vtkRenderWindow.h>
8 #include <vtkPolyDataReader.h>
9 #include <vtkPolyData.h>
10 #include <vtkPolyDataNormals.h>
11 #include <vtkRenderWindowInteractor.h>
12 #include <vtkProperty.h>
13 #include <vtkCamera.h>
14 #include <vtkLight.h>
15 #include <MyActor.h>
16 #include <vtkPlaneSource.h>
17 
18 #include "utils.h"
19 #include "MyShaderCallback.h"
20 
21 // not used anymore
22 namespace
23 {
24  bool SUCCESS = 1;
25  bool FAIL = 0;
26 
27  double AMBIENTCOLOR[3]{ 0.2, 0.2, 1.0 };
28  double DIFFUSECOLOR[3]{ 1.0, 0.0, 0.0 };
29  double SPECULARCOLOR[3]{ 1.0, 1.0, 1.0 };
30  double AMBIENT = 0.5;
31  double DIFFUSE = 0.7;
32  double SPECULAR = 0.5;
33  double SPECULARPOWER = 20.0;
34  double OPACITY = 1.0;
35 
36  double CAMERAPOSITION[3]{ -0.2, 0.4, 1 };
37  double FOCALPOINT[3]{ 0, 0, 0 };
38  double CAMERAVIEWUP[3]{ 0, 1, 0 };
39  double ZOOM = 1.0;
40 
41  double BACKGROUNDCOLOR[3]{ 0.0, 0.0, 0.0 };
42 
43  int isoLineDistance = 20;
44 
45  int RENDERWINDOWSIZE[2]{ 400, 400 };
46 }
47 
48 
54 {
55 public:
60  MyRenderer(bool isSplitted, vtkRenderWindow* renderWindow = nullptr);
61  ~MyRenderer();
62 
68  void claculateDistanceToActor(int keyMainActor, int keyTumorActor, bool splittedMiddle = false, bool splittedBorder = false);
69 
73  void LoadPolydataFromFile(const char* filename, vtkMatrix4x4* viewMatrix = NULL);
74 
75 
80  void LoadShaders(QString path);
81 
86  vtkSmartPointer<MyActor> CopyActor(vtkSmartPointer<MyActor> actor, QString name);
87 
88 
92  void SplitPolygons();
93 
99  void LinkLabelToShader(int label, QString name, vtkSmartPointer<MyShaderCallback> callback = 0);
100 
104  void SetShadingProperties();
105 
109  void SetCameraProperties(
110  double cameraPosition[3] = CAMERAPOSITION,
111  double focalPoint[3] = FOCALPOINT,
112  double viewUp[3] = CAMERAVIEWUP,
113  double zoom = ZOOM
114  );
115 
119  void Begin();
120 
124  void SetDefaults();
125 
130  vtkSmartPointer<vtkPolyData> FusePolygons(vtkSmartPointer<vtkPolyData> polyData1,
131  vtkSmartPointer<vtkPolyData> polyData2);
132 
138  vtkSmartPointer<vtkPolyData> CloseOpenPolygons(vtkSmartPointer<vtkPolyData> polyData);
139 
145  void showTargetStructure(int keyTargetStructure, int keyRiskStructure);
146 
152  vtkSmartPointer<vtkPolyData> SplitPolygon(int actorID, bool safeToPolyDataMap = true);
153 
154  /*
155  * returns the current vtkRenderWindow
156  */
157  vtkSmartPointer<vtkRenderWindow> GetRenderWindow() const { return renderWindow; };
158 
162  void ConnectInteractors();
163 
167  vtkSmartPointer<vtkRenderer> GetRenderer() const { return renderer; }
168 
169 
170 
174  void copyData(MyRenderer* renderer);
175 
179  double* GetOriginOfClipping() { return clippingPlaneSource->GetOrigin(); }
180 
184  double* GetNormalOfClipping() { return clippingPlaneSource->GetNormal(); }
185 
189  vtkSmartPointer<vtkPlaneSource> GetClippingPlane() { return clippingPlaneSource; }
190 
194  void CreateClippingPlane(vtkSmartPointer<vtkPlaneSource> from);
195 
199  void CreateClippingPlane();
200 
204  void UpdateClippingPlane(double normal[3]);
205 
209  void UpdateClippingPlane(double step);
210 
211 private:
212 
213  // contains the polydata of the whole dataset
214  vtkSmartPointer<vtkPolyData> completeData;
215  // contains for each label the corresponding vtkPolyData
216  QMap<int, vtkSmartPointer<vtkPolyData>> labeledPolydata;
217  // contains for each label the corresponding vtkPolyData (is used for the clipped view)
218  QMap<int, vtkSmartPointer<vtkPolyData>> labeledPolydataSplitted;
219  // maps name of the structure (i.e. context, risk, ... ) to the corresponding actor
220  QMap<QString, vtkSmartPointer<MyActor>> actorMap;
221 
222  // the renderer of the scene, renderwindow and interactor
223  vtkSmartPointer<vtkRenderer> renderer;
224  vtkSmartPointer<vtkRenderWindow> renderWindow;
225  vtkNew<vtkRenderWindowInteractor> iren;
226 
227  // flag which is set if the window with the splitted view should be shown
228  bool isSplitted;
229 
230 
231  // Plane which defines at which position the polydata shall be clipped
232  vtkSmartPointer<vtkPlaneSource> clippingPlaneSource;
233  // actor for the visualization of the clippingPlane
234  vtkSmartPointer<vtkActor> clippingActor;
235 
236 
237 };
238 
vtkSmartPointer< vtkPlaneSource > GetClippingPlane()
Definition: MyRenderer.h:189
void claculateDistanceToActor(int keyMainActor, int keyTumorActor, bool splittedMiddle=false, bool splittedBorder=false)
Definition: MyRenderer.cpp:207
vtkSmartPointer< vtkRenderer > GetRenderer() const
Definition: MyRenderer.h:167
vtkSmartPointer< vtkPolyData > CloseOpenPolygons(vtkSmartPointer< vtkPolyData > polyData)
Definition: MyRenderer.cpp:361
void LoadShaders(QString path)
Definition: MyRenderer.cpp:602
double * GetOriginOfClipping()
Definition: MyRenderer.h:179
void ConnectInteractors()
Definition: MyRenderer.cpp:736
vtkSmartPointer< vtkPolyData > SplitPolygon(int actorID, bool safeToPolyDataMap=true)
Definition: MyRenderer.cpp:398
void LoadPolydataFromFile(const char *filename, vtkMatrix4x4 *viewMatrix=NULL)
Definition: MyRenderer.cpp:503
void showTargetStructure(int keyTargetStructure, int keyRiskStructure)
Definition: MyRenderer.cpp:194
MyRenderer(bool isSplitted, vtkRenderWindow *renderWindow=nullptr)
Definition: MyRenderer.cpp:172
vtkSmartPointer< MyActor > CopyActor(vtkSmartPointer< MyActor > actor, QString name)
Definition: MyRenderer.cpp:678
double * GetNormalOfClipping()
Definition: MyRenderer.h:184
void SetDefaults()
Definition: MyRenderer.cpp:661
void UpdateClippingPlane(double normal[3])
vtkSmartPointer< vtkRenderWindow > GetRenderWindow() const
Definition: MyRenderer.h:157
vtkSmartPointer< vtkPolyData > FusePolygons(vtkSmartPointer< vtkPolyData > polyData1, vtkSmartPointer< vtkPolyData > polyData2)
Definition: MyRenderer.cpp:344
void CreateClippingPlane()
Definition: MyRenderer.cpp:787
void Begin()
Definition: MyRenderer.cpp:827
void copyData(MyRenderer *renderer)
Definition: MyRenderer.cpp:756
void SetShadingProperties()
Definition: MyRenderer.cpp:670
void SplitPolygons()
Definition: MyRenderer.cpp:692
void LinkLabelToShader(int label, QString name, vtkSmartPointer< MyShaderCallback > callback=0)
Definition: MyRenderer.cpp:704
void SetCameraProperties(double cameraPosition[3]=CAMERAPOSITION, double focalPoint[3]=FOCALPOINT, double viewUp[3]=CAMERAVIEWUP, double zoom=ZOOM)
Definition: MyRenderer.cpp:727