Isis 3 Programmer Reference
RubberBandTool.h
1#ifndef RubberBandTool_h
2#define RubberBandTool_h
3
4#include "Tool.h"
5
6#include <QPointer>
7
8class QRect;
9class QPoint;
10
11template <typename A> class QList;
12
13namespace geos {
14 namespace geom {
15 class Geometry;
16 }
17}
18
19
20namespace 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
74 QList<QPoint> vertices();
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
Defines an angle and provides unit conversions.
Definition Angle.h:45
Cube display widget for certain Isis MDI applications.
Rubber banding tool.
void disable()
This is called when something is not using me, so turn off events, reset & repaint to clear the clear...
void mouseMove(QPoint p, Qt::MouseButton)
If tracking is not enabled, this does nothing.
geos::geom::Geometry * geometry()
QRect rectangle()
This method returns a rectangle from the vertices set by the RubberBandTool.
void mouseButtonRelease(QPoint p, Qt::MouseButton s)
If this is not the left mouse button, this does nothing.
void setDrawActiveViewportOnly(bool activeOnly=false)
This called to set whether rubber band is drawn on active viewport only rather than all linked viewpo...
void paintViewport(MdiCubeViewport *vp, QPainter *painter)
This is the main paint method for the rubber bands.
bool isValid()
This returns true if we can return complete & valid data.
void mouseButtonPress(QPoint p, Qt::MouseButton s)
If the click is not the left mouse button, this does nothing.
void reset()
This initializes the class except for the current mode, which is set on enable.
void paintVerticesConnected(QPainter *painter)
This paints connecting lines to p_vertices.
void enableRubberBandTool()
Anytime a tool is created, you may use the rubber band tool.
void mouseDoubleClick(QPoint p)
This triggers on a second mouse press.
QList< QPoint > vertices()
This method returns the vertices.
Qt::MouseButton mouseButton()
This method returns the mouse button modifier.
void enable(RubberBandMode mode, bool showIndicatorColors=false)
This is called when changing modes or turning on.
void repaint()
This method will call the viewport's repaint if there is a current cube viewport.
void clear()
clears the rubber band!
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.
QPoint snapMouse(QPoint)
moves the mouse's location p to the nearest axis
void paintRectangle(QPoint upperLeft, QPoint lowerRight, QPainter *painter)
Given opposite corners, the other two are interpolated and the rectangle is drawn.
RubberBandTool(QWidget *parent=NULL)
This is the constructor.
Base class for the Qisis tools.
Definition Tool.h:67
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16