00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00093 #ifndef __vtkSplineWidget_h
00094 #define __vtkSplineWidget_h
00095
00096 #include "vtk3DWidget.h"
00097
00098 class vtkActor;
00099 class vtkCellPicker;
00100 class vtkParametricSpline;
00101 class vtkParametricFunctionSource;
00102 class vtkPlaneSource;
00103 class vtkPoints;
00104 class vtkPolyData;
00105 class vtkProp;
00106 class vtkProperty;
00107 class vtkSphereSource;
00108 class vtkTransform;
00109
00110 #define VTK_PROJECTION_YZ 0
00111 #define VTK_PROJECTION_XZ 1
00112 #define VTK_PROJECTION_XY 2
00113 #define VTK_PROJECTION_OBLIQUE 3
00114
00115 class VTK_WIDGETS_EXPORT vtkSplineWidget : public vtk3DWidget
00116 {
00117 public:
00119 static vtkSplineWidget *New();
00120
00121 vtkTypeMacro(vtkSplineWidget,vtk3DWidget);
00122 void PrintSelf(ostream& os, vtkIndent indent);
00123
00125
00126 virtual void SetEnabled(int);
00127 virtual void PlaceWidget(double bounds[6]);
00128 void PlaceWidget()
00129 {this->Superclass::PlaceWidget();}
00130 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00131 double zmin, double zmax)
00132 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00134
00136
00142 vtkSetMacro(ProjectToPlane,int);
00143 vtkGetMacro(ProjectToPlane,int);
00144 vtkBooleanMacro(ProjectToPlane,int);
00146
00149 void SetPlaneSource(vtkPlaneSource* plane);
00150
00151 vtkSetClampMacro(ProjectionNormal,int,VTK_PROJECTION_YZ,VTK_PROJECTION_OBLIQUE);
00152 vtkGetMacro(ProjectionNormal,int);
00153 void SetProjectionNormalToXAxes()
00154 { this->SetProjectionNormal(0); }
00155 void SetProjectionNormalToYAxes()
00156 { this->SetProjectionNormal(1); }
00157 void SetProjectionNormalToZAxes()
00158 { this->SetProjectionNormal(2); }
00159 void SetProjectionNormalToOblique()
00160 { this->SetProjectionNormal(3); }
00161
00163
00168 void SetProjectionPosition(double position);
00169 vtkGetMacro(ProjectionPosition, double);
00171
00178 void GetPolyData(vtkPolyData *pd);
00179
00181
00184 virtual void SetHandleProperty(vtkProperty*);
00185 vtkGetObjectMacro(HandleProperty, vtkProperty);
00186 virtual void SetSelectedHandleProperty(vtkProperty*);
00187 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00189
00191
00193 virtual void SetLineProperty(vtkProperty*);
00194 vtkGetObjectMacro(LineProperty, vtkProperty);
00195 virtual void SetSelectedLineProperty(vtkProperty*);
00196 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00198
00200
00201 virtual void SetNumberOfHandles(int npts);
00202 vtkGetMacro(NumberOfHandles, int);
00204
00206
00208 void SetResolution(int resolution);
00209 vtkGetMacro(Resolution,int);
00211
00213
00219 virtual void SetParametricSpline(vtkParametricSpline*);
00220 vtkGetObjectMacro(ParametricSpline,vtkParametricSpline);
00222
00224
00226 void SetHandlePosition(int handle, double x, double y, double z);
00227 void SetHandlePosition(int handle, double xyz[3]);
00228 void GetHandlePosition(int handle, double xyz[3]);
00229 double* GetHandlePosition(int handle);
00231
00233
00238 void SetClosed(int closed);
00239 vtkGetMacro(Closed,int);
00240 vtkBooleanMacro(Closed,int);
00242
00246 int IsClosed();
00247
00251 double GetSummedLength();
00252
00257 void InitializeHandles(vtkPoints* points);
00258
00260
00262 vtkSetClampMacro(ProcessEvents, int, 0, 1);
00263 vtkGetMacro(ProcessEvents, int);
00264 vtkBooleanMacro( ProcessEvents, int );
00266
00267 protected:
00268 vtkSplineWidget();
00269 ~vtkSplineWidget();
00270
00271
00272 int State;
00273 enum WidgetState
00274 {
00275 Start=0,
00276 Moving,
00277 Scaling,
00278 Spinning,
00279 Inserting,
00280 Erasing,
00281 Outside
00282 };
00283
00284
00285
00286 static void ProcessEventsHandler(vtkObject* object,
00287 unsigned long event,
00288 void* clientdata,
00289 void* calldata);
00290
00291
00292 void OnLeftButtonDown();
00293 void OnLeftButtonUp();
00294 void OnMiddleButtonDown();
00295 void OnMiddleButtonUp();
00296 void OnRightButtonDown();
00297 void OnRightButtonUp();
00298 void OnMouseMove();
00299
00300
00301 int ProjectionNormal;
00302 double ProjectionPosition;
00303 int ProjectToPlane;
00304 vtkPlaneSource* PlaneSource;
00305
00306
00307 void ProjectPointsToPlane();
00308 void ProjectPointsToOrthoPlane();
00309 void ProjectPointsToObliquePlane();
00310
00311
00312 vtkParametricSpline *ParametricSpline;
00313 vtkParametricFunctionSource *ParametricFunctionSource;
00314 int NumberOfHandles;
00315 int Closed;
00316 void BuildRepresentation();
00317
00318
00319 vtkActor *LineActor;
00320 void HighlightLine(int highlight);
00321 int Resolution;
00322
00323
00324 vtkActor **Handle;
00325 vtkSphereSource **HandleGeometry;
00326 void Initialize();
00327 int HighlightHandle(vtkProp *prop);
00328 virtual void SizeHandles();
00329 void InsertHandleOnLine(double* pos);
00330 void EraseHandle(const int&);
00331
00332
00333 vtkCellPicker *HandlePicker;
00334 vtkCellPicker *LinePicker;
00335 vtkActor *CurrentHandle;
00336 int CurrentHandleIndex;
00337
00338
00339 void MovePoint(double *p1, double *p2);
00340 void Scale(double *p1, double *p2, int X, int Y);
00341 void Translate(double *p1, double *p2);
00342 void Spin(double *p1, double *p2, double *vpn);
00343
00344
00345 vtkTransform *Transform;
00346
00347
00348
00349 vtkProperty *HandleProperty;
00350 vtkProperty *SelectedHandleProperty;
00351 vtkProperty *LineProperty;
00352 vtkProperty *SelectedLineProperty;
00353 void CreateDefaultProperties();
00354
00355
00356 double Centroid[3];
00357 void CalculateCentroid();
00358 int ProcessEvents;
00359
00360 private:
00361 vtkSplineWidget(const vtkSplineWidget&);
00362 void operator=(const vtkSplineWidget&);
00363 };
00364
00365 #endif