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