vtkSlicerViewerWidget.h

Go to the documentation of this file.
00001 /*=========================================================================
00002 
00003   Copyright 2005 Brigham and Women's Hospital (BWH) All Rights Reserved.
00004 
00005   See Doc/copyright/copyright.txt
00006   or http://www.slicer.org/copyright/copyright.txt for details.
00007 
00008   Program:   SlicerViewerWidget
00009   Module:    $HeadURL: http://svn.slicer.org/Slicer3/trunk/Base/GUI/vtkSlicerViewerWidget.h $
00010   Date:      $Date: 2010-11-11 13:23:23 -0500 (Thu, 11 Nov 2010) $
00011   Version:   $Revision: 15468 $
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 //#include "vtkBoundingBox.h"
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   //vtkSetObjectMacro(MainViewer, vtkKWRenderWidget);
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   //BTX
00225   enum
00226   {
00227     ActiveCameraChangedEvent   = 30000
00228   };
00229   //ETX
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   //BTX
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   //ETX
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   //BTX
00363   std::string PickedNodeName;
00364   //ETX
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 

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1