Isis Developer Reference
ImagePolygon.h
Go to the documentation of this file.
1#ifndef ImagePolygon_h
2#define ImagePolygon_h
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include <string>
11#include <sstream>
12#include <vector>
13
14#include "IException.h"
15#include "Cube.h"
16#include "Brick.h"
17#include "Blob.h"
18#include "Camera.h"
19#include "Projection.h"
20#include "UniversalGroundMap.h"
21#include "Blob.h"
22#include "geos/geom/Coordinate.h"
23#include "geos/geom/MultiPolygon.h"
24#include "geos/geom/CoordinateSequence.h"
25
26namespace Isis {
27
154
155 public:
156 ImagePolygon();
157 ImagePolygon(Blob &blob);
160
161 void Create(Cube &cube, int sinc = 1, int linc = 1,
162 int ss = 1, int sl = 1, int ns = 0, int nl = 0, int band = 1,
163 bool increasePrecision = false);
164
165 void Create(std::vector<std::vector<double>> polyCoordinates);
166
167 Camera * initCube(Cube &cube, int ss = 1, int sl = 1,
168 int ns = 0, int nl = 0, int band = 1);
169
175 void Emission(double emission) {
176 p_emission = emission;
177 }
183 void Incidence(double incidence) {
184 p_incidence = incidence;
185 }
186
193 void EllipsoidLimb(bool ellip) {
194 p_ellipsoid = ellip;
195 }
196
206 void SubpixelAccuracy(int div) {
207 p_subpixelAccuracy = div;
208 }
209
211 geos::geom::MultiPolygon *Polys() {
212 return p_polygons;
213 };
214
216 std::string polyStr() const {
217 return p_polyStr;
218 };
219
220 double validSampleDim();
221 double validLineDim();
222
224 int getSinc() const {
225 return p_sampinc;
226 }
227
229 int getLinc() const {
230 return p_lineinc;
231 }
232
233 int numVertices() const {
234 return p_pts->getSize();
235 }
236
237 Blob toBlob() const;
238
239 private:
240 // Please do not add new polygon manipulation methods to this class.
241 // Polygon manipulation should be done in the PolygonTools class.
242 bool SetImage(const double sample, const double line);
243
244 geos::geom::Coordinate FindFirstPoint();
245 void WalkPoly();
246 geos::geom::Coordinate FindNextPoint(geos::geom::Coordinate *currentPoint,
247 geos::geom::Coordinate lastPoint,
248 int recursionDepth = 0);
249
250 double DistanceSquared(const geos::geom::Coordinate *p1, const geos::geom::Coordinate *p2);
251
252 void MoveBackInsideImage(double &sample, double &line, double sinc, double linc);
253 bool InsideImage(double sample, double line);
254 void Fix360Poly();
255 void FixPolePoly(std::vector<geos::geom::Coordinate> *crossingPoints);
256
257 bool IsLimb();
258 geos::geom::Coordinate FindBestPoint(geos::geom::Coordinate *currentPoint,
259 geos::geom::Coordinate newPoint,
260 geos::geom::Coordinate lastPoint);
261 geos::geom::Coordinate FixCornerSkip(geos::geom::Coordinate *currentPoint,
262 geos::geom::Coordinate newPoint);
263
264 void FindSubpixel(std::vector<geos::geom::Coordinate> & points);
265
266 void calcImageBorderCoordinates();
267
268 Cube *p_cube;
269 bool p_isProjected;
270
271 Brick *p_brick;
272
273 geos::geom::CoordinateSequence *p_pts;
274
275 geos::geom::MultiPolygon *p_polygons;
276
277 std::string p_polyStr;
278
279 UniversalGroundMap *p_gMap;
280
281 geos::geom::Coordinate *m_leftCoord;
282 geos::geom::Coordinate *m_rightCoord;
283 geos::geom::Coordinate *m_topCoord;
284 geos::geom::Coordinate *m_botCoord;
285
286 int p_cubeStartSamp;
287 int p_cubeStartLine;
288 int p_cubeSamps;
289 int p_cubeLines;
290
291 int p_sampinc;
292 int p_lineinc;
293
294 double p_emission;
295 double p_incidence;
296 bool p_ellipsoid;
297
298 int p_subpixelAccuracy;
299
300 };
301};
302
303#endif
Definition Blob.h:51
Buffer for containing a three dimensional section of an image.
Definition Brick.h:45
Definition Camera.h:236
IO Handler for Isis Cubes.
Definition Cube.h:168
Create cube polygons, read/write polygons to blobs.
Definition ImagePolygon.h:153
double validSampleDim()
Retuns the maximum valid sample width of the cube set with either initCube() or Create()
Definition ImagePolygon.cpp:553
void EllipsoidLimb(bool ellip)
If a limb is detected, use un ellipsoid shape model if true.
Definition ImagePolygon.h:193
void Create(Cube &cube, int sinc=1, int linc=1, int ss=1, int sl=1, int ns=0, int nl=0, int band=1, bool increasePrecision=false)
Create a Polygon from given cube.
Definition ImagePolygon.cpp:216
int getLinc() const
Return the line increment used the create this polygon.
Definition ImagePolygon.h:229
ImagePolygon()
Constructs a Polygon object, setting the polygon name.
Definition ImagePolygon.cpp:38
void Emission(double emission)
Set the maximum emission angle ( light refleted to camera )
Definition ImagePolygon.h:175
Camera * initCube(Cube &cube, int ss=1, int sl=1, int ns=0, int nl=0, int band=1)
Create a Polygon from given cube.
Definition ImagePolygon.cpp:120
geos::geom::MultiPolygon * Polys()
Return a geos Multipolygon.
Definition ImagePolygon.h:211
ImagePolygon(const ImagePolygon &other)
~ImagePolygon()
Destroys the Polygon object.
Definition ImagePolygon.cpp:85
std::string polyStr() const
Return a geos Multipolygon.
Definition ImagePolygon.h:216
double validLineDim()
Retuns the maximum valid line width of the cube set with either initCube() or Create()
Definition ImagePolygon.cpp:568
Blob toBlob() const
Serialize the ImagePolygon to a Blob.
Definition ImagePolygon.cpp:1351
int numVertices() const
Definition ImagePolygon.h:233
void SubpixelAccuracy(int div)
The subpixel accuracy to use.
Definition ImagePolygon.h:206
int getSinc() const
Return the sample increment used the create this polygon.
Definition ImagePolygon.h:224
void Incidence(double incidence)
Set the maximum incidence angle ( light contacting the planet )
Definition ImagePolygon.h:183
Universal Ground Map.
Definition UniversalGroundMap.h:69
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16