00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00059 #ifndef __vtkImageTracerWidget_h
00060 #define __vtkImageTracerWidget_h
00061
00062 #include "vtk3DWidget.h"
00063
00064 class vtkAbstractPropPicker;
00065 class vtkActor;
00066 class vtkCellArray;
00067 class vtkCellPicker;
00068 class vtkFloatArray;
00069 class vtkGlyphSource2D;
00070 class vtkPoints;
00071 class vtkPolyData;
00072 class vtkProp;
00073 class vtkProperty;
00074 class vtkPropPicker;
00075 class vtkTransform;
00076 class vtkTransformPolyDataFilter;
00077
00078 #define VTK_ITW_PROJECTION_YZ 0
00079 #define VTK_ITW_PROJECTION_XZ 1
00080 #define VTK_ITW_PROJECTION_XY 2
00081 #define VTK_ITW_SNAP_CELLS 0
00082 #define VTK_ITW_SNAP_POINTS 1
00083
00084 class VTK_WIDGETS_EXPORT vtkImageTracerWidget : public vtk3DWidget
00085 {
00086 public:
00088 static vtkImageTracerWidget *New();
00089
00090 vtkTypeRevisionMacro(vtkImageTracerWidget,vtk3DWidget);
00091 void PrintSelf(ostream& os, vtkIndent indent);
00092
00094
00095 virtual void SetEnabled(int);
00096 virtual void PlaceWidget(double bounds[6]);
00097 void PlaceWidget()
00098 {this->Superclass::PlaceWidget();}
00099 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00100 double zmin, double zmax)
00101 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00103
00105
00108 virtual void SetHandleProperty(vtkProperty*);
00109 vtkGetObjectMacro(HandleProperty, vtkProperty);
00110 virtual void SetSelectedHandleProperty(vtkProperty*);
00111 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00113
00115
00117 virtual void SetLineProperty(vtkProperty*);
00118 vtkGetObjectMacro(LineProperty, vtkProperty);
00119 virtual void SetSelectedLineProperty(vtkProperty*);
00120 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00122
00124 void SetViewProp(vtkProp* prop);
00125
00127
00128 vtkSetMacro(ProjectToPlane,int);
00129 vtkGetMacro(ProjectToPlane,int);
00130 vtkBooleanMacro(ProjectToPlane,int);
00132
00134
00138 vtkSetClampMacro(ProjectionNormal,int,VTK_ITW_PROJECTION_YZ,VTK_ITW_PROJECTION_XY);
00139 vtkGetMacro(ProjectionNormal,int);
00140 void SetProjectionNormalToXAxes()
00141 { this->SetProjectionNormal(0); }
00142 void SetProjectionNormalToYAxes()
00143 { this->SetProjectionNormal(1); }
00144 void SetProjectionNormalToZAxes()
00145 { this->SetProjectionNormal(2); }
00147
00149
00154 void SetProjectionPosition(double position);
00155 vtkGetMacro(ProjectionPosition,double);
00157
00159
00160 void SetSnapToImage(int snap);
00161 vtkGetMacro(SnapToImage,int);
00162 vtkBooleanMacro(SnapToImage,int);
00164
00166
00168 vtkSetMacro(AutoClose,int);
00169 vtkGetMacro(AutoClose,int);
00170 vtkBooleanMacro(AutoClose,int);
00172
00174
00177 vtkSetMacro(CaptureRadius,double);
00178 vtkGetMacro(CaptureRadius,double);
00180
00186 void GetPath(vtkPolyData *pd);
00187
00189 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGenerator; }
00190
00192
00194 vtkSetClampMacro(ImageSnapType,int,VTK_ITW_SNAP_CELLS,VTK_ITW_SNAP_POINTS);
00195 vtkGetMacro(ImageSnapType,int);
00197
00199
00201 void SetHandlePosition(int handle, double xyz[3]);
00202 void SetHandlePosition(int handle, double x, double y, double z);
00203 void GetHandlePosition(int handle, double xyz[3]);
00204 double* GetHandlePosition(int handle);
00206
00208
00209 vtkGetMacro(NumberOfHandles,int);
00211
00213
00214 void SetInteraction(int interact);
00215 vtkGetMacro(Interaction,int);
00216 vtkBooleanMacro(Interaction,int);
00218
00222 void InitializeHandles(vtkPoints*);
00223
00225 int IsClosed();
00226
00227 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00228 # define SetPropA SetProp
00229 # define SetPropW SetProp
00230 #endif
00231
00234 VTK_LEGACY(void SetProp(vtkProp* prop));
00235
00236 #ifdef VTK_WORKAROUND_WINDOWS_MANGLE
00237 # undef SetPropA
00238 # undef SetPropW
00239
00240 VTK_LEGACY(void SetPropA(vtkProp*));
00241 VTK_LEGACY(void SetPropW(vtkProp*));
00242
00243 #endif
00244
00245 protected:
00246 vtkImageTracerWidget();
00247 ~vtkImageTracerWidget();
00248
00249
00250 int State;
00251 enum WidgetState
00252 {
00253 Start=0,
00254 Tracing,
00255 Snapping,
00256 Erasing,
00257 Inserting,
00258 Moving,
00259 Translating,
00260 Outside
00261 };
00262
00263
00264
00265 static void ProcessEvents(vtkObject* object,
00266 unsigned long event,
00267 void* clientdata,
00268 void* calldata);
00269
00270
00271 void OnLeftButtonDown();
00272 void OnLeftButtonUp();
00273 void OnMiddleButtonDown();
00274 void OnMiddleButtonUp();
00275 void OnRightButtonDown();
00276 void OnRightButtonUp();
00277 void OnMouseMove();
00278
00279 void AddObservers();
00280
00281
00282 int Interaction;
00283 int ProjectionNormal;
00284 double ProjectionPosition;
00285 int ProjectToPlane;
00286 int ImageSnapType;
00287 int SnapToImage;
00288 double CaptureRadius;
00289 int AutoClose;
00290 int IsSnapping;
00291 int LastX;
00292 int LastY;
00293
00294 void Trace(int , int );
00295 void Snap(double* );
00296 void MovePoint(const double* , const double* );
00297 void Translate(const double* , const double* );
00298 void ClosePath();
00299
00300
00301 vtkActor **Handle;
00302 vtkPolyData **HandleGeometry;
00303 vtkGlyphSource2D *HandleGenerator;
00304
00305
00306 vtkTransformPolyDataFilter *TransformFilter;
00307 vtkTransform *Transform;
00308 vtkFloatArray *TemporaryHandlePoints;
00309
00310 void AppendHandles(double*);
00311 void ResetHandles();
00312 void AllocateHandles(const int& );
00313 void AdjustHandlePosition(const int& , double*);
00314 int HighlightHandle(vtkProp* );
00315 void EraseHandle(const int& );
00316 virtual void SizeHandles();
00317 void InsertHandleOnLine(double* );
00318
00319 int NumberOfHandles;
00320 vtkActor *CurrentHandle;
00321 int CurrentHandleIndex;
00322
00323 vtkProp *ViewProp;
00324 vtkPropPicker *PropPicker;
00325
00326
00327 vtkPoints *LinePoints;
00328 vtkCellArray *LineCells;
00329 vtkActor *LineActor;
00330 vtkPolyData *LineData;
00331 vtkIdType CurrentPoints[2];
00332
00333 void HighlightLine(const int& );
00334 void BuildLinesFromHandles();
00335 void ResetLine(double* );
00336 void AppendLine(double* );
00337 int PickCount;
00338
00339
00340 vtkCellPicker *HandlePicker;
00341 vtkCellPicker *LinePicker;
00342 vtkAbstractPropPicker* CurrentPicker;
00343
00344
00345
00346 vtkProperty *HandleProperty;
00347 vtkProperty *SelectedHandleProperty;
00348 vtkProperty *LineProperty;
00349 vtkProperty *SelectedLineProperty;
00350 void CreateDefaultProperties();
00351
00352 private:
00353 vtkImageTracerWidget(const vtkImageTracerWidget&);
00354 void operator=(const vtkImageTracerWidget&);
00355 };
00356
00357 #endif