00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00021
00022
00023
00024 #ifndef __vtkSlicerViewerWidget_h
00025 #define __vtkSlicerViewerWidget_h
00026
00027 #include "vtkSlicerWidget.h"
00028 #include "vtkSlicerApplicationLogic.h"
00029 #include "vtkSlicerModelHierarchyLogic.h"
00030
00031
00032 #include "vtkSlicerRenderWidget.h"
00033 #include "vtkKWFrame.h"
00034 #include "vtkMRMLClipModelsNode.h"
00035 #include "vtkMRMLSliceNode.h"
00036 #include "vtkMRMLCameraNode.h"
00037 #include "vtkMRMLViewNode.h"
00038
00039
00040
00041 class vtkMRMLDisplayableNode;
00042 class vtkMRMLDisplayNode;
00043 class vtkMRMLModelHierarchyNode;
00044 class vtkSlicerModelHierarchyLogic;
00045 class vtkPolyData;
00046 class vtkCellArray;
00047 class vtkProp3D;
00048 class vtkActor;
00049 class vtkActorText;
00050 class vtkFollower;
00051 class vtkImplicitBoolean;
00052 class vtkPlane;
00053 class vtkWorldPointPicker;
00054 class vtkPropPicker;
00055 class vtkCellPicker;
00056 class vtkPointPicker;
00057 class vtkPlane;
00058 class vtkClipPolyData;
00059 class vtkPMatrix4x4;
00060 class vtkSlicerBoxWidget2;
00061 class vtkSlicerBoxRepresentation;
00062 class vtkBoundingBox;
00063 class VTK_SLICER_BASE_GUI_EXPORT vtkSlicerViewerWidget : public vtkSlicerWidget
00064 {
00065
00066 public:
00067 static vtkSlicerViewerWidget* New();
00068 vtkTypeRevisionMacro(vtkSlicerViewerWidget,vtkSlicerWidget);
00069 void PrintSelf(ostream& os, vtkIndent indent);
00070
00071
00072 virtual void Register(vtkObjectBase *o) { Superclass::Register(o); };
00073 virtual void UnRegister(vtkObjectBase *o) { Superclass::UnRegister(o); };
00074
00075
00078 vtkGetObjectMacro ( ClipModelsNode, vtkMRMLClipModelsNode );
00079 void SetClipModelsNode (vtkMRMLClipModelsNode *snode)
00080 {
00081 vtkSetAndObserveMRMLNodeMacro( this->ClipModelsNode, snode );
00082 }
00083
00087 virtual void ProcessWidgetEvents ( vtkObject *caller, unsigned long event, void *callData );
00088
00091 virtual void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
00092
00095 virtual void RemoveWidgetObservers ( );
00096
00099 virtual void RemoveMRMLObservers ( );
00100
00101 vtkGetObjectMacro (ApplicationLogic, vtkSlicerApplicationLogic );
00102 vtkSetObjectMacro (ApplicationLogic, vtkSlicerApplicationLogic );
00103
00104 vtkGetObjectMacro(MainViewer, vtkKWRenderWidget);
00105
00106 vtkGetObjectMacro (ViewerFrame, vtkKWFrame );
00107
00110 vtkGetObjectMacro(CameraNode, vtkMRMLCameraNode);
00111 void SetAndObserveCameraNode (vtkMRMLCameraNode *snode)
00112 {
00113 vtkSetAndObserveMRMLNodeMacro( this->CameraNode, snode );
00114 };
00115
00118 vtkGetObjectMacro(ViewNode, vtkMRMLViewNode);
00119 void SetAndObserveViewNode (vtkMRMLViewNode *snode)
00120 {
00121 vtkSetAndObserveMRMLNodeMacro( this->ViewNode, snode );
00122 };
00123
00126 vtkProp3D *GetActorByID (const char *id);
00127
00130 const char *GetIDByActor (vtkProp3D *actor);
00131
00135 void RequestCameraNodeUpdate();
00136
00137
00141 void RequestRender();
00142
00145 void Render();
00146
00149 vtkSetMacro (RenderPending, int);
00150 vtkGetMacro (RenderPending, int);
00151
00154 virtual void PackWidget ( vtkKWFrame *f );
00155 virtual void UnpackWidget ( );
00156 virtual void GridWidget ( vtkKWFrame *f, int row, int col );
00157 virtual void GridSpanWidget ( vtkKWFrame *f, int row, int col, int rowspan, int colspan );
00158 virtual void UngridWidget ( );
00159 void ColorAxisLabelActors ( double r, double g, double b);
00160
00161 void AddMRMLSceneObservers();
00162
00165 void UpdateFromMRML();
00166
00169 vtkGetObjectMacro(WorldPointPicker, vtkWorldPointPicker);
00170
00173 vtkGetObjectMacro(PropPicker, vtkPropPicker);
00176 vtkGetObjectMacro(CellPicker, vtkCellPicker);
00179 vtkGetObjectMacro(PointPicker, vtkPointPicker);
00180
00186 int Pick(int x, int y);
00187
00190 const char *GetPickedNodeName()
00191 {
00192 return this->PickedNodeName.c_str();
00193 }
00196 vtkGetVectorMacro( PickedRAS, double, 3);
00197 vtkSetVectorMacro( PickedRAS, double, 3);
00200 vtkGetMacro( PickedCellID, vtkIdType);
00201 vtkSetMacro( PickedCellID, vtkIdType);
00204 vtkGetMacro( PickedPointID, vtkIdType);
00205 vtkSetMacro( PickedPointID, vtkIdType);
00206
00209 vtkGetObjectMacro( ModelHierarchyLogic, vtkSlicerModelHierarchyLogic );
00210 vtkSetObjectMacro( ModelHierarchyLogic, vtkSlicerModelHierarchyLogic );
00211
00212 vtkGetObjectMacro ( BoxWidget, vtkSlicerBoxWidget2 );
00213 vtkGetObjectMacro ( BoxWidgetRepresentation, vtkSlicerBoxRepresentation );
00214
00215 void SetBoxWidgetInteractor();
00216
00219 vtkGetMacro( EnableRender, int);
00220 vtkSetMacro( EnableRender, int);
00221
00224
00225 enum
00226 {
00227 ActiveCameraChangedEvent = 30000
00228 };
00229
00230
00231 void SetClipPlaneFromMatrix(vtkMatrix4x4 *sliceMatrix,
00232 int planeDirection,
00233 vtkPlane *plane);
00236 vtkGetObjectMacro(BoxAxisBoundingBox, vtkBoundingBox);
00237
00240 virtual void CreateWidget();
00241
00242 void UpdateCameraNode();
00243 void UpdateViewNode();
00244
00245 void RemoveModelProps();
00246
00247 void RemoveModelObservers(int clearCache);
00248 void RemoveModelObservers( vtkMRMLDisplayableNode *model);
00249
00250 void UpdateModelsFromMRML();
00251 void UpdateModel(vtkMRMLDisplayableNode *model);
00252 void UpdateModelPolyData(vtkMRMLDisplayableNode *model);
00253 void UpdateModifiedModel(vtkMRMLDisplayableNode *model);
00254
00255 void CreateClipSlices();
00256
00257 void CreateAxis();
00258 void AddAxisActors();
00259 void UpdateAxisLabelActors();
00260 void UpdateAxis();
00261
00262 int UpdateClipSlicesFromMRML();
00263
00264 void CheckModelHierarchies();
00265 void AddHierarchiyObservers();
00266 void RemoveHierarchyObservers(int clearCache);
00267
00268 void UpdateModelHierarchies() {
00269 this->CheckModelHierarchies();
00270 this->AddHierarchiyObservers();
00271 };
00272 void UpdateModelHierarchyVisibility(vtkMRMLModelHierarchyNode* mhnode, int visibility );
00273 void UpdateModelHierarchyDisplay(vtkMRMLDisplayableNode *model);
00274
00275 void SetModelDisplayProperty(vtkMRMLDisplayableNode *model);
00276
00277 int GetDisplayedModelsVisibility(vtkMRMLDisplayNode *model);
00278
00279 void RemoveDisplayable(vtkMRMLDisplayableNode* model);
00280
00281 void AddCameraObservers();
00282 void RemoveCameraObservers();
00283
00284 vtkMRMLDisplayNode* GetHierarchyDisplayNode(vtkMRMLDisplayableNode *model);
00285
00286 vtkClipPolyData* CreateTransformedClipper(vtkMRMLDisplayableNode *model);
00287
00288
00289
00290 std::vector< vtkMRMLDisplayNode* > GetDisplayNode(vtkMRMLDisplayableNode *model);
00291 void RemoveDispalyedID(std::string &id);
00292
00293 std::map<std::string, vtkProp3D *> DisplayedActors;
00294 std::map<std::string, vtkMRMLDisplayNode *> DisplayedNodes;
00295 std::map<std::string, int> DisplayedClipState;
00296 std::map<std::string, int> DisplayedVisibility;
00297 std::map<std::string, vtkMRMLDisplayableNode *> DisplayableNodes;
00298
00299 std::vector<vtkFollower *> AxisLabelActors;
00300
00301 std::map<std::string, int> RegisteredModelHierarchies;
00302
00303
00304
00307 void ResetPick();
00308
00309 protected:
00310 vtkSlicerViewerWidget();
00311 virtual ~vtkSlicerViewerWidget();
00312
00313
00314 vtkSlicerApplicationLogic *ApplicationLogic;
00315 vtkKWRenderWidget *MainViewer;
00316 vtkKWFrame *ViewerFrame;
00317 int RenderPending;
00318 int UpdateFromMRMLRequested;
00319
00320
00321 vtkActor *BoxAxisActor;
00322 vtkBoundingBox *BoxAxisBoundingBox;
00323
00324 int ProcessingMRMLEvent;
00325
00326 vtkMRMLClipModelsNode *ClipModelsNode;
00327
00328 vtkMRMLSliceNode *RedSliceNode;
00329 vtkMRMLSliceNode *GreenSliceNode;
00330 vtkMRMLSliceNode *YellowSliceNode;
00331
00332 vtkImplicitBoolean *SlicePlanes;
00333 vtkPlane *RedSlicePlane;
00334 vtkPlane *GreenSlicePlane;
00335 vtkPlane *YellowSlicePlane;
00336
00337 int ClipType;
00338 int RedSliceClipState;
00339 int YellowSliceClipState;
00340 int GreenSliceClipState;
00341
00342 bool ClippingOn;
00343
00344 bool ModelHierarchiesPresent;
00345
00346 vtkSlicerModelHierarchyLogic *ModelHierarchyLogic;
00347
00348 vtkMRMLCameraNode *CameraNode;
00349 int CameraNodeWasCreated;
00350
00351 vtkMRMLViewNode *ViewNode;
00352
00353 bool SceneClosing;
00354
00355 vtkWorldPointPicker *WorldPointPicker;
00356 vtkPropPicker *PropPicker;
00357 vtkCellPicker *CellPicker;
00358 vtkPointPicker *PointPicker;
00359
00362
00363 std::string PickedNodeName;
00364
00365 double PickedRAS[3];
00366 vtkIdType PickedCellID;
00367 vtkIdType PickedPointID;
00368
00369 vtkSlicerBoxWidget2 *BoxWidget;
00370 vtkSlicerBoxRepresentation *BoxWidgetRepresentation;
00371
00372 int EnableRender;
00373
00374 int UpdatingAxis;
00375
00376 int IsRendering;
00377
00378 int CameraNodeUpdatePending;
00379 int UpdatingCameraNode;
00380
00381 private:
00382
00383 vtkSlicerViewerWidget(const vtkSlicerViewerWidget&);
00384 void operator=(const vtkSlicerViewerWidget&);
00385 };
00386
00387 #endif
00388