00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00083
#ifndef __vtkLineWidget_h
00084
#define __vtkLineWidget_h
00085
00086
#include "vtk3DWidget.h"
00087
#include "vtkLineSource.h"
00088
00089
class vtkActor;
00090
class vtkPolyDataMapper;
00091
class vtkPoints;
00092
class vtkPolyData;
00093
class vtkProp;
00094
class vtkProperty;
00095
class vtkSphereSource;
00096
class vtkCellPicker;
00097
class vtkPointWidget;
00098
class vtkPWCallback;
00099
class vtkPW1Callback;
00100
class vtkPW2Callback;
00101
00102 class VTK_HYBRID_EXPORT vtkLineWidget :
public vtk3DWidget
00103 {
00104
public:
00106
static vtkLineWidget *
New();
00107
00108 vtkTypeRevisionMacro(vtkLineWidget,
vtk3DWidget);
00109
void PrintSelf(ostream& os,
vtkIndent indent);
00110
00112
00113
virtual void SetEnabled(
int);
00114
virtual void PlaceWidget(
float bounds[6]);
00115 void PlaceWidget()
00116 {this->Superclass::PlaceWidget();}
00117 void PlaceWidget(
float xmin,
float xmax,
float ymin,
float ymax,
00118
float zmin,
float zmax)
00119 {this->Superclass::PlaceWidget(xmin,xmax,ymin,ymax,zmin,zmax);}
00121
00123
00124 void SetResolution(
int r)
00125 { this->LineSource->SetResolution(r); }
00126 int GetResolution()
00127 {
return this->LineSource->GetResolution(); }
00129
00131
00132
void SetPoint1(
float x,
float y,
float z);
00133 void SetPoint1(
float x[3])
00134 {this->SetPoint1(x[0], x[1], x[2]); }
00135 float* GetPoint1()
00136 {
return this->LineSource->GetPoint1();}
00137 void GetPoint1(
float xyz[3])
00138 {this->LineSource->GetPoint1(xyz);}
00140
00142
00143
void SetPoint2(
float x,
float y,
float z);
00144 void SetPoint2(
float x[3])
00145 {this->SetPoint2(x[0], x[1], x[2]);}
00146 float* GetPoint2()
00147 {
return this->LineSource->GetPoint2();}
00148 void GetPoint2(
float xyz[3])
00149 {this->LineSource->GetPoint2(xyz);}
00151
00153
00157 vtkSetClampMacro(Align,
int, XAxis, None);
00158 vtkGetMacro(Align,
int);
00159 void SetAlignToXAxis() { this->SetAlign(XAxis); }
00160 void SetAlignToYAxis() { this->SetAlign(YAxis); }
00161 void SetAlignToZAxis() { this->SetAlign(ZAxis); }
00162 void SetAlignToNone() { this->SetAlign(None); }
00164
00166
00170 vtkSetMacro(ClampToBounds,
int);
00171 vtkGetMacro(ClampToBounds,
int);
00172 vtkBooleanMacro(ClampToBounds,
int);
00174
00180
void GetPolyData(
vtkPolyData *pd);
00181
00183
00186 vtkGetObjectMacro(HandleProperty,
vtkProperty);
00187 vtkGetObjectMacro(SelectedHandleProperty,
vtkProperty);
00189
00191
00193 vtkGetObjectMacro(LineProperty,
vtkProperty);
00194 vtkGetObjectMacro(SelectedLineProperty,
vtkProperty);
00196
00197
protected:
00198 vtkLineWidget();
00199 ~vtkLineWidget();
00200
00201
00202
friend class vtkPWCallback;
00203
00204 int State;
00205 enum WidgetState
00206 {
00207 Start=0,
00208 MovingHandle,
00209 MovingLine,
00210 Scaling,
00211 Outside
00212 };
00213
00214
00215
00216
static void ProcessEvents(
vtkObject* object,
00217
unsigned long event,
00218
void* clientdata,
00219
void* calldata);
00220
00221
00222
void OnLeftButtonDown();
00223
void OnLeftButtonUp();
00224
void OnMiddleButtonDown();
00225
void OnMiddleButtonUp();
00226
void OnRightButtonDown();
00227
void OnRightButtonUp();
00228
virtual void OnMouseMove();
00229
00230
00231 int Align;
00232
00233
00234 enum AlignmentState {
00235 XAxis,
00236 YAxis,
00237 ZAxis,
00238 None
00239 };
00240
00241
00242
00243 vtkActor *LineActor;
00244 vtkPolyDataMapper *LineMapper;
00245 vtkLineSource *LineSource;
00246
void HighlightLine(
int highlight);
00247
00248
00249 vtkActor **Handle;
00250 vtkPolyDataMapper **HandleMapper;
00251 vtkSphereSource **HandleGeometry;
00252
00253
void BuildRepresentation();
00254
virtual void SizeHandles();
00255
void HandlesOn(
double length);
00256
void HandlesOff();
00257
int HighlightHandle(
vtkProp *prop);
00258
void HighlightHandles(
int highlight);
00259
00260
00261 vtkCellPicker *HandlePicker;
00262 vtkCellPicker *LinePicker;
00263 vtkActor *CurrentHandle;
00264 float LastPosition[3];
00265
void SetLinePosition(
float x[3]);
00266
00267
00268
void Scale(
double *p1,
double *p2,
int X,
int Y);
00269
00270
00271 int ClampToBounds;
00272
void ClampPosition(
float x[3]);
00273
int InBounds(
float x[3]);
00274
00275
00276
00277 vtkProperty *HandleProperty;
00278 vtkProperty *SelectedHandleProperty;
00279 vtkProperty *LineProperty;
00280 vtkProperty *SelectedLineProperty;
00281
void CreateDefaultProperties();
00282
00283
void GenerateLine();
00284
00285
00286 vtkPointWidget *PointWidget;
00287 vtkPointWidget *PointWidget1;
00288 vtkPointWidget *PointWidget2;
00289 vtkPWCallback *PWCallback;
00290 vtkPW1Callback *PW1Callback;
00291 vtkPW2Callback *PW2Callback;
00292 vtkPointWidget *CurrentPointWidget;
00293
void EnablePointWidget();
00294
void DisablePointWidget();
00295
int ForwardEvent(
unsigned long event);
00296
00297
private:
00298 vtkLineWidget(
const vtkLineWidget&);
00299
void operator=(
const vtkLineWidget&);
00300 };
00301
00302
#endif