Isis 3 Programmer Reference
RubberBandTool.h
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 
57  enum RubberBandMode {
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 
76  RubberBandMode currentMode();
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 
Isis::MdiCubeViewport
Cube display widget for certain Isis MDI applications.
Definition: MdiCubeViewport.h:39
QWidget
Isis::RubberBandTool::mouseMove
void mouseMove(QPoint p, Qt::MouseButton)
If tracking is not enabled, this does nothing.
Definition: RubberBandTool.cpp:589
Isis::RubberBandTool::setDrawActiveViewportOnly
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
QList
This is free and unencumbered software released into the public domain.
Definition: BoxcarCachingAlgorithm.h:13
Isis::RubberBandTool::RubberBandTool
RubberBandTool(QWidget *parent=NULL)
This is the constructor.
Definition: RubberBandTool.cpp:35
Isis::RubberBandTool::snapMouse
QPoint snapMouse(QPoint)
moves the mouse's location p to the nearest axis
Definition: RubberBandTool.cpp:554
Isis::Tool
Base class for the Qisis tools.
Definition: Tool.h:67
Isis::RubberBandTool::enable
void enable(RubberBandMode mode, bool showIndicatorColors=false)
This is called when changing modes or turning on.
Definition: RubberBandTool.cpp:302
Isis::RubberBandTool::mouseButtonRelease
void mouseButtonRelease(QPoint p, Qt::MouseButton s)
If this is not the left mouse button, this does nothing.
Definition: RubberBandTool.cpp:475
Isis::RubberBandTool::mouseButton
Qt::MouseButton mouseButton()
This method returns the mouse button modifier.
Definition: RubberBandTool.cpp:1012
Isis::RubberBandTool::reset
void reset()
This initializes the class except for the current mode, which is set on enable.
Definition: RubberBandTool.cpp:752
Isis::RubberBandTool::repaint
void repaint()
This method will call the viewport's repaint if there is a current cube viewport.
Definition: RubberBandTool.cpp:812
Isis::RubberBandTool::enableRubberBandTool
void enableRubberBandTool()
Anytime a tool is created, you may use the rubber band tool.
Definition: RubberBandTool.h:107
Isis::RubberBandTool::paintViewport
void paintViewport(MdiCubeViewport *vp, QPainter *painter)
This is the main paint method for the rubber bands.
Definition: RubberBandTool.cpp:73
Isis::RubberBandTool::clear
void clear()
clears the rubber band!
Definition: RubberBandTool.cpp:1155
Isis::Angle
Defines an angle and provides unit conversions.
Definition: Angle.h:45
Isis::RubberBandTool::isValid
bool isValid()
This returns true if we can return complete & valid data.
Definition: RubberBandTool.cpp:1016
Isis::RubberBandTool::paintVerticesConnected
void paintVerticesConnected(QPainter *painter)
This paints connecting lines to p_vertices.
Definition: RubberBandTool.cpp:248
Isis::RubberBandTool::geometry
geos::geom::Geometry * geometry()
Definition: RubberBandTool.cpp:823
Isis::RubberBandTool
Rubber banding tool.
Definition: RubberBandTool.h:50
Isis::RubberBandTool::mouseButtonPress
void mouseButtonPress(QPoint p, Qt::MouseButton s)
If the click is not the left mouse button, this does nothing.
Definition: RubberBandTool.cpp:386
Isis::RubberBandTool::paintRectangle
void paintRectangle(QPoint upperLeft, QPoint lowerRight, QPainter *painter)
Given opposite corners, the other two are interpolated and the rectangle is drawn.
Definition: RubberBandTool.cpp:271
Isis::RubberBandTool::calcRectCorners
void calcRectCorners(QPoint corner1, QPoint corner2, QPoint &corner3, QPoint &corner4)
Given two set corners, and the mouse location, this method will interpolate the last two corners.
Definition: RubberBandTool.cpp:190
Isis::RubberBandTool::rectangle
QRect rectangle()
This method returns a rectangle from the vertices set by the RubberBandTool.
Definition: RubberBandTool.cpp:966
Isis::RubberBandTool::disable
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
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::RubberBandTool::mouseDoubleClick
void mouseDoubleClick(QPoint p)
This triggers on a second mouse press.
Definition: RubberBandTool.cpp:343
Isis::RubberBandTool::vertices
QList< QPoint > vertices()
This method returns the vertices.
Definition: RubberBandTool.cpp:672