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