Isis 3.0 Programmer Reference
Back | Home
CameraPointInfo.cpp
Go to the documentation of this file.
1 
23 #include "CameraPointInfo.h"
24 
25 #include <QDebug>
26 
27 #include <iomanip>
28 
29 #include "Brick.h"
30 #include "Camera.h"
31 #include "CameraFocalPlaneMap.h"
32 #include "Cube.h"
33 #include "CubeManager.h"
34 #include "Distance.h"
35 #include "IException.h"
36 #include "iTime.h"
37 #include "Longitude.h"
38 #include "PvlGroup.h"
39 #include "SpecialPixel.h"
40 #include "TProjection.h"
41 
42 using namespace Isis;
43 using namespace std;
44 
45 namespace Isis {
46 
47 
53  m_usedCubes = NULL;
54  m_usedCubes = new CubeManager();
55  m_usedCubes->SetNumOpenCubes(50);
56  m_currentCube = NULL;
57  m_camera = NULL;
58  m_csvOutput = false;
59  }
60 
61  void CameraPointInfo::SetCSVOutput(bool csvOutput) {
62 
63  m_csvOutput = csvOutput;
64 
65  }
66 
72  if (m_usedCubes) {
73  delete m_usedCubes;
74  m_usedCubes = NULL;
75  }
76  }
77 
78 
86  void CameraPointInfo::SetCube(const QString &cubeFileName) {
87  m_currentCube = m_usedCubes->OpenCube(cubeFileName);
88  m_camera = m_currentCube->camera();
89  }
90 
91 
105  PvlGroup *CameraPointInfo::SetImage(const double sample, const double line,
106  const bool allowOutside, const bool allowErrors) {
107  if (CheckCube()) {
108  bool passed = m_camera->SetImage(sample, line);
109  return GetPointInfo(passed, allowOutside, allowErrors);
110  }
111  // Should never get here, error will be thrown in CheckCube()
112  return NULL;
113  }
114 
115 
126  PvlGroup *CameraPointInfo::SetCenter(const bool allowOutside, const bool allowErrors) {
127  if (CheckCube()) {
128  bool passed = m_camera->SetImage(m_currentCube->sampleCount() / 2.0,
129  m_currentCube->lineCount() / 2.0);
130  return GetPointInfo(passed, allowOutside, allowErrors);
131  }
132  // Should never get here, error will be thrown in CheckCube()
133  return NULL;
134  }
135 
136 
149  PvlGroup *CameraPointInfo::SetSample(const double sample,
150  const bool allowOutside,
151  const bool allowErrors) {
152  if (CheckCube()) {
153  bool passed = m_camera->SetImage(sample, m_currentCube->lineCount() / 2.0);
154  return GetPointInfo(passed, allowOutside, allowErrors);
155  }
156  // Should never get here, error will be thrown in CheckCube()
157  return NULL;
158  }
159 
160 
173  PvlGroup *CameraPointInfo::SetLine(const double line,
174  const bool allowOutside,
175  const bool allowErrors) {
176  if (CheckCube()) {
177  bool passed = m_camera->SetImage(m_currentCube->sampleCount() / 2.0, line);
178  return GetPointInfo(passed, allowOutside, allowErrors);
179  }
180  // Should never get here, error will be thrown in CheckCube()
181  return NULL;
182  }
183 
184 
198  PvlGroup *CameraPointInfo::SetGround(const double latitude, const double longitude,
199  const bool allowOutside, const bool allowErrors) {
200  if (CheckCube()) {
201  bool passed = m_camera->SetUniversalGround(latitude, longitude);
202  return GetPointInfo(passed, allowOutside, allowErrors);
203  }
204  // Should never get here, error will be thrown in CheckCube()
205  return NULL;
206  }
207 
208 
216  if (m_currentCube == NULL) {
217  string msg = "Please set a cube before setting parameters";
219  return false;
220  }
221  return true;
222  }
223 
224 
238  PvlGroup *CameraPointInfo::GetPointInfo(bool passed, bool allowOutside, bool allowErrors) {
239  PvlGroup *gp = new PvlGroup("GroundPoint");
240 
241  //Outputting in PVL format
242  if(!m_csvOutput)
243  {
244  gp->addKeyword(PvlKeyword("Filename"));
245  gp->addKeyword(PvlKeyword("Sample"));
246  gp->addKeyword(PvlKeyword("Line"));
247  gp->addKeyword(PvlKeyword("PixelValue"));
248  gp->addKeyword(PvlKeyword("RightAscension"));
249  gp->addKeyword(PvlKeyword("Declination"));
250  gp->addKeyword(PvlKeyword("PlanetocentricLatitude"));
251  gp->addKeyword(PvlKeyword("PlanetographicLatitude"));
252  gp->addKeyword(PvlKeyword("PositiveEast360Longitude"));
253  gp->addKeyword(PvlKeyword("PositiveEast180Longitude"));
254  gp->addKeyword(PvlKeyword("PositiveWest360Longitude"));
255  gp->addKeyword(PvlKeyword("PositiveWest180Longitude"));
256  gp->addKeyword(PvlKeyword("BodyFixedCoordinate"));
257  gp->addKeyword(PvlKeyword("LocalRadius"));
258  gp->addKeyword(PvlKeyword("SampleResolution"));
259  gp->addKeyword(PvlKeyword("LineResolution"));
260  gp->addKeyword(PvlKeyword("ObliqueDetectorResolution"));
261  gp->addKeyword(PvlKeyword("ObliquePixelResolution"));
262  gp->addKeyword(PvlKeyword("ObliqueLineResolution"));
263  gp->addKeyword(PvlKeyword("ObliqueSampleResolution"));
264  gp->addKeyword(PvlKeyword("SpacecraftPosition"));
265  gp->addKeyword(PvlKeyword("SpacecraftAzimuth"));
266  gp->addKeyword(PvlKeyword("SlantDistance"));
267  gp->addKeyword(PvlKeyword("TargetCenterDistance"));
268  gp->addKeyword(PvlKeyword("SubSpacecraftLatitude"));
269  gp->addKeyword(PvlKeyword("SubSpacecraftLongitude"));
270  gp->addKeyword(PvlKeyword("SpacecraftAltitude"));
271  gp->addKeyword(PvlKeyword("OffNadirAngle"));
272  gp->addKeyword(PvlKeyword("SubSpacecraftGroundAzimuth"));
273  gp->addKeyword(PvlKeyword("SunPosition"));
274  gp->addKeyword(PvlKeyword("SubSolarAzimuth"));
275  gp->addKeyword(PvlKeyword("SolarDistance"));
276  gp->addKeyword(PvlKeyword("SubSolarLatitude"));
277  gp->addKeyword(PvlKeyword("SubSolarLongitude"));
278  gp->addKeyword(PvlKeyword("SubSolarGroundAzimuth"));
279  gp->addKeyword(PvlKeyword("Phase"));
280  gp->addKeyword(PvlKeyword("Incidence"));
281  gp->addKeyword(PvlKeyword("Emission"));
282  gp->addKeyword(PvlKeyword("NorthAzimuth"));
283  gp->addKeyword(PvlKeyword("EphemerisTime"));
284  gp->addKeyword(PvlKeyword("UTC"));
285  gp->addKeyword(PvlKeyword("LocalSolarTime"));
286  gp->addKeyword(PvlKeyword("SolarLongitude"));
287  gp->addKeyword(PvlKeyword("LookDirectionBodyFixed"));
288  gp->addKeyword(PvlKeyword("LookDirectionJ2000"));
289  gp->addKeyword(PvlKeyword("LookDirectionCamera"));
290 
291  if (allowErrors) gp->addKeyword(PvlKeyword("Error"));
292  }
293 
294  else {
295 
296  gp->addKeyword(PvlKeyword("Filename"));
297  gp->addKeyword(PvlKeyword("Sample"));
298  gp->addKeyword(PvlKeyword("Line"));
299  gp->addKeyword(PvlKeyword("PixelValue"));
300  gp->addKeyword(PvlKeyword("RightAscension"));
301  gp->addKeyword(PvlKeyword("Declination"));
302  gp->addKeyword(PvlKeyword("PlanetocentricLatitude"));
303  gp->addKeyword(PvlKeyword("PlanetographicLatitude"));
304  gp->addKeyword(PvlKeyword("PositiveEast360Longitude"));
305  gp->addKeyword(PvlKeyword("PositiveEast180Longitude"));
306  gp->addKeyword(PvlKeyword("PositiveWest360Longitude"));
307  gp->addKeyword(PvlKeyword("PositiveWest180Longitude"));
308  gp->addKeyword(PvlKeyword("BodyFixedCoordinate"));
309  gp->addKeyword(PvlKeyword("LocalRadius"));
310  gp->addKeyword(PvlKeyword("SampleResolution"));
311  gp->addKeyword(PvlKeyword("LineResolution"));
312  gp->addKeyword(PvlKeyword("SpacecraftPosition"));
313  gp->addKeyword(PvlKeyword("SpacecraftAzimuth"));
314  gp->addKeyword(PvlKeyword("SlantDistance"));
315  gp->addKeyword(PvlKeyword("TargetCenterDistance"));
316  gp->addKeyword(PvlKeyword("SubSpacecraftLatitude"));
317  gp->addKeyword(PvlKeyword("SubSpacecraftLongitude"));
318  gp->addKeyword(PvlKeyword("SpacecraftAltitude"));
319  gp->addKeyword(PvlKeyword("OffNadirAngle"));
320  gp->addKeyword(PvlKeyword("SubSpacecraftGroundAzimuth"));
321  gp->addKeyword(PvlKeyword("SunPosition"));
322  gp->addKeyword(PvlKeyword("SubSolarAzimuth"));
323  gp->addKeyword(PvlKeyword("SolarDistance"));
324  gp->addKeyword(PvlKeyword("SubSolarLatitude"));
325  gp->addKeyword(PvlKeyword("SubSolarLongitude"));
326  gp->addKeyword(PvlKeyword("SubSolarGroundAzimuth"));
327  gp->addKeyword(PvlKeyword("Phase"));
328  gp->addKeyword(PvlKeyword("Incidence"));
329  gp->addKeyword(PvlKeyword("Emission"));
330  gp->addKeyword(PvlKeyword("NorthAzimuth"));
331  gp->addKeyword(PvlKeyword("EphemerisTime"));
332  gp->addKeyword(PvlKeyword("UTC"));
333  gp->addKeyword(PvlKeyword("LocalSolarTime"));
334  gp->addKeyword(PvlKeyword("SolarLongitude"));
335  gp->addKeyword(PvlKeyword("LookDirectionBodyFixed"));
336  gp->addKeyword(PvlKeyword("LookDirectionJ2000"));
337  gp->addKeyword(PvlKeyword("LookDirectionCamera"));
338  gp->addKeyword(PvlKeyword("ObliqueDetectorResolution"));
339  gp->addKeyword(PvlKeyword("ObliquePixelResolution"));
340  gp->addKeyword(PvlKeyword("ObliqueLineResolution"));
341  gp->addKeyword(PvlKeyword("ObliqueSampleResolution"));
342  if (allowErrors) gp->addKeyword(PvlKeyword("Error"));
343 
344 
345 
346 
347  }
348 
349 
350 
351  bool noErrors = passed;
352  QString error = "";
353  if (!m_camera->HasSurfaceIntersection()) {
354  error = "Requested position does not project in camera model; no surface intersection";
355  noErrors = false;
356  if (!allowErrors) throw IException(IException::Unknown, error, _FILEINFO_);
357  }
358  if (!m_camera->InCube() && !allowOutside) {
359  error = "Requested position does not project in camera model; not inside cube";
360  noErrors = false;
361  if (!allowErrors) throw IException(IException::Unknown, error, _FILEINFO_);
362  }
363 
364  if (!noErrors) {
365  for (int i = 0; i < gp->keywords(); i++) {
366  QString name = (*gp)[i].name();
367  // These three keywords have 3 values, so they must have 3 NULLs
368  if (name == "BodyFixedCoordinate" || name == "SpacecraftPosition" ||
369  name == "SunPosition") {
370  (*gp)[i].addValue("NULL");
371  (*gp)[i].addValue("NULL");
372  (*gp)[i].addValue("NULL");
373  }
374  else {
375  (*gp)[i].setValue("NULL");
376  }
377  }
378  // Set all keywords that still have valid information
379  gp->findKeyword("Error").setValue(error);
380  gp->findKeyword("FileName").setValue(m_currentCube->fileName());
381  gp->findKeyword("Sample").setValue(toString(m_camera->Sample()));
382  gp->findKeyword("Line").setValue(toString(m_camera->Line()));
383  gp->findKeyword("EphemerisTime").setValue(
384  toString(m_camera->time().Et()), "seconds");
385  gp->findKeyword("EphemerisTime").addComment("Time");
386  QString utc = m_camera->time().UTC();
387  gp->findKeyword("UTC").setValue(utc);
388  gp->findKeyword("SpacecraftPosition").addComment("Spacecraft Information");
389  gp->findKeyword("SunPosition").addComment("Sun Information");
390  gp->findKeyword("Phase").addComment("Illumination and Other");
391  }
392  else {
393 
394  Brick b(3, 3, 1, m_currentCube->pixelType());
395 
396  int intSamp = (int)(m_camera->Sample() + 0.5);
397  int intLine = (int)(m_camera->Line() + 0.5);
398  b.SetBasePosition(intSamp, intLine, 1);
399  m_currentCube->read(b);
400 
401  double pB[3], spB[3], sB[3];
402  QString utc;
403  double ssplat, ssplon, sslat, sslon, ocentricLat, ographicLat, pe360Lon, pw360Lon;
404 
405  {
406  gp->findKeyword("FileName").setValue(m_currentCube->fileName());
407  gp->findKeyword("Sample").setValue(toString(m_camera->Sample()));
408  gp->findKeyword("Line").setValue(toString(m_camera->Line()));
409  gp->findKeyword("PixelValue").setValue(PixelToString(b[0]));
410  gp->findKeyword("RightAscension").setValue(toString(
411  m_camera->RightAscension()), "DEGREE");
412  gp->findKeyword("Declination").setValue(toString(
413  m_camera->Declination()), "DEGREE");
414  ocentricLat = m_camera->UniversalLatitude();
415  gp->findKeyword("PlanetocentricLatitude").setValue(toString(ocentricLat), "DEGREE");
416 
417  // Convert lat to planetographic
418  Distance radii[3];
419  m_camera->radii(radii);
420  ographicLat = TProjection::ToPlanetographic(ocentricLat,
421  radii[0].kilometers(),
422  radii[2].kilometers());
423  gp->findKeyword("PlanetographicLatitude").setValue(toString(ographicLat), "DEGREE");
424 
425  pe360Lon = m_camera->UniversalLongitude();
426  gp->findKeyword("PositiveEast360Longitude").setValue(toString(pe360Lon), "DEGREE");
427 
428  //Convert lon to -180 - 180 range
429  gp->findKeyword("PositiveEast180Longitude").setValue(toString(
430  TProjection::To180Domain(pe360Lon)), "DEGREE");
431 
432  //Convert lon to positive west
433  pw360Lon = TProjection::ToPositiveWest(pe360Lon, 360);
434  gp->findKeyword("PositiveWest360Longitude").setValue(toString(pw360Lon), "DEGREE");
435 
436  //Convert pwlon to -180 - 180 range
437  gp->findKeyword("PositiveWest180Longitude").setValue(
438  toString( TProjection::To180Domain(pw360Lon)), "DEGREE");
439 
440  m_camera->Coordinate(pB);
441  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[0]), "km");
442  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[1]), "km");
443  gp->findKeyword("BodyFixedCoordinate").addValue(toString(pB[2]), "km");
444 
445  gp->findKeyword("LocalRadius").setValue(toString(
446  m_camera->LocalRadius().meters()), "meters");
447  gp->findKeyword("SampleResolution").setValue(toString(
448  m_camera->SampleResolution()), "meters/pixel");
449  gp->findKeyword("LineResolution").setValue(toString(
450  m_camera->LineResolution()), "meters/pixel");
451 
452  gp->findKeyword("ObliqueDetectorResolution").setValue(
453  toString(m_camera->ObliqueDetectorResolution()),"meters");
454  gp->findKeyword("ObliqueLineResolution").setValue(
455  toString(m_camera->ObliqueLineResolution()),"meters");
456  gp->findKeyword("ObliqueSampleResolution").setValue(
457  toString(m_camera->ObliqueSampleResolution()),"meters");
458  gp->findKeyword("ObliquePixelResolution").setValue(
459  toString(m_camera->ObliquePixelResolution()), "meters/pix");
460 
461 
462  //body fixed
463  m_camera->instrumentPosition(spB);
464  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[0]), "km");
465  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[1]), "km");
466  gp->findKeyword("SpacecraftPosition").addValue(toString(spB[2]), "km");
467  gp->findKeyword("SpacecraftPosition").addComment("Spacecraft Information");
468 
469  double spacecraftAzi = m_camera->SpacecraftAzimuth();
470  if (Isis::IsValidPixel(spacecraftAzi)) {
471  gp->findKeyword("SpacecraftAzimuth").setValue(toString(spacecraftAzi), "DEGREE");
472  }
473  else {
474  gp->findKeyword("SpacecraftAzimuth").setValue("NULL");
475  }
476 
477  gp->findKeyword("SlantDistance").setValue(toString(
478  m_camera->SlantDistance()), "km");
479  gp->findKeyword("TargetCenterDistance").setValue(toString(
480  m_camera->targetCenterDistance()), "km");
481  m_camera->subSpacecraftPoint(ssplat, ssplon);
482  gp->findKeyword("SubSpacecraftLatitude").setValue(toString(ssplat), "DEGREE");
483  gp->findKeyword("SubSpacecraftLongitude").setValue(toString(ssplon), "DEGREE");
484  gp->findKeyword("SpacecraftAltitude").setValue(toString(
485  m_camera->SpacecraftAltitude()), "km");
486  gp->findKeyword("OffNadirAngle").setValue(toString(
487  m_camera->OffNadirAngle()), "DEGREE");
488  double subspcgrdaz = m_camera->GroundAzimuth(m_camera->UniversalLatitude(),
489  m_camera->UniversalLongitude(),
490  ssplat, ssplon);
491  gp->findKeyword("SubSpacecraftGroundAzimuth").setValue(
492  toString(subspcgrdaz), "DEGREE");
493 
494  m_camera->sunPosition(sB);
495  gp->findKeyword("SunPosition").addValue(toString(sB[0]), "km");
496  gp->findKeyword("SunPosition").addValue(toString(sB[1]), "km");
497  gp->findKeyword("SunPosition").addValue(toString(sB[2]), "km");
498  gp->findKeyword("SunPosition").addComment("Sun Information");
499 
500  double sunAzi = m_camera->SunAzimuth();
501  if (Isis::IsValidPixel(sunAzi)) {
502  gp->findKeyword("SubSolarAzimuth").setValue(toString(sunAzi), "DEGREE");
503  }
504  else {
505  gp->findKeyword("SubSolarAzimuth").setValue("NULL");
506  }
507 
508  gp->findKeyword("SolarDistance").setValue(toString(
509  m_camera->SolarDistance()), "AU");
510  m_camera->subSolarPoint(sslat, sslon);
511  gp->findKeyword("SubSolarLatitude").setValue(toString(sslat), "DEGREE");
512  gp->findKeyword("SubSolarLongitude").setValue(toString(sslon), "DEGREE");
513  double subsolgrdaz = m_camera->GroundAzimuth(m_camera->UniversalLatitude(),
514  m_camera->UniversalLongitude(),
515  sslat, sslon);
516  gp->findKeyword("SubSolarGroundAzimuth").setValue(
517  toString(subsolgrdaz), "DEGREE");
518 
519  gp->findKeyword("Phase").setValue(toString(m_camera->PhaseAngle()), "DEGREE");
520  gp->findKeyword("Phase").addComment("Illumination and Other");
521  gp->findKeyword("Incidence").setValue(toString(
522  m_camera->IncidenceAngle()), "DEGREE");
523  gp->findKeyword("Emission").setValue(toString(
524  m_camera->EmissionAngle()), "DEGREE");
525 
526  double northAzi = m_camera->NorthAzimuth();
527  if (Isis::IsValidPixel(northAzi)) {
528  gp->findKeyword("NorthAzimuth").setValue(toString(northAzi), "DEGREE");
529  }
530  else {
531  gp->findKeyword("NorthAzimuth").setValue("NULL");
532  }
533 
534  gp->findKeyword("EphemerisTime").setValue(toString(
535  m_camera->time().Et()), "seconds");
536  gp->findKeyword("EphemerisTime").addComment("Time");
537  utc = m_camera->time().UTC();
538  gp->findKeyword("UTC").setValue(utc);
539  gp->findKeyword("LocalSolarTime").setValue(toString(
540  m_camera->LocalSolarTime()), "hour");
541  gp->findKeyword("SolarLongitude").setValue(toString(
542  m_camera->solarLongitude().degrees()), "DEGREE");
543 
544  std::vector<double>lookB = m_camera->lookDirectionBodyFixed();
545  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[0]), "DEGREE");
546  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[1]), "DEGREE");
547  gp->findKeyword("LookDirectionBodyFixed").addValue(toString(lookB[2]), "DEGREE");
548  gp->findKeyword("LookDirectionBodyFixed").addComment("Look Direction Unit Vectors in Body Fixed, J2000, and Camera Coordinate Systems.");
549 
550  std::vector<double>lookJ = m_camera->lookDirectionJ2000();
551  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[0]), "DEGREE");
552  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[1]), "DEGREE");
553  gp->findKeyword("LookDirectionJ2000").addValue(toString(lookJ[2]), "DEGREE");
554 
555  double lookC[3];
556  m_camera->LookDirection(lookC);
557  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[0]), "DEGREE");
558  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[1]), "DEGREE");
559  gp->findKeyword("LookDirectionCamera").addValue(toString(lookC[2]), "DEGREE");
560 
561 
562 
563  if (allowErrors) gp->findKeyword("Error").setValue("NULL");
564  }
565  }
566  return gp;
567  }
568 
569 
576  return m_camera;
577  }
578 
579 
586  return m_currentCube;
587  }
588 }
589 
Cube * cube()
Retrieves a pointer to the current cube.
CameraPointInfo()
Constructor, initializes CubeManager and other variables for use.
int keywords() const
Returns the number of keywords contained in the PvlContainer.
Definition: PvlContainer.h:101
double ToPlanetographic(const double lat) const
This method converts a planetocentric latitude to a planetographic latitude.
Camera * camera()
Retrieves a pointer to the camera.
Buffer for containing a three dimensional section of an image.
Definition: Brick.h:60
void SetBasePosition(const int start_sample, const int start_line, const int start_band)
This method is used to set the base position of the shape buffer.
Definition: Brick.h:112
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition: IString.cpp:226
virtual ~CameraPointInfo()
Destructor, deletes CubeManager object used.
void addKeyword(const PvlKeyword &keyword, const InsertMode mode=Append)
Add a keyword to the container.
bool IsValidPixel(const double d)
Returns if the input pixel is valid.
Definition: SpecialPixel.h:225
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
This error is for when a programmer made an API call that was illegal.
Definition: IException.h:154
Distance measurement, usually in meters.
Definition: Distance.h:47
void addComment(QString comment)
Add a comment to the PvlKeyword.
Definition: PvlKeyword.cpp:392
static double ToPositiveWest(const double lon, const int domain)
This method converts a longitude into the positive west direction.
static double To180Domain(const double lon)
This method converts a longitude into the -180 to 180 domain.
void SetCube(const QString &cubeFileName)
SetCube opens the given cube in a CubeManager.
PvlGroup * SetImage(const double sample, const double line, const bool outside=false, const bool error=false)
SetImage sets a sample, line image coordinate in the camera so data can be accessed.
bool CheckCube()
CheckCube checks that a cube has been set before the data for a point is accessed.
Contains multiple PvlContainers.
Definition: PvlGroup.h:57
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:38
A single keyword-value pair.
Definition: PvlKeyword.h:98
A type of error that cannot be classified as any of the other error types.
Definition: IException.h:126
PvlGroup * SetLine(const double line, const bool outside=false, const bool error=false)
SetLine sets the image coordinates to the center sample and the given line.
Class for quick re-accessing of cubes based on file name.
Definition: CubeManager.h:64
PvlKeyword & findKeyword(const QString &name)
Find a keyword with a specified name.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
QString PixelToString(double d)
Takes a double pixel value and returns the name of the pixel type as a string.
Definition: SpecialPixel.h:373
Isis exception class.
Definition: IException.h:99
virtual PvlGroup * GetPointInfo(bool passed, bool outside, bool errors)
GetPointInfo builds the PvlGroup containing all the important information derived from the Camera...
void setValue(QString value, QString unit="")
Sets new values.
Definition: PvlKeyword.cpp:171
PvlGroup * SetSample(const double sample, const bool outside=false, const bool error=false)
SetSample sets the image coordinates to the center line and the given sample.
PvlGroup * SetGround(const double latitude, const double longitude, const bool outside=false, const bool error=false)
SetGround sets a latitude, longitude grrund coordinate in the camera so data can be accessed...
PvlGroup * SetCenter(const bool outside=false, const bool error=false)
SetCenter sets the image coordinates to the center of the image.
void addValue(QString value, QString unit="")
Adds a value with units.
Definition: PvlKeyword.cpp:268
IO Handler for Isis Cubes.
Definition: Cube.h:158

U.S. Department of the Interior | U.S. Geological Survey
ISIS | Privacy & Disclaimers | Astrogeology Research Program
To contact us, please post comments and questions on the ISIS Support Center
File Modified: 07/12/2023 23:15:38