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