Isis 3 Developer Reference
ViewportBuffer.h
Go to the documentation of this file.
1 #ifndef ViewportBuffer_h
2 #define ViewportBuffer_h
3 
27 #include <vector>
28 
29 #include <QRect>
30 
31 #include "Cube.h"
32 #include "Brick.h"
33 
34 // parent
35 #include <QObject>
36 
37 template<class T > class QQueue;
38 class QRect;
39 
40 namespace Isis {
41  class CubeDataThread;
42  class Brick;
43  class CubeViewport;
44  class ViewportBufferAction;
45  class ViewportBufferFill;
46  class ViewportBufferStretch;
47  class ViewportBufferTransform;
48 
78  class ViewportBuffer : public QObject {
79  Q_OBJECT
80 
81  public:
82  ViewportBuffer(CubeViewport *viewport, CubeDataThread *cubeData,
83  int cubeId);
84  virtual ~ViewportBuffer();
85 
86  const std::vector<double> &getLine(int line);
87 
88  void resizedViewport();
89  void pan(int deltaX, int deltaY);
90 
91  void scaleChanged();
92 
93  void fillBuffer(QRect rect);
94  void fillBuffer(QRect rect, const Brick *data);
95 
96  void emptyBuffer(bool force = false);
97 
98  QRect bufferXYRect();
99 
100  void setBand(int band);
101 
103  int getBand() {
104  return p_band;
105  }
106 
107  void enable(bool enabled);
108 
109  void addStretchAction();
110 
111  double currentProgress();
112  double totalUnfilledArea();
113 
120  bool enabled() {
121  return p_enabled;
122  }
123  bool working();
124 
125  bool hasEntireCube();
126 
127  public slots:
128  void DataReady(void *requester, int cubeId, const Isis::Brick *brick);
129 
130  signals:
142  void ReadCube(int cubeId, int startSample, int startLine,
143  int endSample, int endLine, int band, void *caller);
144 
146  void DoneWithData(int, const Isis::Brick *);
147 
148  private:
149  QRect getXYBoundingRect();
150  QList<double> getSampLineBoundingRect();
151  void updateBoundingRects();
152  void doQueuedActions();
153  void doTransformAction(ViewportBufferTransform *action);
154  void doStretchAction(ViewportBufferStretch *action);
155  void startFillAction(ViewportBufferFill *action);
156 
157  ViewportBufferFill *createViewportBufferFill(QRect, bool);
158 
159  void requestCubeLine(ViewportBufferFill *fill);
160 
161  void resizeBuffer(unsigned int width, unsigned int height);
162  void shiftBuffer(int deltaX, int deltaY);
163  void reinitialize();
164  bool actionsPreserveData();
165  bool reinitializeActionExists();
166  void enqueueAction(ViewportBufferAction *);
167 
168  CubeViewport *p_viewport;
169  int p_cubeId;
170  CubeDataThread *p_dataThread;
171 
172  int p_band;
173 
174  bool p_enabled;
175  std::vector< std::vector<double> > p_buffer;
176  bool p_bufferInitialized;
177 
182  QRect p_XYBoundingRect;
183  QRect p_oldXYBoundingRect;
184 
191  QList< double > p_sampLineBoundingRect;
192  QList< double > p_oldSampLineBoundingRect;
193  int p_viewportHeight;
194  int p_oldViewportHeight;
195  int p_vertScrollBarPos;
196  int p_oldVertScrollBarPos;
197  bool p_initialStretchDone;
198  double p_requestedFillArea;
199 
203  enum sampLineRectPosition {
204  rectLeft = 0,
205  rectTop,
206  rectRight,
207  rectBottom
208  };
209 
216 
217  bool p_bricksOrdered;
218  };
219 }
220 
221 #endif
Reads and stores visible DN values.
Definition: ViewportBuffer.h:78
const std::vector< double > & getLine(int line)
Retrieves a line from the buffer.
Definition: ViewportBuffer.cpp:334
void ReadCube(int cubeId, int startSample, int startLine, int endSample, int endLine, int band, void *caller)
Ask the cube data thread for data.
void DoneWithData(int, const Isis::Brick *)
Tell cube data thread we&#39;re done with a brick.
Buffer for containing a three dimensional section of an image.
Definition: Brick.h:61
double currentProgress()
Returns the viewport buffer&#39;s loading progress.
Definition: ViewportBuffer.cpp:625
void emptyBuffer(bool force=false)
This is meant to clear up ram on non-active viewports.
Definition: ViewportBuffer.cpp:1233
Definition: ViewportBufferFill.h:21
int getBand()
Return the band associated with this viewport buffer.
Definition: ViewportBuffer.h:103
Definition: ViewportBufferStretch.h:14
Definition: BoxcarCachingAlgorithm.h:30
Widget to display Isis cubes for qt apps.
Definition: CubeViewport.h:132
double totalUnfilledArea()
This returns the amount of area in the queue that needs new cube data/will be filled by fill actions...
Definition: ViewportBuffer.cpp:641
QRect bufferXYRect()
Returns a rect, in screen pixels, of the area this buffer covers.
Definition: ViewportBuffer.cpp:1249
void resizedViewport()
Call this when the viewport is resized (not zoomed).
Definition: ViewportBuffer.cpp:893
bool enabled()
Returns whether the buffer is enabled (reading data) or not.
Definition: ViewportBuffer.h:120
ViewportBuffer(CubeViewport *viewport, CubeDataThread *cubeData, int cubeId)
ViewportBuffer constructor.
Definition: ViewportBuffer.cpp:36
void enable(bool enabled)
This turns on or off reading from the cube.
Definition: ViewportBuffer.cpp:1294
void scaleChanged()
Call this when zoomed, re-reads visible area.
Definition: ViewportBuffer.cpp:1273
Encapsulation of Cube I/O with Change Notifications.
Definition: CubeDataThread.h:53
bool working()
This tests if queued actions exist in the viewport buffer.
Definition: ViewportBuffer.cpp:751
Definition: ViewportBufferTransform.h:14
void fillBuffer(QRect rect)
This method will convert the rect to sample/line positions and read from the cube into the buffer...
Definition: ViewportBuffer.cpp:106
void DataReady(void *requester, int cubeId, const Isis::Brick *brick)
This method is called when requested bricks become available.
Definition: ViewportBuffer.cpp:200
void setBand(int band)
Sets the band to read from, the buffer will be re-read if the band changes.
Definition: ViewportBuffer.cpp:1311
virtual ~ViewportBuffer()
Updates total buffer size on destruction.
Definition: ViewportBuffer.cpp:72
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
bool hasEntireCube()
Method to see if the entire cube is in the buffer.
Definition: ViewportBuffer.cpp:415
void pan(int deltaX, int deltaY)
Call this when the viewport is panned.
Definition: ViewportBuffer.cpp:1040
void addStretchAction()
When all current operations finish the cube viewport will be asked to do a stretch if you call this...
Definition: ViewportBuffer.cpp:1212
Definition: ViewportBufferAction.h:11