00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00087 #ifndef __vtkSplineWidget_h
00088 #define __vtkSplineWidget_h
00089
00090 #include "vtk3DWidget.h"
00091
00092 class vtkActor;
00093 class vtkCellPicker;
00094 class vtkPlaneSource;
00095 class vtkPoints;
00096 class vtkPolyData;
00097 class vtkPolyDataMapper;
00098 class vtkProp;
00099 class vtkProperty;
00100 class vtkSphereSource;
00101 class vtkSpline;
00102 class vtkTransform;
00103
00104 #define VTK_PROJECTION_YZ 0
00105 #define VTK_PROJECTION_XZ 1
00106 #define VTK_PROJECTION_XY 2
00107 #define VTK_PROJECTION_OBLIQUE 3
00108
00109 class VTK_HYBRID_EXPORT vtkSplineWidget : public vtk3DWidget
00110 {
00111 public:
00113 static vtkSplineWidget *New();
00114
00115 vtkTypeRevisionMacro(vtkSplineWidget,vtk3DWidget);
00116 void PrintSelf(ostream& os, vtkIndent indent);
00117
00119
00120 virtual void SetEnabled(int);
00121 virtual void PlaceWidget(double bounds[6]);
00122 void PlaceWidget()
00123 {this->Superclass::PlaceWidget();}
00124 void PlaceWidget(double xmin, double xmax, double ymin, double ymax,
00125 double zmin, double zmax)
00126 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00128
00130
00136 vtkSetMacro(ProjectToPlane,int);
00137 vtkGetMacro(ProjectToPlane,int);
00138 vtkBooleanMacro(ProjectToPlane,int);
00140
00143 void SetPlaneSource(vtkPlaneSource* plane);
00144
00145 vtkSetClampMacro(ProjectionNormal,int,VTK_PROJECTION_YZ,VTK_PROJECTION_OBLIQUE);
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); }
00153 void SetProjectionNormalToOblique()
00154 { this->SetProjectionNormal(3); }
00155
00157
00162 void SetProjectionPosition(double position);
00163 vtkGetMacro(ProjectionPosition, double);
00165
00171 void GetPolyData(vtkPolyData *pd);
00172
00174
00177 virtual void SetHandleProperty(vtkProperty*);
00178 vtkGetObjectMacro(HandleProperty, vtkProperty);
00179 virtual void SetSelectedHandleProperty(vtkProperty*);
00180 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00182
00184
00186 virtual void SetLineProperty(vtkProperty*);
00187 vtkGetObjectMacro(LineProperty, vtkProperty);
00188 virtual void SetSelectedLineProperty(vtkProperty*);
00189 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00191
00193
00194 virtual void SetNumberOfHandles(int npts);
00195 vtkGetMacro(NumberOfHandles, int);
00197
00199
00201 void SetResolution(int resolution);
00202 vtkGetMacro(Resolution,int);
00204
00206
00210 void SetXSpline(vtkSpline*);
00211 void SetYSpline(vtkSpline*);
00212 void SetZSpline(vtkSpline*);
00214
00216
00218 void SetHandlePosition(int handle, double x, double y, double z);
00219 void SetHandlePosition(int handle, double xyz[3]);
00220 void GetHandlePosition(int handle, double xyz[3]);
00221 double* GetHandlePosition(int handle);
00223
00225
00229 void SetClosed(int closed);
00230 vtkGetMacro(Closed,int);
00231 vtkBooleanMacro(Closed,int);
00233
00237 double GetSummedLength();
00238
00239 protected:
00240 vtkSplineWidget();
00241 ~vtkSplineWidget();
00242
00243
00244 int State;
00245 enum WidgetState
00246 {
00247 Start=0,
00248 Moving,
00249 Scaling,
00250 Spinning,
00251 Outside
00252 };
00253
00254
00255
00256 static void ProcessEvents(vtkObject* object,
00257 unsigned long event,
00258 void* clientdata,
00259 void* calldata);
00260
00261
00262 void OnLeftButtonDown();
00263 void OnLeftButtonUp();
00264 void OnMiddleButtonDown();
00265 void OnMiddleButtonUp();
00266 void OnRightButtonDown();
00267 void OnRightButtonUp();
00268 void OnMouseMove();
00269
00270
00271 int ProjectionNormal;
00272 double ProjectionPosition;
00273 int ProjectToPlane;
00274 vtkPlaneSource* PlaneSource;
00275
00276
00277 void ProjectPointsToPlane();
00278 void ProjectPointsToOrthoPlane();
00279 void ProjectPointsToObliquePlane();
00280
00281
00282 vtkSpline *XSpline;
00283 vtkSpline *YSpline;
00284 vtkSpline *ZSpline;
00285 int NumberOfHandles;
00286 vtkSpline* CreateDefaultSpline();
00287 int Closed;
00288 double Offset;
00289
00290
00291 vtkActor *LineActor;
00292 vtkPolyDataMapper *LineMapper;
00293 vtkPolyData *LineData;
00294 void HighlightLine(int highlight);
00295 int NumberOfSplinePoints;
00296 int Resolution;
00297 double* SplinePositions;
00298
00299
00300 vtkActor **Handle;
00301 vtkPolyDataMapper **HandleMapper;
00302 vtkSphereSource **HandleGeometry;
00303 void Initialize();
00304 int HighlightHandle(vtkProp *prop);
00305 virtual void SizeHandles();
00306 void BuildRepresentation();
00307
00308
00309 vtkCellPicker *HandlePicker;
00310 vtkCellPicker *LinePicker;
00311 vtkActor *CurrentHandle;
00312 int CurrentHandleIndex;
00313
00314
00315 void MovePoint(double *p1, double *p2);
00316 void Scale(double *p1, double *p2, int X, int Y);
00317 void Translate(double *p1, double *p2);
00318 void Spin(double *p1, double *p2, double *vpn);
00319
00320
00321 vtkTransform *Transform;
00322
00323
00324
00325 vtkProperty *HandleProperty;
00326 vtkProperty *SelectedHandleProperty;
00327 vtkProperty *LineProperty;
00328 vtkProperty *SelectedLineProperty;
00329 void CreateDefaultProperties();
00330
00331
00332 double Centroid[3];
00333 void CalculateCentroid();
00334
00335 private:
00336 vtkSplineWidget(const vtkSplineWidget&);
00337 void operator=(const vtkSplineWidget&);
00338 };
00339
00340 #endif