00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00065 #ifndef __vtkImageTracerWidget_h
00066 #define __vtkImageTracerWidget_h
00067
00068 #include "vtk3DWidget.h"
00069
00070 class vtkAbstractPropPicker;
00071 class vtkActor;
00072 class vtkCellArray;
00073 class vtkCellPicker;
00074 class vtkFloatArray;
00075 class vtkGlyphSource2D;
00076 class vtkPoints;
00077 class vtkPolyData;
00078 class vtkPolyDataMapper;
00079 class vtkProp;
00080 class vtkProperty;
00081 class vtkPropPicker;
00082 class vtkTransform;
00083 class vtkTransformPolyDataFilter;
00084
00085 #define VTK_ITW_PROJECTION_YZ 0
00086 #define VTK_ITW_PROJECTION_XZ 1
00087 #define VTK_ITW_PROJECTION_XY 2
00088 #define VTK_ITW_SNAP_CELLS 0
00089 #define VTK_ITW_SNAP_POINTS 1
00090
00091 class VTK_HYBRID_EXPORT vtkImageTracerWidget : public vtk3DWidget
00092 {
00093 public:
00095 static vtkImageTracerWidget *New();
00096
00097 vtkTypeRevisionMacro(vtkImageTracerWidget,vtk3DWidget);
00098 void PrintSelf(ostream& os, vtkIndent indent);
00099
00101
00102 virtual void SetEnabled(int);
00103 virtual void PlaceWidget(double bounds[6]);
00104 void PlaceWidget()
00105 {this->Superclass::PlaceWidget();}
00106 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00107 double zmin, double zmax)
00108 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00110
00112
00115 virtual void SetHandleProperty(vtkProperty*);
00116 vtkGetObjectMacro(HandleProperty, vtkProperty);
00117 virtual void SetSelectedHandleProperty(vtkProperty*);
00118 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00120
00122
00124 virtual void SetLineProperty(vtkProperty*);
00125 vtkGetObjectMacro(LineProperty, vtkProperty);
00126 virtual void SetSelectedLineProperty(vtkProperty*);
00127 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00129
00131 void SetProp(vtkProp* prop);
00132
00134
00135 vtkSetMacro(ProjectToPlane,int);
00136 vtkGetMacro(ProjectToPlane,int);
00137 vtkBooleanMacro(ProjectToPlane,int);
00139
00141
00145 vtkSetClampMacro(ProjectionNormal,int,VTK_ITW_PROJECTION_YZ,VTK_ITW_PROJECTION_XY);
00146 vtkGetMacro(ProjectionNormal,int);
00147 void SetProjectionNormalToXAxes()
00148 { this->SetProjectionNormal(0); }
00149 void SetProjectionNormalToYAxes()
00150 { this->SetProjectionNormal(1); }
00151 void SetProjectionNormalToZAxes()
00152 { this->SetProjectionNormal(2); }
00154
00156
00161 vtkSetMacro(ProjectionPosition,double);
00162 vtkGetMacro(ProjectionPosition,double);
00164
00166
00167 void SetSnapToImage(int snap);
00168 vtkGetMacro(SnapToImage,int);
00169 vtkBooleanMacro(SnapToImage,int);
00171
00173
00175 vtkSetMacro(AutoClose,int);
00176 vtkGetMacro(AutoClose,int);
00177 vtkBooleanMacro(AutoClose,int);
00179
00181
00182 vtkSetMacro(GlyphAngle,double);
00183 vtkGetMacro(GlyphAngle,double);
00185
00187
00190 vtkSetMacro(CaptureRadius,double);
00191 vtkGetMacro(CaptureRadius,double);
00193
00199 void GetPath(vtkPolyData *pd);
00200
00202 vtkGlyphSource2D* GetGlyphSource() { return this->HandleGeometryGenerator; }
00203
00205
00207 vtkSetClampMacro(ImageSnapType,int,VTK_ITW_SNAP_CELLS,VTK_ITW_SNAP_POINTS);
00208 vtkGetMacro(ImageSnapType,int);
00210
00212
00214 void SetHandlePosition(int handle, double xyz[3]);
00215 void SetHandlePosition(int handle, double x, double y, double z);
00216 void GetHandlePosition(int handle, double xyz[3]);
00217 double* GetHandlePosition(int handle);
00219
00221
00222 vtkGetMacro(NumberOfHandles,int);
00224
00226
00227 void SetInteraction(int interact);
00228 vtkGetMacro(Interaction,int);
00229 vtkBooleanMacro(Interaction,int);
00231
00235 void InitializeHandles(vtkPoints*);
00236
00238
00239 vtkGetMacro(IsClosed,int);
00241
00242 protected:
00243 vtkImageTracerWidget();
00244 ~vtkImageTracerWidget();
00245
00246
00247 int State;
00248 enum WidgetState
00249 {
00250 Start=0,
00251 Tracing,
00252 Snapping,
00253 Erasing,
00254 Inserting,
00255 Moving,
00256 Outside
00257 };
00258
00259
00260
00261 static void ProcessEvents(vtkObject* object,
00262 unsigned long event,
00263 void* clientdata,
00264 void* calldata);
00265
00266
00267 void OnLeftButtonDown();
00268 void OnLeftButtonUp();
00269 void OnMiddleButtonDown();
00270 void OnMiddleButtonUp();
00271 void OnRightButtonDown();
00272 void OnRightButtonUp();
00273 void OnMouseMove();
00274
00275 void AddObservers();
00276
00277
00278 int Interaction;
00279 int ProjectionNormal;
00280 double ProjectionPosition;
00281 int ProjectToPlane;
00282 int ImageSnapType;
00283 int SnapToImage;
00284 double CaptureRadius;
00285 double GlyphAngle;
00286 int AutoClose;
00287
00288 int IsSnapping;
00289 int MouseMoved;
00290 void Trace(int X, int Y);
00291 void Snap(double*);
00292 void MovePoint(double *p1, double *p2);
00293 void ClosePath();
00294 int IsClosed;
00295
00296
00297 vtkActor **Handle;
00298 vtkPolyDataMapper **HandleMapper;
00299 vtkPolyData **HandleGeometry;
00300 vtkGlyphSource2D *HandleGeometryGenerator;
00301
00302
00303 vtkTransformPolyDataFilter *TransformFilter;
00304 vtkTransform *Transform;
00305 vtkFloatArray *TemporaryHandlePoints;
00306
00307 void AppendHandles(double*);
00308 void ResetHandles();
00309 void AllocateHandles(int nhandles);
00310 void AdjustHandlePosition(int, double*);
00311 int HighlightHandle(vtkProp *prop);
00312 void EraseHandle(int);
00313 virtual void SizeHandles();
00314 void InsertHandleOnLine(double*);
00315
00316 int NumberOfHandles;
00317 vtkActor *CurrentHandle;
00318 int CurrentHandleIndex;
00319
00320 vtkProp *Prop;
00321 vtkPropPicker *PropPicker;
00322
00323
00324 vtkPoints *LinePoints;
00325 vtkCellArray *LineCells;
00326 vtkActor *LineActor;
00327 vtkPolyDataMapper *LineMapper;
00328 vtkPolyData *LineData;
00329 vtkIdType CurrentPoints[2];
00330
00331 void HighlightLine(int);
00332 void BuildLinesFromHandles();
00333 void ResetLine(double*);
00334 void AppendLine(double*);
00335 int PickCount;
00336
00337
00338 vtkCellPicker *HandlePicker;
00339 vtkCellPicker *LinePicker;
00340 vtkAbstractPropPicker* CurrentPicker;
00341
00342
00343
00344 vtkProperty *HandleProperty;
00345 vtkProperty *SelectedHandleProperty;
00346 vtkProperty *LineProperty;
00347 vtkProperty *SelectedLineProperty;
00348 void CreateDefaultProperties();
00349
00350 private:
00351 vtkImageTracerWidget(const vtkImageTracerWidget&);
00352 void operator=(const vtkImageTracerWidget&);
00353 };
00354
00355 #endif