00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00099 #ifndef __vtkSplineWidget_h
00100 #define __vtkSplineWidget_h
00101
00102 #include "vtk3DWidget.h"
00103
00104 class vtkActor;
00105 class vtkCellPicker;
00106 class vtkPlaneSource;
00107 class vtkPoints;
00108 class vtkPolyData;
00109 class vtkPolyDataMapper;
00110 class vtkProp;
00111 class vtkProperty;
00112 class vtkSphereSource;
00113 class vtkSpline;
00114 class vtkTransform;
00115
00116 #define VTK_PROJECTION_YZ 0
00117 #define VTK_PROJECTION_XZ 1
00118 #define VTK_PROJECTION_XY 2
00119 #define VTK_PROJECTION_OBLIQUE 3
00120
00121 class VTK_HYBRID_EXPORT vtkSplineWidget : public vtk3DWidget
00122 {
00123 public:
00125 static vtkSplineWidget *New();
00126
00127 vtkTypeRevisionMacro(vtkSplineWidget,vtk3DWidget);
00128 void PrintSelf(ostream& os, vtkIndent indent);
00129
00131
00132 virtual void SetEnabled(int);
00133 virtual void PlaceWidget(float bounds[6]);
00134 void PlaceWidget()
00135 {this->Superclass::PlaceWidget();}
00136 void PlaceWidget(float xmin, float xmax, float ymin, float ymax,
00137 float zmin, float zmax)
00138 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00140
00142
00148 vtkSetMacro(ProjectToPlane,int);
00149 vtkGetMacro(ProjectToPlane,int);
00150 vtkBooleanMacro(ProjectToPlane,int);
00152
00155 void SetPlaneSource(vtkPlaneSource* plane);
00156
00157 vtkSetClampMacro(ProjectionNormal,int,VTK_PROJECTION_YZ,VTK_PROJECTION_OBLIQUE);
00158 vtkGetMacro(ProjectionNormal,int);
00159 void SetProjectionNormalToXAxes()
00160 { this->SetProjectionNormal(0); }
00161 void SetProjectionNormalToYAxes()
00162 { this->SetProjectionNormal(1); }
00163 void SetProjectionNormalToZAxes()
00164 { this->SetProjectionNormal(2); }
00165 void SetProjectionNormalToOblique()
00166 { this->SetProjectionNormal(3); }
00167
00169
00174 void SetProjectionPosition(float position);
00175 vtkGetMacro(ProjectionPosition, float);
00177
00183 void GetPolyData(vtkPolyData *pd);
00184
00186
00189 virtual void SetHandleProperty(vtkProperty*);
00190 vtkGetObjectMacro(HandleProperty, vtkProperty);
00191 virtual void SetSelectedHandleProperty(vtkProperty*);
00192 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00194
00196
00198 virtual void SetLineProperty(vtkProperty*);
00199 vtkGetObjectMacro(LineProperty, vtkProperty);
00200 virtual void SetSelectedLineProperty(vtkProperty*);
00201 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00203
00205
00206 void SetNumberOfHandles(int npts);
00207 vtkGetMacro(NumberOfHandles, int);
00209
00211
00213 void SetResolution(int resolution);
00214 vtkGetMacro(Resolution,int);
00216
00218
00222 void SetXSpline(vtkSpline*);
00223 void SetYSpline(vtkSpline*);
00224 void SetZSpline(vtkSpline*);
00226
00228
00230 void SetHandlePosition(int handle, float x, float y, float z);
00231 void SetHandlePosition(int handle, float xyz[3]);
00232 void GetHandlePosition(int handle, float xyz[3]);
00233 float* GetHandlePosition(int handle);
00235
00237
00241 void SetClosed(int closed);
00242 vtkGetMacro(Closed,int);
00243 vtkBooleanMacro(Closed,int);
00245
00249 float GetSummedLength();
00250
00251 protected:
00252 vtkSplineWidget();
00253 ~vtkSplineWidget();
00254
00255
00256 int State;
00257 enum WidgetState
00258 {
00259 Start=0,
00260 Moving,
00261 Scaling,
00262 Spinning,
00263 Outside
00264 };
00265
00266
00267
00268 static void ProcessEvents(vtkObject* object,
00269 unsigned long event,
00270 void* clientdata,
00271 void* calldata);
00272
00273
00274 void OnLeftButtonDown();
00275 void OnLeftButtonUp();
00276 void OnMiddleButtonDown();
00277 void OnMiddleButtonUp();
00278 void OnRightButtonDown();
00279 void OnRightButtonUp();
00280 void OnMouseMove();
00281
00282
00283 int ProjectionNormal;
00284 float ProjectionPosition;
00285 int ProjectToPlane;
00286 vtkPlaneSource* PlaneSource;
00287
00288
00289 void ProjectPointsToPlane();
00290 void ProjectPointsToOrthoPlane();
00291 void ProjectPointsToObliquePlane();
00292
00293
00294 vtkSpline *XSpline;
00295 vtkSpline *YSpline;
00296 vtkSpline *ZSpline;
00297 int NumberOfHandles;
00298 float* HandlePositions;
00299 vtkSpline* CreateDefaultSpline();
00300 int Closed;
00301 float Offset;
00302
00303
00304 vtkActor *LineActor;
00305 vtkPolyDataMapper *LineMapper;
00306 vtkPolyData *LineData;
00307 void HighlightLine(int highlight);
00308 int NumberOfSplinePoints;
00309 int Resolution;
00310 float* SplinePositions;
00311
00312
00313 vtkActor **Handle;
00314 vtkPolyDataMapper **HandleMapper;
00315 vtkSphereSource **HandleGeometry;
00316 void Initialize();
00317 int HighlightHandle(vtkProp *prop);
00318 virtual void SizeHandles();
00319 void BuildRepresentation();
00320
00321
00322 vtkCellPicker *HandlePicker;
00323 vtkCellPicker *LinePicker;
00324 vtkActor *CurrentHandle;
00325 int CurrentHandleIndex;
00326
00327
00328 void MovePoint(double *p1, double *p2);
00329 void Scale(double *p1, double *p2, int X, int Y);
00330 void Translate(double *p1, double *p2);
00331 void Spin(double *p1, double *p2, double *vpn);
00332
00333
00334 vtkTransform *Transform;
00335
00336
00337
00338 vtkProperty *HandleProperty;
00339 vtkProperty *SelectedHandleProperty;
00340 vtkProperty *LineProperty;
00341 vtkProperty *SelectedLineProperty;
00342 void CreateDefaultProperties();
00343
00344 private:
00345 vtkSplineWidget(const vtkSplineWidget&);
00346 void operator=(const vtkSplineWidget&);
00347 };
00348
00349 #endif