-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathvtkProstateNavGUI.h
More file actions
278 lines (205 loc) · 8.01 KB
/
Copy pathvtkProstateNavGUI.h
File metadata and controls
278 lines (205 loc) · 8.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
/*=auto=========================================================================
Portions (c) Copyright 2007 Brigham and Women's Hospital (BWH) All Rights Reserved.
See Doc/copyright/copyright.txt
or http://www.slicer.org/copyright/copyright.txt for details.
Program: 3D Slicer
Module: $RCSfile: $
Date: $Date: $
Version: $Revision: $
=========================================================================auto=*/
#ifndef __vtkProstateNavGUI_h
#define __vtkProstateNavGUI_h
#ifdef WIN32
#include "vtkProstateNavWin32Header.h"
#endif
#include "vtkSlicerModuleGUI.h"
#include "vtkProstateNavLogic.h"
#include "vtkCallbackCommand.h"
#include "vtkSlicerInteractorStyle.h"
#include <string>
#include <list>
class vtkKWPushButton;
class vtkKWPushButtonSet;
class vtkKWEntryWithLabel;
class vtkKWMenuButtonWithLabel;
class vtkKWMenuButton;
class vtkKWCheckButton;
class vtkKWScaleWithEntry;
class vtkKWEntry;
class vtkKWFrame;
class vtkKWEntryWithLabel;
class vtkKWLoadSaveButtonWithLabel;
class vtkKWMultiColumnListWithScrollbars;
class vtkKWWizardWidget;
class vtkSlicerNodeSelectorWidget;
class vtkProstateNavStep;
class vtkSlicerSecondaryViewerWindow;
class vtkMRMLProstateNavManagerNode;
class vtkMRMLFiducialListNode;
// Description:
// This class implements Slicer's Volumes GUI
//
class VTK_PROSTATENAV_EXPORT vtkProstateNavGUI : public vtkSlicerModuleGUI
{
public:
virtual void Register(vtkObject *o) { Superclass::Register(o); };
virtual void UnRegister(vtkObject *o) { Superclass::UnRegister(o); };
//BTX
enum {
SLICE_PLANE_RED = 0,
SLICE_PLANE_YELLOW = 1,
SLICE_PLANE_GREEN = 2
};
enum {
SLICE_RTIMAGE_NONE = 0,
SLICE_RTIMAGE_PERP = 1,
SLICE_RTIMAGE_INPLANE90 = 2,
SLICE_RTIMAGE_INPLANE = 3
};
enum {
BRING_MARKERS_TO_VIEW_KEEP_CURRENT_ORIENTATION, // show slices in their original (acquisition) directions
BRING_MARKERS_TO_VIEW_ALIGN_TO_NEEDLE // show needle aligned slices (parallel and perpendicular to the needle and robot main axis)
};
//ETX
// Precision of the target position and orientation display
static const int POSITION_PRECISION_DIGITS;
static const double POSITION_PRECISION_TOLERANCE;
public:
// Description:
// Usual vtk class functions
static vtkProstateNavGUI* New ( );
vtkTypeRevisionMacro ( vtkProstateNavGUI, vtkSlicerModuleGUI );
void PrintSelf (ostream& os, vtkIndent indent );
//SendDATANavitrack
// Description:
// Get methods on class members (no Set methods required)
vtkGetObjectMacro ( Logic, vtkProstateNavLogic );
// Description:
// API for setting VolumeNode, VolumeLogic and
// for both setting and observing them.
void SetModuleLogic ( vtkSlicerLogic *logic )
{ this->SetLogic ( vtkObjectPointer (&this->Logic), logic ); }
void SetAndObserveModuleLogic ( vtkProstateNavLogic *logic )
{ this->SetAndObserveLogic ( vtkObjectPointer (&this->Logic), logic ); }
// Description:
// Get wizard widget
vtkGetObjectMacro(WizardWidget, vtkKWWizardWidget);
// Description:
// This method builds the IGTDemo module GUI
virtual void BuildGUI ( );
// Description:
// This method builds the IGTDemo module GUI
virtual void TearDownGUI ( );
// Description:
// Add/Remove observers on widgets in the GUI
virtual void AddGUIObservers ( );
virtual void RemoveGUIObservers ( );
void AddLogicObservers ( );
void RemoveLogicObservers ( );
void AddMRMLObservers();
void RemoveMRMLObservers();
// Description:
// Get the categorization of the module.
const char *GetCategory() const { return "IGT"; }
// Description:
// Class's mediator methods for processing events invoked by
// either the Logic, MRML or GUI.
virtual void ProcessLogicEvents ( vtkObject *caller, unsigned long event, void *callData );
virtual void ProcessGUIEvents ( vtkObject *caller, unsigned long event, void *callData );
virtual void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
void HandleMouseEvent(vtkSlicerInteractorStyle *style);
// Description:
// Describe behavior at module startup and exit.
virtual void Enter (vtkMRMLNode *node);
virtual void Enter ();
virtual void Exit ( );
void Init();
//BTX
static void DataCallback(vtkObject *caller,
unsigned long eid, void *clientData, void *callData);
//ETX
vtkMRMLProstateNavManagerNode* GetProstateNavManagerNode();
// Description:
// Bring a marker to view in all three slice views along its principal axes
// N - the direction vector of the locator,
// T - the transverse direction vector of the locator (optional)
// P - the tip location of the locator (optional)
// All the above values are in RAS space.
void BringMarkerToViewIn2DViews(double* P, double* N=NULL, double* T=NULL);
// Description:
// Bring current target to view in all three slice views
void BringTargetToViewIn2DViews(int mode);
// Description:
// Request render in all viewer widgets
void RequestRenderInViewerWidgets();
void ShowSecondaryWindowCheckButtonCallback (int checked);
protected:
vtkProstateNavGUI ( );
virtual ~vtkProstateNavGUI ( );
//void SetProstateNavManager(vtkMRMLProstateNavManagerNode* node);
void SetRobot(vtkMRMLRobotNode* robot);
void SetTargetPlanList(vtkMRMLFiducialListNode* targetPlanList);
// Return i-th worfklow step page
vtkProstateNavStep* GetStepPage(int i);
//----------------------------------------------------------------
// GUI widgets
//----------------------------------------------------------------
vtkSlicerSecondaryViewerWindow* SecondaryWindow;
// Configuration Frame
vtkKWCheckButton *ShowSecondaryWindowCheckButton;
vtkSlicerNodeSelectorWidget* ProstateNavManagerSelectorWidget;
vtkSlicerNodeSelectorWidget* RobotSelectorWidget;
//----------------------------------------------------------------
// Workphase Frame
vtkKWFrame *StatusButtonFrame;
vtkKWPushButtonSet *StatusButtonSet;
vtkKWFrame *WorkphaseButtonFrame;
vtkKWPushButtonSet *WorkphaseButtonSet;
//----------------------------------------------------------------
// Wizard Frame
vtkSlicerModuleCollapsibleFrame *WizardFrame;
vtkKWWizardWidget *WizardWidget;
//----------------------------------------------------------------
// Logic Values
//----------------------------------------------------------------
vtkProstateNavLogic *Logic;
vtkCallbackCommand *DataCallbackCommand;
//----------------------------------------------------------------
// Target Fiducials
//----------------------------------------------------------------
void UpdateGUI();
private:
vtkProstateNavGUI ( const vtkProstateNavGUI& ); // Not implemented.
void operator = ( const vtkProstateNavGUI& ); //Not implemented.
void BuildGUIForConfigurationFrame();
void BuildGUIForWorkphaseFrame();
void BuildGUIForWizardFrame();
void BuildGUIForHelpFrame();
void UpdateStatusButtons();
void UpdateWorkflowSteps();
int ChangeWorkphaseInGUI(int phase);
const char* AddZFrameModel(const char* nodeName);
// Description:
// Display current target fiducial highlighted
void UpdateCurrentTargetDisplay();
void UpdateCurrentTargetDisplayInSecondaryWindow();
void SetAndObserveRobotNodeID(const char *nodeID);
vtkMRMLRobotNode* GetRobotNode();
void SetAndObserveProstateNavManagerNodeID(const char *nodeID);
void SetAndObserveTargetPlanListNodeID(const char *nodeID);
vtkMRMLFiducialListNode* GetTargetPlanListNode();
int Entered;
// store the currently displayed workflow steps
// if the same steps requested to be displayed, then nothing will happen
vtkStringArray* DisplayedWorkflowSteps;
vtkSetStringMacro(ProstateNavManagerNodeID);
char* ProstateNavManagerNodeID;
vtkMRMLProstateNavManagerNode* ProstateNavManagerNode;
vtkSetStringMacro(RobotNodeID);
char* RobotNodeID;
vtkMRMLRobotNode* RobotNode;
vtkSetStringMacro(TargetPlanListNodeID);
char* TargetPlanListNodeID;
vtkMRMLFiducialListNode* TargetPlanListNode;
};
#endif