00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00027 #ifndef __vtkSplineRepresentation_h
00028 #define __vtkSplineRepresentation_h
00029
00030 #include "vtkWidgetRepresentation.h"
00031
00032 class vtkActor;
00033 class vtkCellPicker;
00034 class vtkDoubleArray;
00035 class vtkParametricFunctionSource;
00036 class vtkParametricSpline;
00037 class vtkPlaneSource;
00038 class vtkPoints;
00039 class vtkPolyData;
00040 class vtkProp;
00041 class vtkProperty;
00042 class vtkSphereSource;
00043 class vtkTransform;
00044
00045 #define VTK_PROJECTION_YZ 0
00046 #define VTK_PROJECTION_XZ 1
00047 #define VTK_PROJECTION_XY 2
00048 #define VTK_PROJECTION_OBLIQUE 3
00049 class VTK_WIDGETS_EXPORT vtkSplineRepresentation : public vtkWidgetRepresentation
00050 {
00051 public:
00052 static vtkSplineRepresentation* New();
00053 vtkTypeMacro(vtkSplineRepresentation, vtkWidgetRepresentation);
00054 void PrintSelf(ostream& os, vtkIndent indent);
00055
00056
00057 enum _InteractionState {
00058 Outside=0,
00059 OnHandle,
00060 OnLine,
00061 Moving,
00062 Scaling,
00063 Spinning,
00064 Inserting,
00065 Erasing
00066 };
00067
00068
00069 vtkSetMacro(InteractionState, int);
00070
00072
00079 vtkSetMacro(ProjectToPlane,int);
00080 vtkGetMacro(ProjectToPlane,int);
00081 vtkBooleanMacro(ProjectToPlane,int);
00083
00086 void SetPlaneSource(vtkPlaneSource* plane);
00087
00088 vtkSetClampMacro(ProjectionNormal,int,VTK_PROJECTION_YZ,VTK_PROJECTION_OBLIQUE);
00089 vtkGetMacro(ProjectionNormal,int);
00090 void SetProjectionNormalToXAxes()
00091 { this->SetProjectionNormal(0); }
00092 void SetProjectionNormalToYAxes()
00093 { this->SetProjectionNormal(1); }
00094 void SetProjectionNormalToZAxes()
00095 { this->SetProjectionNormal(2); }
00096 void SetProjectionNormalToOblique()
00097 { this->SetProjectionNormal(3); }
00098
00100
00105 void SetProjectionPosition(double position);
00106 vtkGetMacro(ProjectionPosition, double);
00108
00115 void GetPolyData(vtkPolyData *pd);
00116
00118
00121 vtkGetObjectMacro(HandleProperty, vtkProperty);
00122 vtkGetObjectMacro(SelectedHandleProperty, vtkProperty);
00124
00126
00128 vtkGetObjectMacro(LineProperty, vtkProperty);
00129 vtkGetObjectMacro(SelectedLineProperty, vtkProperty);
00131
00133
00134 virtual void SetNumberOfHandles(int npts);
00135 vtkGetMacro(NumberOfHandles, int);
00137
00139
00141 void SetResolution(int resolution);
00142 vtkGetMacro(Resolution,int);
00144
00146
00152 virtual void SetParametricSpline(vtkParametricSpline*);
00153 vtkGetObjectMacro(ParametricSpline,vtkParametricSpline);
00155
00157
00159 void SetHandlePosition(int handle, double x, double y, double z);
00160 void SetHandlePosition(int handle, double xyz[3]);
00161 void GetHandlePosition(int handle, double xyz[3]);
00162 double* GetHandlePosition(int handle);
00163 vtkDoubleArray* GetHandlePositions();
00165
00167
00172 void SetClosed(int closed);
00173 vtkGetMacro(Closed,int);
00174 vtkBooleanMacro(Closed,int);
00176
00180 int IsClosed();
00181
00185 double GetSummedLength();
00186
00191 void InitializeHandles(vtkPoints* points);
00192
00194
00197 virtual void BuildRepresentation();
00198 virtual int ComputeInteractionState(int X, int Y, int modify=0);
00199 virtual void StartWidgetInteraction(double e[2]);
00200 virtual void WidgetInteraction(double e[2]);
00201 virtual void EndWidgetInteraction(double e[2]);
00202 virtual double *GetBounds();
00204
00206
00207 virtual void ReleaseGraphicsResources(vtkWindow*);
00208 virtual int RenderOpaqueGeometry(vtkViewport*);
00209 virtual int RenderTranslucentPolygonalGeometry(vtkViewport*);
00210 virtual int RenderOverlay(vtkViewport*);
00211 virtual int HasTranslucentPolygonalGeometry();
00213
00216 void SetLineColor(double r, double g, double b);
00217
00218
00219 protected:
00220 vtkSplineRepresentation();
00221 ~vtkSplineRepresentation();
00222
00223 double LastEventPosition[3];
00224 double Bounds[6];
00225
00226
00227 int ProjectionNormal;
00228 double ProjectionPosition;
00229 int ProjectToPlane;
00230 vtkPlaneSource* PlaneSource;
00231
00232
00233 void ProjectPointsToPlane();
00234 void ProjectPointsToOrthoPlane();
00235 void ProjectPointsToObliquePlane();
00236
00237
00238 vtkParametricSpline *ParametricSpline;
00239 vtkParametricFunctionSource *ParametricFunctionSource;
00240 int NumberOfHandles;
00241 int Closed;
00242
00243
00244 vtkActor *LineActor;
00245 void HighlightLine(int highlight);
00246 int Resolution;
00247
00248
00249 vtkActor **Handle;
00250 vtkSphereSource **HandleGeometry;
00251 void Initialize();
00252 int HighlightHandle(vtkProp *prop);
00253 virtual void SizeHandles();
00254 void InsertHandleOnLine(double* pos);
00255 void EraseHandle(const int&);
00256
00257
00258 vtkCellPicker *HandlePicker;
00259 vtkCellPicker *LinePicker;
00260 double LastPickPosition[3];
00261 vtkActor *CurrentHandle;
00262 int CurrentHandleIndex;
00263
00264
00265 void MovePoint(double *p1, double *p2);
00266 void Scale(double *p1, double *p2, int X, int Y);
00267 void Translate(double *p1, double *p2);
00268 void Spin(double *p1, double *p2, double *vpn);
00269
00270
00271 vtkTransform *Transform;
00272
00273
00274
00275 vtkProperty *HandleProperty;
00276 vtkProperty *SelectedHandleProperty;
00277 vtkProperty *LineProperty;
00278 vtkProperty *SelectedLineProperty;
00279 void CreateDefaultProperties();
00280
00281
00282 double Centroid[3];
00283 void CalculateCentroid();
00284
00285 private:
00286 vtkSplineRepresentation(const vtkSplineRepresentation&);
00287 void operator=(const vtkSplineRepresentation&);
00288
00289 };
00290
00291 #endif
00292
00293