vtkMRMLTransPerinealProstateRobotNode.h

Go to the documentation of this file.
00001 /*=auto=========================================================================
00002 
00003   Portions (c) 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:   3D Slicer
00009   Module:    $RCSfile: vtkMRMLTransPerinealProstateRobotNode.h,v $
00010   Date:      $Date: 2006/03/19 17:12:29 $
00011   Version:   $Revision: 1.3 $
00012 
00013 =========================================================================auto=*/
00014 #ifndef __vtkMRMLTransPerinealRobotNode_h
00015 #define __vtkMRMLTransPerinealRobotNode_h
00016 
00017 #include "vtkOpenIGTLinkIFWin32Header.h"
00018 #include "vtkMRML.h"
00019 #include "vtkMRMLRobotNode.h"
00020 #include "vtkMRMLStorageNode.h"
00021 
00022 #include "vtkCylinderSource.h"
00023 #include "vtkTransformPolyDataFilter.h"
00024 #include "vtkTransform.h"
00025 #include "vtkAppendPolyData.h"
00026 
00027 #include "vtkObject.h"
00028 #include "vtkProstateNavWin32Header.h" 
00029 
00030 #include "vtkMRMLIGTLConnectorNode.h"
00031 #include "vtkMRMLBrpRobotCommandNode.h"
00032 
00033 #include "vtkMRMLLinearTransformNode.h"
00034 #include "vtkMRMLModelNode.h"
00035 
00036 class vtkTransform;
00037 class vtkIGTLToMRMLCoordinate;
00038 class vtkIGTLToMRMLBrpRobotCommand;
00039 class vtkSlicerApplication;
00040 
00041 class VTK_PROSTATENAV_EXPORT vtkMRMLTransPerinealProstateRobotNode : public vtkMRMLRobotNode
00042 {
00043 
00044  public:
00045 
00046   //----------------------------------------------------------------
00047   // Standard methods for MRML nodes
00048   //----------------------------------------------------------------
00049 
00050   static vtkMRMLTransPerinealProstateRobotNode *New();
00051   vtkTypeMacro(vtkMRMLTransPerinealProstateRobotNode,vtkMRMLRobotNode);  
00052 
00053   void PrintSelf(ostream& os, vtkIndent indent);
00054 
00055   virtual vtkMRMLTransPerinealProstateRobotNode* CreateNodeInstance();
00056 
00057   // Description:
00058   // Set node attributes
00059   virtual void ReadXMLAttributes( const char** atts);
00060 
00061   // Description:
00062   // Write this node's information to a MRML file in XML format.
00063   virtual void WriteXML(ostream& of, int indent);
00064 
00065   // Description:
00066   // Copy the node's attributes to this object
00067   virtual void Copy(vtkMRMLNode *node);
00068 
00069   // Description:
00070   // Update the stored reference to another node in the scene
00071   void UpdateReferenceID(const char *oldID, const char *newID);
00072 
00073   // Description:
00074   // Updates this node if it depends on other nodes 
00075   // when the node is deleted in the scene
00076   void UpdateReferences();
00077 
00078   // Description:
00079   // Updates other nodes in the scene depending on this node
00080   // or updates this node if it depends on other nodes
00081   virtual void UpdateScene(vtkMRMLScene *);
00082 
00083   // Description:
00084   // Get node XML tag name (like Volume, Model)
00085   virtual const char* GetNodeTagName()
00086     {return "TransPerinealProstateRobot";};
00087 
00088   // method to propagate events generated in mrml
00089   virtual void ProcessMRMLEvents ( vtkObject *caller, unsigned long event, void *callData );
00090 
00091   //----------------------------------------------------------------
00092   // Commands
00093   //----------------------------------------------------------------
00094 
00095   // Description:
00096   // Initialize the robot
00097   virtual int Init(vtkSlicerApplication* app, const char* moduleShareDir);
00098 
00099   vtkGetStringMacro(RobotCommandNodeID);
00100   vtkMRMLBrpRobotCommandNode* GetRobotCommandNode();
00101   void SetAndObserveRobotCommandNodeID(const char *nodeID);
00102   
00103   vtkGetStringMacro(RobotConnectorNodeID);
00104   vtkMRMLIGTLConnectorNode* GetRobotConnectorNode();
00105   void SetAndObserveRobotConnectorNodeID(const char *nodeID);
00106 
00107   vtkGetStringMacro(ScannerConnectorNodeID);
00108   vtkMRMLIGTLConnectorNode* GetScannerConnectorNode();
00109   void SetAndObserveScannerConnectorNodeID(const char *nodeID);
00110 
00111   vtkGetStringMacro(ZFrameModelNodeID);
00112   vtkMRMLModelNode* GetZFrameModelNode();
00113   void SetAndObserveZFrameModelNodeID(const char *nodeID);
00114 
00115   vtkGetStringMacro(WorkspaceModelNodeID);
00116   vtkMRMLModelNode* GetWorkspaceModelNode();
00117   void SetAndObserveWorkspaceModelNodeID(const char *nodeID);
00118 
00119   vtkGetStringMacro(ZFrameTransformNodeID);
00120   vtkMRMLLinearTransformNode* GetZFrameTransformNode();
00121   void SetAndObserveZFrameTransformNodeID(const char *nodeID);
00122   
00123   virtual int  MoveTo(const char *transformNodeId);
00124 
00125   virtual void SwitchStep(const char *stepName);
00126 
00127   virtual int OnTimer();
00128 
00129   //BTX
00130   virtual std::string GetTargetInfoText(vtkProstateNavTargetDescriptor *targetDesc, NeedleDescriptorStruct *needle);
00131   //ETX
00132 
00133   virtual const char* GetCalibrationObjectModelId() { return GetZFrameModelNodeID(); };
00134   virtual const char* GetCalibrationObjectTransformId() { return GetZFrameTransformNodeID(); };
00135   virtual const char* GetWorkspaceObjectModelId() { return GetWorkspaceModelNodeID(); };
00136 
00137   virtual int PerformRegistration(vtkMRMLScalarVolumeNode* volumeNode);
00138   virtual int PerformRegistration(vtkMRMLScalarVolumeNode* volumeNode, int param1, int param2);
00139 
00140   virtual const char* GetWorkflowStepsString()
00141     {return "SetUp ZFrameCalibration PointTargeting PointVerification TransperinealProstateRobotManualControl"; };
00142 
00143  protected:
00144 
00145   vtkMRMLTransPerinealProstateRobotNode();
00146   virtual ~vtkMRMLTransPerinealProstateRobotNode();
00147   vtkMRMLTransPerinealProstateRobotNode(const vtkMRMLTransPerinealProstateRobotNode&);
00148   void operator=(const vtkMRMLTransPerinealProstateRobotNode&);
00149 
00151 
00152   int  SendZFrame();
00153 
00154   vtkGetMacro ( Connection,              bool );
00155   vtkGetMacro ( RobotWorkPhase,           int );
00156   vtkGetMacro ( ScannerWorkPhase,         int );
00157 
00158   const char* AddWorkspaceModel(const char* nodeName);
00159   const char* AddZFrameModel(const char* nodeName);
00160 
00161   // NOTE: Since we couldn't update ScannerStatusLabelDisp and RobotStatusLabelDisp
00162   // directly from ProcessMRMLEvent(), we added following flags to update those GUI
00163   // widgets in the timer handler.
00164   // if flag == 0, the widget does not need to be updated()
00165   // if flag == 1, the connector has connected to the target
00166   // if flag == 2, the connector has disconnected from the target
00167   int ScannerConnectedFlag;
00168   int RobotConnectedFlag;
00169 
00170 private:
00171 
00172   // Node references
00173 
00174   vtkSetReferenceStringMacro(RobotCommandNodeID);
00175   char *RobotCommandNodeID;
00176   vtkMRMLBrpRobotCommandNode* RobotCommandNode;
00177 
00178   vtkSetReferenceStringMacro(RobotConnectorNodeID);
00179   char *RobotConnectorNodeID;
00180   vtkMRMLIGTLConnectorNode* RobotConnectorNode;
00181 
00182   vtkSetReferenceStringMacro(ScannerConnectorNodeID);
00183   char *ScannerConnectorNodeID;
00184   vtkMRMLIGTLConnectorNode* ScannerConnectorNode;
00185 
00186   vtkSetReferenceStringMacro(ZFrameModelNodeID);
00187   char *ZFrameModelNodeID;
00188   vtkMRMLModelNode* ZFrameModelNode;
00189 
00190   vtkSetReferenceStringMacro(ZFrameTransformNodeID); 
00191   char *ZFrameTransformNodeID;
00192   vtkMRMLLinearTransformNode* ZFrameTransformNode;  
00193 
00194   vtkSetReferenceStringMacro(WorkspaceModelNodeID);
00195   char *WorkspaceModelNodeID;
00196   vtkMRMLModelNode* WorkspaceModelNode;
00197 
00198   // Other member variables
00199 
00200   vtkIGTLToMRMLCoordinate* CoordinateConverter;
00201   vtkIGTLToMRMLBrpRobotCommand* CommandConverter;
00202 
00203   bool  Connection;  
00204   int   RobotWorkPhase;
00205   int   ScannerWorkPhase;
00206   
00207 };
00208 
00209 #endif
00210 

Generated on 6 Apr 2011 for Slicer3 by  doxygen 1.6.1