Isis 3 Developer Reference
RubberBandTool.h
Go to the documentation of this file.
1 #ifndef RubberBandTool_h
2 #define RubberBandTool_h
3 
4 #include "Tool.h"
5 
6 #include <QPointer>
7 
8 class QRect;
9 class QPoint;
10 
11 template <typename A> class QList;
12 
13 namespace geos {
14  namespace geom {
15  class Geometry;
16  }
17 }
18 
19 
20 namespace Isis {
21  class Angle;
22  class MdiCubeViewport;
23 
50  class RubberBandTool : public Tool {
51  Q_OBJECT
52 
53  public:
54  RubberBandTool(QWidget *parent = NULL);
55  virtual ~RubberBandTool();
56 
58  AngleMode, //<! Measure an angle
59  CircleMode, //<! Draw a perfect circle
60  EllipseMode, //<! Draw an ellipse (oval)
61  LineMode, //<! Draw a simple line
62  RectangleMode, //<! Draw a rectangle without any rotation (perfectly horizonal/verticle)
63  RotatedRectangleMode, //<! Draw a rotatable rectangle
64  PolygonMode, //<! Draw any closed shape
65  SegmentedLineMode //<! Draw any open shape
66  };
67 
68  void enable(RubberBandMode mode, bool showIndicatorColors = false);
69 
70  void disable();
71 
72  void setDrawActiveViewportOnly(bool activeOnly = false);
73 
75 
77  double area();
78  Angle angle();
79 
80  geos::geom::Geometry *geometry();
81  QRect rectangle();
82  Qt::MouseButton mouseButton();
83 
84  void paintViewport(MdiCubeViewport *vp, QPainter *painter);
85 
87  bool isValid();
88  bool figureComplete();
89  bool figureValid();
90 
91  bool figureIsPoint();
92 
93  void enablePoints(unsigned int pixTolerance = 2);
94  void enableAllClicks();
95 
96  void clear();
97 
98  public slots:
99  void escapeKeyPress();
100 
101  signals:
102  void modeChanged();
103  void bandingComplete();
104  void measureChange();
105 
106  protected:
108  void scaleChanged();
109 
110  protected slots:
111  void mouseMove(QPoint p, Qt::MouseButton);
112  void mouseDoubleClick(QPoint p);
113  void mouseButtonPress(QPoint p, Qt::MouseButton s);
114  void mouseButtonRelease(QPoint p, Qt::MouseButton s);
115 
116  private:
117  QPoint snapMouse(QPoint);
118 
119  void repaint();
120  void paintVerticesConnected(QPainter *painter);
121  void paintRectangle(QPoint upperLeft, QPoint lowerRight, QPainter *painter);
122  void paintRectangle(QPoint upperLeft, QPoint upperRight,
123  QPoint lowerLeft, QPoint lowerRight, QPainter *painter);
124 
125  // This is used for rotated rectangle
126  void calcRectCorners(QPoint corner1, QPoint corner2, QPoint &corner3, QPoint &corner4);
127 
128  void reset(); //<! This resets the member variables
129 
130  bool p_mouseDown; //<! True if the mouse is pressed
131  bool p_doubleClicking; //<! True if on second click of a double click
132  bool p_tracking; //<! True if painting on mouse move
133  bool p_allClicks; //<! Enables all mouse buttons for banding
134  bool p_drawActiveOnly; //<! True if draw on active viewport only
135  RubberBandMode p_bandingMode; //<! Current type of rubber band
136  QList<QPoint> * p_vertices; //<! Known vertices pertaining to the current rubber band
137  QPoint *p_mouseLoc; //<! Current mouse location, only valid of p_tracking
138  Qt::MouseButton p_mouseButton; //<! Last mouse button status
139  bool p_indicatorColors; //<! Color the first side of objects a different color, if it's significant
140  unsigned int p_pointTolerance; //<! Tolerance for points (zero for no points)
141  };
142 };
143 
144 #endif
145 
Cube display widget for certain Isis MDI applications.
Definition: MdiCubeViewport.h:53
Definition: RubberBandTool.h:64
Definition: RubberBandTool.h:62
bool figureIsPoint()
Definition: RubberBandTool.cpp:1121
QList< QPoint > vertices()
This method returns the vertices.
Definition: RubberBandTool.cpp:672
Definition: RubberBandTool.h:59
QRect rectangle()
This method returns a rectangle from the vertices set by the RubberBandTool.
Definition: RubberBandTool.cpp:966
Qt::MouseButton mouseButton()
This method returns the mouse button modifier.
Definition: RubberBandTool.cpp:1012
void mouseMove(QPoint p, Qt::MouseButton)
If tracking is not enabled, this does nothing.
Definition: RubberBandTool.cpp:589
void setDrawActiveViewportOnly(bool activeOnly=false)
This called to set whether rubber band is drawn on active viewport only rather than all linked viewpo...
Definition: RubberBandTool.cpp:333
void escapeKeyPress()
Definition: RubberBandTool.cpp:1176
Definition: RubberBandTool.h:65
void scaleChanged()
Definition: RubberBandTool.cpp:1181
void clear()
clears the rubber band!
Definition: RubberBandTool.cpp:1155
Definition: RubberBandTool.h:63
void mouseButtonRelease(QPoint p, Qt::MouseButton s)
If this is not the left mouse button, this does nothing.
Definition: RubberBandTool.cpp:475
double area()
Definition: RubberBandTool.cpp:1166
Definition: RubberBandTool.h:58
bool figureValid()
Definition: RubberBandTool.cpp:1056
RubberBandMode currentMode()
Definition: RubberBandTool.cpp:1161
Angle angle()
Definition: RubberBandTool.cpp:760
RubberBandMode
Definition: RubberBandTool.h:57
void mouseDoubleClick(QPoint p)
This triggers on a second mouse press.
Definition: RubberBandTool.cpp:343
Definition: Image.h:43
RubberBandTool(QWidget *parent=NULL)
This is the constructor.
Definition: RubberBandTool.cpp:35
virtual ~RubberBandTool()
Definition: RubberBandTool.cpp:48
void paintViewport(MdiCubeViewport *vp, QPainter *painter)
This is the main paint method for the rubber bands.
Definition: RubberBandTool.cpp:73
Defines an angle and provides unit conversions.
Definition: Angle.h:62
Rubber banding tool.
Definition: RubberBandTool.h:50
bool figureComplete()
Definition: RubberBandTool.cpp:1021
bool isValid()
This returns true if we can return complete & valid data.
Definition: RubberBandTool.cpp:1016
void disable()
This is called when something is not using me, so turn off events, reset & repaint to clear the clear...
Definition: RubberBandTool.cpp:322
Definition: BoxcarCachingAlgorithm.h:29
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
void enableAllClicks()
Definition: RubberBandTool.cpp:1171
Base class for the Qisis tools.
Definition: Tool.h:81
geos::geom::Geometry * geometry()
Definition: RubberBandTool.cpp:823
void enablePoints(unsigned int pixTolerance=2)
Definition: RubberBandTool.cpp:1117
void enableRubberBandTool()
Anytime a tool is created, you may use the rubber band tool.
Definition: RubberBandTool.h:107
Definition: RubberBandTool.h:61
void mouseButtonPress(QPoint p, Qt::MouseButton s)
If the click is not the left mouse button, this does nothing.
Definition: RubberBandTool.cpp:386
Definition: RubberBandTool.h:60
void enable(RubberBandMode mode, bool showIndicatorColors=false)
This is called when changing modes or turning on.
Definition: RubberBandTool.cpp:302