00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00080
#ifndef __vtkImplicitPlaneWidget_h
00081
#define __vtkImplicitPlaneWidget_h
00082
00083
#include "vtkPolyDataSourceWidget.h"
00084
00085
class vtkActor;
00086
class vtkPolyDataMapper;
00087
class vtkCellPicker;
00088
class vtkConeSource;
00089
class vtkLineSource;
00090
class vtkSphereSource;
00091
class vtkTubeFilter;
00092
class vtkPlane;
00093
class vtkCutter;
00094
class vtkProperty;
00095
class vtkImageData;
00096
class vtkOutlineFilter;
00097
class vtkFeatureEdges;
00098
class vtkPolyData;
00099
class vtkTransform;
00100
00101 class VTK_HYBRID_EXPORT vtkImplicitPlaneWidget :
public vtkPolyDataSourceWidget
00102 {
00103
public:
00105
static vtkImplicitPlaneWidget *
New();
00106
00107 vtkTypeRevisionMacro(vtkImplicitPlaneWidget,
vtkPolyDataSourceWidget);
00108
void PrintSelf(ostream& os,
vtkIndent indent);
00109
00111
00112
virtual void SetEnabled(
int);
00113
virtual void PlaceWidget(
float bounds[6]);
00114 void PlaceWidget()
00115 {this->Superclass::PlaceWidget();}
00117
00119
00120
void SetOrigin(
float x,
float y,
float z);
00121
void SetOrigin(
float x[3]);
00122
float* GetOrigin();
00123
void GetOrigin(
float xyz[3]);
00125
00127
00128
void SetNormal(
float x,
float y,
float z);
00129
void SetNormal(
float x[3]);
00130
float* GetNormal();
00131
void GetNormal(
float xyz[3]);
00133
00135
00139
void SetNormalToXAxis(
int);
00140 vtkGetMacro(NormalToXAxis,
int);
00141 vtkBooleanMacro(NormalToXAxis,
int);
00142
void SetNormalToYAxis(
int);
00143 vtkGetMacro(NormalToYAxis,
int);
00144 vtkBooleanMacro(NormalToYAxis,
int);
00145
void SetNormalToZAxis(
int);
00146 vtkGetMacro(NormalToZAxis,
int);
00147 vtkBooleanMacro(NormalToZAxis,
int);
00149
00151
00153 vtkSetMacro(Tubing,
int);
00154 vtkGetMacro(Tubing,
int);
00155 vtkBooleanMacro(Tubing,
int);
00157
00159
00163
void SetDrawPlane(
int plane);
00164 vtkGetMacro(DrawPlane,
int);
00165 vtkBooleanMacro(DrawPlane,
int);
00167
00169
00171 vtkSetMacro(OutlineTranslation,
int);
00172 vtkGetMacro(OutlineTranslation,
int);
00173 vtkBooleanMacro(OutlineTranslation,
int);
00175
00178
void GetPolyData(
vtkPolyData *pd);
00179
00182
vtkPolyDataSource*
GetPolyDataSource();
00183
00188
void GetPlane(
vtkPlane *plane);
00189
00193
void UpdatePlacement(
void);
00194
00196
00197 vtkGetObjectMacro(NormalProperty,
vtkProperty);
00198 vtkGetObjectMacro(SelectedNormalProperty,
vtkProperty);
00200
00202
00204 vtkGetObjectMacro(PlaneProperty,
vtkProperty);
00205 vtkGetObjectMacro(SelectedPlaneProperty,
vtkProperty);
00207
00209
00210 vtkGetObjectMacro(OutlineProperty,
vtkProperty);
00211 vtkGetObjectMacro(SelectedOutlineProperty,
vtkProperty);
00213
00215
00217 vtkGetObjectMacro(EdgesProperty,
vtkProperty);
00219
00220
protected:
00221 vtkImplicitPlaneWidget();
00222 ~vtkImplicitPlaneWidget();
00223
00224
00225 int State;
00226 enum WidgetState
00227 {
00228 Start=0,
00229 MovingPlane,
00230 MovingOutline,
00231 MovingOrigin,
00232 Scaling,
00233 Pushing,
00234 Rotating,
00235 Outside
00236 };
00237
00238
00239
00240
static void ProcessEvents(
vtkObject* object,
unsigned long event,
00241
void* clientdata,
void* calldata);
00242
00243
00244
void OnLeftButtonDown();
00245
void OnLeftButtonUp();
00246
void OnMiddleButtonDown();
00247
void OnMiddleButtonUp();
00248
void OnRightButtonDown();
00249
void OnRightButtonUp();
00250
void OnMouseMove();
00251
00252
00253 int NormalToXAxis;
00254 int NormalToYAxis;
00255 int NormalToZAxis;
00256
void UpdateRepresentation();
00257
00258
00259 vtkPlane *Plane;
00260
00261
00262 vtkImageData *Box;
00263 vtkOutlineFilter *Outline;
00264 vtkPolyDataMapper *OutlineMapper;
00265 vtkActor *OutlineActor;
00266
void HighlightOutline(
int highlight);
00267 int OutlineTranslation;
00268
00269
00270 vtkCutter *Cutter;
00271 vtkPolyDataMapper *CutMapper;
00272 vtkActor *CutActor;
00273 int DrawPlane;
00274
void HighlightPlane(
int highlight);
00275
00276
00277 vtkFeatureEdges *Edges;
00278 vtkTubeFilter *EdgesTuber;
00279 vtkPolyDataMapper *EdgesMapper;
00280 vtkActor *EdgesActor;
00281 int Tubing;
00282
00283
00284 vtkConeSource *ConeSource;
00285 vtkPolyDataMapper *ConeMapper;
00286 vtkActor *ConeActor;
00287
void HighlightNormal(
int highlight);
00288
00289
00290 vtkLineSource *LineSource;
00291 vtkPolyDataMapper *LineMapper;
00292 vtkActor *LineActor;
00293
00294
00295 vtkConeSource *ConeSource2;
00296 vtkPolyDataMapper *ConeMapper2;
00297 vtkActor *ConeActor2;
00298
00299
00300 vtkLineSource *LineSource2;
00301 vtkPolyDataMapper *LineMapper2;
00302 vtkActor *LineActor2;
00303
00304
00305 vtkSphereSource *Sphere;
00306 vtkPolyDataMapper *SphereMapper;
00307 vtkActor *SphereActor;
00308
00309
00310 vtkCellPicker *Picker;
00311
00312
00313 vtkTransform *Transform;
00314
00315
00316
void ConstrainOrigin(
float x[3]);
00317
void Rotate(
int X,
int Y,
double *p1,
double *p2,
double *vpn);
00318
void TranslatePlane(
double *p1,
double *p2);
00319
void TranslateOutline(
double *p1,
double *p2);
00320
void TranslateOrigin(
double *p1,
double *p2);
00321
void Push(
double *p1,
double *p2);
00322
void Scale(
double *p1,
double *p2,
int X,
int Y);
00323
00324
00325
00326 vtkProperty *NormalProperty;
00327 vtkProperty *SelectedNormalProperty;
00328 vtkProperty *PlaneProperty;
00329 vtkProperty *SelectedPlaneProperty;
00330 vtkProperty *OutlineProperty;
00331 vtkProperty *SelectedOutlineProperty;
00332 vtkProperty *EdgesProperty;
00333
void CreateDefaultProperties();
00334
00335
void GeneratePlane();
00336
virtual void SizeHandles();
00337
00338
private:
00339 vtkImplicitPlaneWidget(
const vtkImplicitPlaneWidget&);
00340
void operator=(
const vtkImplicitPlaneWidget&);
00341 };
00342
00343
#endif