Isis 3 Programmer Reference
ProcessRubberSheet.h
1#ifndef ProcessRubberSheet_h
2#define ProcessRubberSheet_h
8/* SPDX-License-Identifier: CC0-1.0 */
9#include "Process.h"
10#include "Buffer.h"
11#include "Transform.h"
12#include "Interpolator.h"
13#include "Portal.h"
14#include "TileManager.h"
15
16namespace Isis {
17 class Brick;
18
105 public:
106
107 ProcessRubberSheet(int startSize = 128, int endSize = 8);
108
111
113 // Output driven processing method for one input and output cube
114 virtual void StartProcess(Transform &trans, Interpolator &interp);
115
116 // Input driven processing method for one input and output cube
117 virtual void processPatchTransform(Transform &trans, Interpolator &interp);
118
119 // Register a function to be called when the band number changes
120 virtual void BandChange(void (*funct)(const int band));
121
122 virtual void ForceTile(double Samp, double Line) {
123 p_forceSamp = Samp;
124 p_forceLine = Line;
125 }
126
135 virtual void SetTiling(long long start, long long end) {
136 p_startQuadSize = start;
137 p_endQuadSize = end;
138 }
139
140 virtual void setPatchParameters(int startSample, int startLine,
141 int samples, int lines,
142 int sampleIncrement, int lineIncrement);
143
144
145 private:
146
152 class Quad {
153 public:
154 int slineTile;
155 int ssampTile;
156 int sline;
157 int ssamp;
158 int eline;
159 int esamp;
160 };
161
162 void ProcessQuad(std::vector<Quad *> &quadTree, Transform &trans,
163 std::vector< std::vector<double> > &lineMap,
164 std::vector< std::vector<double> > &sampMap);
165
166 void SplitQuad(std::vector<Quad *> &quadTree);
167 void SlowQuad(std::vector<Quad *> &quadTree, Transform &trans,
168 std::vector< std::vector<double> > &lineMap,
169 std::vector< std::vector<double> > &sampMap);
170 double Det4x4(double m[4][4]);
171 double Det3x3(double m[3][3]);
172
173 // SlowGeom method is never used but saved for posterity
174 void SlowGeom(TileManager &otile, Portal &iportal,
175 Transform &trans, Interpolator &interp);
176 void QuadTree(TileManager &otile, Portal &iportal,
177 Transform &trans, Interpolator &interp,
178 bool useLastTileMap);
179
180 bool TestLine(Transform &trans, int ssamp, int esamp, int sline,
181 int eline, int increment);
182
183 void (*p_bandChangeFunct)(const int band);
184
185 void transformPatch (double startingSample, double endingSample,
186 double startingLine, double endingLine,
187 Portal &iportal, Transform &trans, Interpolator &interp);
188
189 void splitPatch (double startingSample, double endingSample,
190 double startingLine, double endingLine,
191 Portal &iportal, Transform &trans, Interpolator &interp);
192#if 0
193 void transformPatch (double startingSample, double endingSample,
194 double startingLine, double endingLine);
195
196 void splitPatch (double startingSample, double endingSample,
197 double startingLine, double endingLine);
198#endif
199
200 std::vector< std::vector<double> > p_sampMap;
201 std::vector< std::vector<double> > p_lineMap;
202
203 double p_forceSamp;
204 double p_forceLine;
205
206 long long p_startQuadSize;
207 long long p_endQuadSize;
208
209 int m_patchStartSample;
210 int m_patchStartLine;
211 int m_patchSamples;
212 int m_patchLines;
213 int m_patchSampleIncrement;
214 int m_patchLineIncrement;
215
216#if 0
217 Portal *m_iportal;
218 Brick *m_obrick;
219 Transform *m_transform;
220 Interpolator *m_interpolator;
221#endif
222 };
223};
224
225#endif
Buffer for containing a three dimensional section of an image.
Definition Brick.h:45
Pixel interpolator.
Buffer for containing a two dimensional section of an image.
Definition Portal.h:36
Base class for all cube processing derivatives.
Definition Process.h:143
virtual void StartProcess(void funct())
In the base class, this method will invoked a user-specified function exactly one time.
Definition Process.h:213
Derivative of Process, designed for geometric transformations.
virtual void StartProcess(Transform &trans, Interpolator &interp)
Applies a Transform and an Interpolator to every pixel in the output cube.
virtual void processPatchTransform(Transform &trans, Interpolator &interp)
Applies a Transform and an Interpolator to small patches.
virtual ~ProcessRubberSheet()
Destroys the RubberSheet object.
ProcessRubberSheet(int startSize=128, int endSize=8)
Constructs a ProcessRubberSheet class with the default tile size range.
virtual void SetTiling(long long start, long long end)
This sets the start and end tile sizes for the rubber sheet; numbers are inclusive and must be powers...
virtual void BandChange(void(*funct)(const int band))
Registers a function to be called when the current output cube band number changes.
virtual void setPatchParameters(int startSample, int startLine, int samples, int lines, int sampleIncrement, int lineIncrement)
This method allows the programmer to override the default values for patch parameters used in the pat...
bool TestLine(Transform &trans, int ssamp, int esamp, int sline, int eline, int increment)
This function walks a line (or rectangle) and tests a point every increment pixels.
Buffer manager, for moving through a cube in tiles.
Definition TileManager.h:39
Pixel transformation.
Definition Transform.h:72
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16