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