00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00062 #ifndef __vtkImageTracerWidget_h
00063 #define __vtkImageTracerWidget_h
00064
00065 #include "vtk3DWidget.h"
00066
00067 class vtkAbstractPropPicker;
00068 class vtkActor;
00069 class vtkCellArray;
00070 class vtkCellPicker;
00071 class vtkFloatArray;
00072 class vtkGlyphSource2D;
00073 class vtkPoints;
00074 class vtkPolyData;
00075 class vtkProp;
00076 class vtkProperty;
00077 class vtkPropPicker;
00078 class vtkTransform;
00079 class vtkTransformPolyDataFilter;
00080
00081 #define VTK_ITW_PROJECTION_YZ 0
00082 #define VTK_ITW_PROJECTION_XZ 1
00083 #define VTK_ITW_PROJECTION_XY 2
00084 #define VTK_ITW_SNAP_CELLS 0
00085 #define VTK_ITW_SNAP_POINTS 1
00086
00087 class VTK_WIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
00088 {
00089 public:
00091 static vtkImageTracerWidget *New();
00092
00093 vtkTypeMacro(vtkImageTracerWidget,vtk3DWidget);
00094 void PrintSelf(ostream& os, vtkIndent indent);
00095
00097
00098 virtual void SetEnabled(int);
00099 virtual void PlaceWidget(double bounds[6]);
00100 void PlaceWidget()
00101 {this->Superclass::PlaceWidget();}
00102 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00103 double zmin, double zmax)
00104 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00106
00108
00111 virtual void SetHandleProperty(vtkProperty*);
00112 vtkGetObjectMacro(HandleProperty, vtkProperty);
00113 virtual void SetSelectedHandleProperty(vtkProperty*);
00114 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00116
00118
00120 virtual void SetLineProperty(vtkProperty*);
00121 vtkGetObjectMacro(LineProperty, vtkProperty);
00122 virtual void SetSelectedLineProperty(vtkProperty*);
00123 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00125
00127 void SetViewProp(vtkProp* prop);
00128
00130
00131 vtkSetMacro(ProjectToPlane,int);
00132 vtkGetMacro(ProjectToPlane,int);
00133 vtkBooleanMacro(ProjectToPlane,int);
00135
00137
00141 vtkSetClampMacro(ProjectionNormal,int,VTK_ITW_PROJECTION_YZ,VTK_ITW_PROJECTION_XY);
00142 vtkGetMacro(ProjectionNormal,int);
00143 void SetProjectionNormalToXAxes()
00144 { this->SetProjectionNormal(0); }
00145 void SetProjectionNormalToYAxes()
00146 { this->SetProjectionNormal(1); }
00147 void SetProjectionNormalToZAxes()
00148 { this->SetProjectionNormal(2); }
00150
00152
00157 void SetProjectionPosition(double position);
00158 vtkGetMacro(ProjectionPosition,double);
00160
00162
00163 void SetSnapToImage(int snap);
00164 vtkGetMacro(SnapToImage,int);
00165 vtkBooleanMacro(SnapToImage,int);
00167
00169
00171 vtkSetMacro(AutoClose,int);
00172 vtkGetMacro(AutoClose,int);
00173 vtkBooleanMacro(AutoClose,int);
00175
00177
00180 vtkSetMacro(CaptureRadius,double);
00181 vtkGetMacro(CaptureRadius,double);
00183
00189 void GetPath(vtkPolyData *pd);
00190
00192 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
00193
00195
00197 vtkSetClampMacro(ImageSnapType,int,VTK_ITW_SNAP_CELLS,VTK_ITW_SNAP_POINTS);
00198 vtkGetMacro(ImageSnapType,int);
00200
00202
00204 void SetHandlePosition(int handle, double xyz[3]);
00205 void SetHandlePosition(int handle, double x, double y, double z);
00206 void GetHandlePosition(int handle, double xyz[3]);
00207 double* GetHandlePosition(int handle);
00209
00211
00212 vtkGetMacro(NumberOfHandles,int);
00214
00216
00217 void SetInteraction(int interact);
00218 vtkGetMacro(Interaction,int);
00219 vtkBooleanMacro(Interaction,int);
00221
00225 void InitializeHandles(vtkPoints*);
00226
00228 int IsClosed();
00229
00231
00232 vtkSetMacro(HandleLeftMouseButton,int);
00233 vtkGetMacro(HandleLeftMouseButton,int);
00234 vtkBooleanMacro(HandleLeftMouseButton,int);
00235 vtkSetMacro(HandleMiddleMouseButton,int);
00236 vtkGetMacro(HandleMiddleMouseButton,int);
00237 vtkBooleanMacro(HandleMiddleMouseButton,int);
00238 vtkSetMacro(HandleRightMouseButton,int);
00239 vtkGetMacro(HandleRightMouseButton,int);
00240 vtkBooleanMacro(HandleRightMouseButton,int);
00242
00243 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00244 # define SetPropA SetProp
00245 # define SetPropW SetProp
00246 #endif
00247
00250 VTK_LEGACY(void SetProp(vtkProp* prop));
00251
00252 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00253 # undef SetPropA
00254 # undef SetPropW
00255
00256 VTK_LEGACY(void SetPropA(vtkProp*));
00257 VTK_LEGACY(void SetPropW(vtkProp*));
00258
00259 #endif
00260
00261 protected:
00262 vtkImageTracerWidget();
00263 ~vtkImageTracerWidget();
00264
00265
00266 int State;
00267 enum WidgetState
00268 {
00269 Start=0,
00270 Tracing,
00271 Snapping,
00272 Erasing,
00273 Inserting,
00274 Moving,
00275 Translating,
00276 Outside
00277 };
00278
00279
00280
00281 static void ProcessEvents(vtkObject* object,
00282 unsigned long event,
00283 void* clientdata,
00284 void* calldata);
00285
00286
00287 void OnLeftButtonDown();
00288 void OnLeftButtonUp();
00289 void OnMiddleButtonDown();
00290 void OnMiddleButtonUp();
00291 void OnRightButtonDown();
00292 void OnRightButtonUp();
00293 void OnMouseMove();
00294
00295 void AddObservers();
00296
00297
00298 int Interaction;
00299 int ProjectionNormal;
00300 double ProjectionPosition;
00301 int ProjectToPlane;
00302 int ImageSnapType;
00303 int SnapToImage;
00304 double CaptureRadius;
00305 int AutoClose;
00306 int IsSnapping;
00307 int LastX;
00308 int LastY;
00309
00310 void Trace(int , int );
00311 void Snap(double* );
00312 void MovePoint(const double* , const double* );
00313 void Translate(const double* , const double* );
00314 void ClosePath();
00315
00316
00317 vtkActor **Handle;
00318 vtkPolyData **HandleGeometry;
00319 vtkGlyphSource2D *HandleGenerator;
00320
00321
00322 vtkTransformPolyDataFilter *TransformFilter;
00323 vtkTransform *Transform;
00324 vtkFloatArray *TemporaryHandlePoints;
00325
00326 void AppendHandles(double*);
00327 void ResetHandles();
00328 void AllocateHandles(const int& );
00329 void AdjustHandlePosition(const int& , double*);
00330 int HighlightHandle(vtkProp* );
00331 void EraseHandle(const int& );
00332 virtual void SizeHandles();
00333 void InsertHandleOnLine(double* );
00334
00335 int NumberOfHandles;
00336 vtkActor *CurrentHandle;
00337 int CurrentHandleIndex;
00338
00339 vtkProp *ViewProp;
00340 vtkPropPicker *PropPicker;
00341
00342
00343 vtkPoints *LinePoints;
00344 vtkCellArray *LineCells;
00345 vtkActor *LineActor;
00346 vtkPolyData *LineData;
00347 vtkIdType CurrentPoints[2];
00348
00349 void HighlightLine(const int& );
00350 void BuildLinesFromHandles();
00351 void ResetLine(double* );
00352 void AppendLine(double* );
00353 int PickCount;
00354
00355
00356 vtkCellPicker *HandlePicker;
00357 vtkCellPicker *LinePicker;
00358 vtkAbstractPropPicker* CurrentPicker;
00359
00360
00361
00362 vtkProperty *HandleProperty;
00363 vtkProperty *SelectedHandleProperty;
00364 vtkProperty *LineProperty;
00365 vtkProperty *SelectedLineProperty;
00366 void CreateDefaultProperties();
00367
00368
00369 int HandleLeftMouseButton;
00370 int HandleMiddleMouseButton;
00371 int HandleRightMouseButton;
00372
00373 private:
00374 vtkImageTracerWidget(const vtkImageTracerWidget&);
00375 void operator=(const vtkImageTracerWidget&);
00376 };
00377
00378 #endif