00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00040 #ifndef __vtkLineRepresentation_h
00041 #define __vtkLineRepresentation_h
00042
00043 #include "vtkWidgetRepresentation.h"
00044
00045 class vtkActor;
00046 class vtkPolyDataMapper;
00047 class vtkLineSource;
00048 class vtkSphereSource;
00049 class vtkProperty;
00050 class vtkPolyData;
00051 class vtkPolyDataAlgorithm;
00052 class vtkPointHandleRepresentation3D;
00053 class vtkBox;
00054 class vtkFollower;
00055 class vtkVectorText;
00056 class vtkPolyDataMapper;
00057 class vtkCellPicker;
00058
00059 class VTK_WIDGETS_EXPORT vtkLineRepresentation : public vtkWidgetRepresentation
00060 {
00061 public:
00063 static vtkLineRepresentation *New();
00064
00066
00067 vtkTypeMacro(vtkLineRepresentation,vtkWidgetRepresentation);
00068 void PrintSelf(ostream& os, vtkIndent indent);
00070
00072
00075 void GetPoint1WorldPosition(double pos[3]);
00076 double* GetPoint1WorldPosition();
00077 void GetPoint1DisplayPosition(double pos[3]);
00078 double* GetPoint1DisplayPosition();
00079 void SetPoint1WorldPosition(double pos[3]);
00080 void SetPoint1DisplayPosition(double pos[3]);
00081 void GetPoint2DisplayPosition(double pos[3]);
00082 double* GetPoint2DisplayPosition();
00083 void GetPoint2WorldPosition(double pos[3]);
00084 double* GetPoint2WorldPosition();
00085 void SetPoint2WorldPosition(double pos[3]);
00086 void SetPoint2DisplayPosition(double pos[3]);
00088
00090
00098 void SetHandleRepresentation(vtkPointHandleRepresentation3D *handle);
00099 void InstantiateHandleRepresentation();
00101
00103
00104 vtkGetObjectMacro(Point1Representation,vtkPointHandleRepresentation3D);
00105 vtkGetObjectMacro(Point2Representation,vtkPointHandleRepresentation3D);
00106 vtkGetObjectMacro(LineHandleRepresentation,vtkPointHandleRepresentation3D);
00108
00110
00112 vtkGetObjectMacro(EndPointProperty,vtkProperty);
00113 vtkGetObjectMacro(SelectedEndPointProperty,vtkProperty);
00115
00117
00119 vtkGetObjectMacro(EndPoint2Property,vtkProperty);
00120 vtkGetObjectMacro(SelectedEndPoint2Property,vtkProperty);
00122
00124
00126 vtkGetObjectMacro(LineProperty,vtkProperty);
00127 vtkGetObjectMacro(SelectedLineProperty,vtkProperty);
00129
00131
00134 vtkSetClampMacro(Tolerance,int,1,100);
00135 vtkGetMacro(Tolerance,int);
00137
00139
00142 void SetResolution(int res);
00143 int GetResolution();
00145
00152 void GetPolyData(vtkPolyData *pd);
00153
00155
00156 virtual void PlaceWidget(double bounds[6]);
00157 virtual void BuildRepresentation();
00158 virtual int ComputeInteractionState(int X, int Y, int modify=0);
00159 virtual void StartWidgetInteraction(double e[2]);
00160 virtual void WidgetInteraction(double e[2]);
00161 virtual double *GetBounds();
00163
00165
00166 virtual void GetActors(vtkPropCollection *pc);
00167 virtual void ReleaseGraphicsResources(vtkWindow*);
00168 virtual int RenderOpaqueGeometry(vtkViewport*);
00169 virtual int RenderTranslucentPolygonalGeometry(vtkViewport*);
00170 virtual int HasTranslucentPolygonalGeometry();
00172
00173
00174 enum {Outside=0,OnP1,OnP2,TranslatingP1,TranslatingP2,OnLine,Scaling};
00175
00176
00178
00185 vtkSetClampMacro(InteractionState,int,Outside,Scaling);
00187
00189
00191 virtual void SetRepresentationState(int);
00192 vtkGetMacro(RepresentationState, int);
00194
00197 virtual unsigned long GetMTime();
00198
00200 virtual void SetRenderer(vtkRenderer *ren);
00201
00203
00204 vtkSetMacro( DistanceAnnotationVisibility, int );
00205 vtkGetMacro( DistanceAnnotationVisibility, int );
00206 vtkBooleanMacro( DistanceAnnotationVisibility, int );
00208
00210
00213 vtkSetStringMacro(DistanceAnnotationFormat);
00214 vtkGetStringMacro(DistanceAnnotationFormat);
00216
00218
00219 void SetDistanceAnnotationScale(double x, double y, double z)
00220 {
00221 double scale[3];
00222 scale[0] = x;
00223 scale[1] = y;
00224 scale[2] = z;
00225 this->SetDistanceAnnotationScale(scale);
00226 }
00227 virtual void SetDistanceAnnotationScale( double scale[3] );
00228 virtual double * GetDistanceAnnotationScale();
00230
00232 double GetDistance();
00233
00234
00237 void SetLineColor(double r, double g, double b);
00238
00240 virtual vtkProperty *GetDistanceAnnotationProperty();
00241
00243
00244 vtkGetObjectMacro(TextActor, vtkFollower);
00246
00247 protected:
00248 vtkLineRepresentation();
00249 ~vtkLineRepresentation();
00250
00251
00252 vtkPointHandleRepresentation3D *HandleRepresentation;
00253 vtkPointHandleRepresentation3D *Point1Representation;
00254 vtkPointHandleRepresentation3D *Point2Representation;
00255 vtkPointHandleRepresentation3D *LineHandleRepresentation;
00256
00257
00258 int RepresentationState;
00259
00260
00261 vtkActor *LineActor;
00262 vtkPolyDataMapper *LineMapper;
00263 vtkLineSource *LineSource;
00264
00265
00266 vtkActor **Handle;
00267 vtkPolyDataMapper **HandleMapper;
00268 vtkSphereSource **HandleGeometry;
00269
00270
00271
00272 vtkProperty *EndPointProperty;
00273 vtkProperty *SelectedEndPointProperty;
00274 vtkProperty *EndPoint2Property;
00275 vtkProperty *SelectedEndPoint2Property;
00276 vtkProperty *LineProperty;
00277 vtkProperty *SelectedLineProperty;
00278 void CreateDefaultProperties();
00279
00280
00281 int Tolerance;
00282
00283
00284 int ClampToBounds;
00285 void ClampPosition(double x[3]);
00286 void HighlightPoint(int ptId, int highlight);
00287 void HighlightLine(int highlight);
00288 int InBounds(double x[3]);
00289 void SizeHandles();
00290
00291
00292 double StartP1[3];
00293 double StartP2[3];
00294 double StartLineHandle[3];
00295 double Length;
00296 double LastEventPosition[3];
00297
00298
00299 vtkBox *BoundingBox;
00300
00301
00302
00303
00304
00305 int InitializedDisplayPosition;
00306
00307
00308 int DistanceAnnotationVisibility;
00309 char *DistanceAnnotationFormat;
00310
00311 vtkFollower *TextActor;
00312 vtkPolyDataMapper *TextMapper;
00313 vtkVectorText *TextInput;
00314 double Distance;
00315 bool AnnotationTextScaleInitialized;
00316
00317 vtkCellPicker *LinePicker;
00318
00319 private:
00320 vtkLineRepresentation(const vtkLineRepresentation&);
00321 void operator=(const vtkLineRepresentation&);
00322 };
00323
00324 #endif