00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00027 #ifndef __vtkControlPointsItem_h
00028 #define __vtkControlPointsItem_h
00029
00030 #include "vtkPlot.h"
00031 #include "vtkCommand.h"
00032
00033 class vtkCallbackCommand;
00034 class vtkContext2D;
00035 class vtkPoints2D;
00036 class vtkTransform2D;
00037
00038 class VTK_CHARTS_EXPORT vtkControlPointsItem: public vtkPlot
00039 {
00040 public:
00041 vtkTypeMacro(vtkControlPointsItem, vtkPlot);
00042 virtual void PrintSelf(ostream &os, vtkIndent indent);
00043
00044 enum {
00045 CurrentPointChangedEvent = vtkCommand::UserEvent,
00046 CurrentPointEditEvent
00047 };
00048
00051 virtual void GetBounds(double bounds[4]);
00052
00054
00057 vtkSetVector4Macro(UserBounds, double);
00058 vtkGetVector4Macro(UserBounds, double)
00060
00064 virtual bool Paint(vtkContext2D *painter);
00065
00067 void SelectPoint(vtkIdType pointId);
00068
00072 void SelectPoint(double* currentPoint);
00073
00075 void SelectAllPoints();
00076
00078 void DeselectPoint(vtkIdType pointId);
00079
00083 void DeselectPoint(double* currentPoint);
00084
00086 void DeselectAllPoints();
00087
00090 void ToggleSelectPoint(vtkIdType pointId);
00091
00095 void ToggleSelectPoint(double* currentPoint);
00096
00098 virtual bool SelectPoints(const vtkVector2f& min, const vtkVector2f& max);
00099
00102 vtkIdType FindPoint(double* pos);
00103
00107 bool IsOverPoint(double* pos, vtkIdType pointId);
00108
00111 vtkIdType GetControlPointId(double* pos);
00112
00114
00116 vtkGetMacro(StrokeMode, bool);
00118
00120
00124 vtkSetMacro(SwitchPointsMode, bool);
00125 vtkGetMacro(SwitchPointsMode, bool);
00127
00131 virtual vtkIdType AddPoint(double* newPos);
00132
00136 virtual vtkIdType RemovePoint(double* pos);
00137
00139 virtual int GetNumberOfPoints()const = 0;
00140
00142
00144 virtual void GetControlPoint(vtkIdType index, double *point) = 0;
00145
00146
00147
00148 virtual void SetControlPoint(vtkIdType index, double *point) = 0;
00150
00152 vtkIdType GetCurrentPoint()const;
00153
00155 void SetCurrentPoint(vtkIdType index);
00156
00159 void ResetBounds();
00160
00161 protected:
00162 vtkControlPointsItem();
00163 virtual ~vtkControlPointsItem();
00164
00165 static void CallComputePoints(vtkObject* sender, unsigned long event, void* receiver, void* params);
00166
00168
00170 virtual void ComputePoints();
00171 virtual unsigned long int GetControlPointsMTime() =0;
00173
00175 virtual bool Hit(const vtkContextMouseEvent &mouse);
00176
00179 bool ClampPos(double pos[2]);
00180
00182
00184 void DrawUnselectedPoints(vtkContext2D* painter);
00185 void DrawSelectedPoints(vtkContext2D* painter);
00186 virtual void DrawPoint(vtkContext2D* painter, vtkIdType index);
00188
00190
00191 virtual bool MouseButtonPressEvent(const vtkContextMouseEvent &mouse);
00192 virtual bool MouseDoubleClickEvent(const vtkContextMouseEvent &mouse);
00194
00196 virtual bool MouseMoveEvent(const vtkContextMouseEvent &mouse);
00197
00198 void MoveCurrentPoint(const vtkVector2f& newPos);
00199 vtkIdType MovePoint(vtkIdType point, const vtkVector2f& newPos);
00200 void MovePoints(float tX, float tY);
00201 void Stroke(const vtkVector2f& newPos);
00202 virtual void EditPoint(float vtkNotUsed(tX), float vtkNotUsed(tY));
00204 virtual bool MouseButtonReleaseEvent(const vtkContextMouseEvent &mouse);
00205
00206 vtkCallbackCommand* Callback;
00207 vtkIdType CurrentPoint;
00208
00209 double Bounds[4];
00210 double UserBounds[4];
00211
00212 vtkTransform2D* Transform;
00213 float ScreenPointRadius;
00214 float ItemPointRadius2;
00215
00216 bool StrokeMode;
00217 bool SwitchPointsMode;
00218 bool MouseMoved;
00219 bool EnforceValidFunction;
00220 vtkIdType PointToDelete;
00221 bool PointAboutToBeDeleted;
00222 vtkIdType PointToToggle;
00223 bool PointAboutToBeToggled;
00224 private:
00225 vtkControlPointsItem(const vtkControlPointsItem &);
00226 void operator=(const vtkControlPointsItem &);
00227
00228 vtkIdType RemovePointId(vtkIdType pointId);
00229 void ComputeBounds();
00230 };
00231
00232 #endif