00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00085
#ifndef __vtkBoxWidget_h
00086
#define __vtkBoxWidget_h
00087
00088
#include "vtk3DWidget.h"
00089
00090
class vtkActor;
00091
class vtkCellPicker;
00092
class vtkPlanes;
00093
class vtkPoints;
00094
class vtkPolyData;
00095
class vtkPolyDataMapper;
00096
class vtkProp;
00097
class vtkProperty;
00098
class vtkSphereSource;
00099
class vtkTransform;
00100
00101 class VTK_HYBRID_EXPORT vtkBoxWidget :
public vtk3DWidget
00102 {
00103
public:
00105
static vtkBoxWidget *
New();
00106
00107 vtkTypeRevisionMacro(vtkBoxWidget,
vtk3DWidget);
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();}
00116 void PlaceWidget(
float xmin,
float xmax,
float ymin,
float ymax,
00117
float zmin,
float zmax)
00118 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00120
00121
00128
void GetPlanes(
vtkPlanes *planes);
00129
00131
00134 vtkSetMacro(InsideOut,
int);
00135 vtkGetMacro(InsideOut,
int);
00136 vtkBooleanMacro(InsideOut,
int);
00138
00144
void GetTransform(
vtkTransform *t);
00145
00154
void GetPolyData(
vtkPolyData *pd);
00155
00157
00159 vtkGetObjectMacro(HandleProperty,
vtkProperty);
00160 vtkGetObjectMacro(SelectedHandleProperty,
vtkProperty);
00162
00164
00166 vtkGetObjectMacro(FaceProperty,
vtkProperty);
00167 vtkGetObjectMacro(SelectedFaceProperty,
vtkProperty);
00169
00171
00173 vtkGetObjectMacro(OutlineProperty,
vtkProperty);
00174 vtkGetObjectMacro(SelectedOutlineProperty,
vtkProperty);
00176
00178
00180 vtkSetMacro(OutlineFaceWires,
int);
00181 vtkGetMacro(OutlineFaceWires,
int);
00182 vtkBooleanMacro(OutlineFaceWires,
int);
00184
00186
00189 vtkSetMacro(OutlineCursorWires,
int);
00190 vtkGetMacro(OutlineCursorWires,
int);
00191 vtkBooleanMacro(OutlineCursorWires,
int);
00193
00195
00197 vtkSetMacro(TranslationEnabled,
int);
00198 vtkGetMacro(TranslationEnabled,
int);
00199 vtkBooleanMacro(TranslationEnabled,
int);
00200 vtkSetMacro(ScalingEnabled,
int);
00201 vtkGetMacro(ScalingEnabled,
int);
00202 vtkBooleanMacro(ScalingEnabled,
int);
00203 vtkSetMacro(RotationEnabled,
int);
00204 vtkGetMacro(RotationEnabled,
int);
00205 vtkBooleanMacro(RotationEnabled,
int);
00207
00208
protected:
00209 vtkBoxWidget();
00210 ~vtkBoxWidget();
00211
00212
00213 int State;
00214 enum WidgetState
00215 {
00216 Start=0,
00217 Moving,
00218 Scaling,
00219 Outside
00220 };
00221
00222
00223
00224
static void ProcessEvents(
vtkObject* object,
00225
unsigned long event,
00226
void* clientdata,
00227
void* calldata);
00228
00229
00230
void OnMouseMove();
00231
void OnLeftButtonDown();
00232
void OnLeftButtonUp();
00233
void OnMiddleButtonDown();
00234
void OnMiddleButtonUp();
00235
void OnRightButtonDown();
00236
void OnRightButtonUp();
00237
00238
00239 vtkActor *HexActor;
00240 vtkPolyDataMapper *HexMapper;
00241 vtkPolyData *HexPolyData;
00242 vtkPoints *Points;
00243 double N[6][3];
00244
00245
00246 vtkActor *HexFace;
00247 vtkPolyDataMapper *HexFaceMapper;
00248 vtkPolyData *HexFacePolyData;
00249
00250
00251 vtkActor **Handle;
00252 vtkPolyDataMapper **HandleMapper;
00253 vtkSphereSource **HandleGeometry;
00254
void PositionHandles();
00255
void HandlesOn(
double length);
00256
void HandlesOff();
00257
int HighlightHandle(
vtkProp *prop);
00258
void HighlightFace(
int cellId);
00259
void HighlightOutline(
int highlight);
00260
void ComputeNormals();
00261
virtual void SizeHandles();
00262
00263
00264 vtkActor *HexOutline;
00265 vtkPolyDataMapper *OutlineMapper;
00266 vtkPolyData *OutlinePolyData;
00267
00268
00269 vtkCellPicker *HandlePicker;
00270 vtkCellPicker *HexPicker;
00271 vtkActor *CurrentHandle;
00272 int CurrentHexFace;
00273
00274
00275
void Translate(
double *p1,
double *p2);
00276
void Scale(
double *p1,
double *p2,
int X,
int Y);
00277
void Rotate(
int X,
int Y,
double *p1,
double *p2,
double *vpn);
00278
void MovePlusXFace(
double *p1,
double *p2);
00279
void MoveMinusXFace(
double *p1,
double *p2);
00280
void MovePlusYFace(
double *p1,
double *p2);
00281
void MoveMinusYFace(
double *p1,
double *p2);
00282
void MovePlusZFace(
double *p1,
double *p2);
00283
void MoveMinusZFace(
double *p1,
double *p2);
00284
00285
void MoveFace(
double *p1,
double *p2,
double *h1,
double *h2,
00286
double *x1,
double *x2,
double *x3,
double *x4,
00287
double *x5);
00288
00289
00290 vtkTransform *Transform;
00291
00292
00293
00294 vtkProperty *HandleProperty;
00295 vtkProperty *SelectedHandleProperty;
00296 vtkProperty *FaceProperty;
00297 vtkProperty *SelectedFaceProperty;
00298 vtkProperty *OutlineProperty;
00299 vtkProperty *SelectedOutlineProperty;
00300
void CreateDefaultProperties();
00301
00302
00303 int InsideOut;
00304 int OutlineFaceWires;
00305 int OutlineCursorWires;
00306
void GenerateOutline();
00307
00308
00309 int TranslationEnabled;
00310 int ScalingEnabled;
00311 int RotationEnabled;
00312
00313
private:
00314 vtkBoxWidget(
const vtkBoxWidget&);
00315
void operator=(
const vtkBoxWidget&);
00316 };
00317
00318
#endif