File failed to load: https://isis.astrogeology.usgs.gov/6.0.0/Object/assets/jax/output/NativeMML/config.js
Isis 3 Programmer Reference
AdvancedTrackTool.cpp
1 
7 /* SPDX-License-Identifier: CC0-1.0 */
8 
9 #include "AdvancedTrackTool.h"
10 
11 #include <QAction>
12 #include <QApplication>
13 #include <QLabel>
14 #include <QListIterator>
15 #include <QMenu>
16 #include <QMenuBar>
17 #include <QMessageBox>
18 #include <QPushButton>
19 #include <QScrollArea>
20 #include <QSize>
21 #include <QTableWidget>
22 #include <QTableWidgetItem>
23 #include <QToolBar>
24 #include <QVBoxLayout>
25 
26 #include "Angle.h"
27 #include "Camera.h"
28 #include "CameraDistortionMap.h"
29 #include "CameraFocalPlaneMap.h"
30 #include "Distance.h"
31 #include "iTime.h"
32 #include "Longitude.h"
33 #include "MdiCubeViewport.h"
34 #include "Projection.h"
35 #include "RingPlaneProjection.h"
36 #include "SerialNumber.h"
37 #include "SpecialPixel.h"
38 #include "TableMainWindow.h"
39 #include "Target.h"
40 #include "TProjection.h"
41 #include "TrackingTable.h"
42 
43 namespace Isis {
44 
45  // For mosaic tracking
46 #define FLOAT_MIN -16777215
47 
54  p_tableWin = new TableMainWindow("Advanced Tracking", parent);
56  connect(p_tableWin, SIGNAL(fileLoaded()), this, SLOT(updateID()));
57 
58  p_action = new QAction(parent);
59  p_action->setText("Tracking ...");
60  p_action->setIcon(QPixmap(toolIconDir() + "/goto.png"));
61  p_action->setShortcut(Qt::CTRL + Qt::Key_T);
62  p_action->setWhatsThis("<b>Function: </b> Opens the Advanced Tracking Tool \
63  window. This window will track sample/line positions,\
64  lat/lon positions, and many other pieces of \
65  information. All of the data in the window can be \
66  saved to a text file. <p><b>Shortcut: </b> Ctrl+T</p>");
67  connect(p_action, SIGNAL(triggered()), p_tableWin, SLOT(showTable()));
68  activate(true);
69  connect(p_action, SIGNAL(triggered()), p_tableWin, SLOT(raise()));
70  connect(p_action, SIGNAL(triggered()), p_tableWin, SLOT(syncColumns()));
71  p_tableWin->installEventFilter(this);
72 
73  // Adds each item of checkBoxItems to the table.
74  // If a tool tip is specified, we cannot skip parameters, so -1 and
75  // Qt::Horizontal are specified.
76  QList< QList<QString> >::iterator iter;
77  for (iter = checkBoxItems.begin(); iter != checkBoxItems.end(); ++iter) {
78  QList<QString> currentList = *iter;
79  QString header = currentList[0];
80  QString menuText = currentList[2];
81  QString toolTip = currentList[3];
82  bool onByDefault;
83  if (currentList[1] == QString("true")) {
84  onByDefault = true;
85  }
86  else {
87  onByDefault = false;
88  }
89 
90  if (toolTip != QString("")) {
91  p_tableWin->addToTable(onByDefault, header, menuText,
92  -1, Qt::Horizontal, toolTip);
93  }
94  else {
95  p_tableWin->addToTable(onByDefault, header, menuText);
96  }
97  }
98 
99  //This variable will keep track of how many times
100  // the user has issued the 'record' command.
101  p_id = 0;
102 
103  // Setup 10 blank rows in the table
104  for(int r = 0; r < 10; r++) {
105  p_tableWin->table()->insertRow(r);
106  for(int c = 0; c < p_tableWin->table()->columnCount(); c++) {
107  QTableWidgetItem *item = new QTableWidgetItem("");
108  p_tableWin->table()->setItem(r, c, item);
109  }
110  }
111 
112  // Create the action for recording points
113  QAction *recordAction = new QAction(parent);
114  recordAction->setShortcut(Qt::Key_R);
115  parent->addAction(recordAction);
116  connect(recordAction, SIGNAL(triggered()), this, SLOT(record()));
117  p_tableWin->setStatusMessage("To record press the R key"
118  " --- Double click on a cell to enable crtl+c (copy) and"
119  " ctrl+v (paste).");
120 
121  // Add a help menu to the menu bar
122  QMenuBar *menuBar = p_tableWin->menuBar();
123  QMenu *helpMenu = menuBar->addMenu("&Help");
124  QAction *help = new QAction(p_tableWin);
125  help->setText("&Tool Help");
126  help->setShortcut(Qt::CTRL + Qt::Key_H);
127  connect(help, SIGNAL(triggered()), this, SLOT(helpDialog()));
128  helpMenu->addAction(help);
129  p_tableWin->setMenuBar(menuBar);
130  installEventFilter(p_tableWin);
131 
132  m_showHelpOnStart = true;
133  readSettings();
134  }
135 
145  if(e->type() == QEvent::Show) {
146  activate(true);
147  if (m_showHelpOnStart) {
148  helpDialog();
149  m_showHelpOnStart = false;
150  writeSettings();
151  }
152  }
153  else if(e->type() == QEvent::Hide) {
154  activate(false);
155  }
156  return Tool::eventFilter(o, e);
157  }
158 
159 
166  menu->addAction(p_action);
167  }
168 
176  perm->addAction(p_action);
177  }
178 
186  updateRow(p);
187  }
188 
195 
196  if(cubeViewport()->isLinked()) {
197  for(int i = 0; i < p_numRows; i++) {
199  }
200  }
201  else {
203  }
204 
205  }
206 
213  MdiCubeViewport *cvp = cubeViewport();
214  if(cvp == NULL) {
216  return;
217  }
218 
219  if(!cubeViewport()->isLinked()) {
220  updateRow(cvp, p, p_tableWin->currentRow());
221  p_numRows = 1;
222  }
223  else {
224  p_numRows = 0;
225  for(int i = 0; i < (int)cubeViewportList()->size(); i++) {
226  MdiCubeViewport *d = (*(cubeViewportList()))[i];
227  if(d->isLinked()) {
229  p_numRows++;
230  }
231  }
232  }
233  }
234 
235 
244  int AdvancedTrackTool::getIndex(QString keyword) {
245  int index = 0;
246  QList< QList<QString> >::iterator iter;
247  for (iter = checkBoxItems.begin(); iter != checkBoxItems.end(); ++iter) {
248  QList<QString> currentList = *iter;
249  QList<QString> splitHeader = currentList[0].split(":");
250  QList<QString>::iterator headerIter;
251  for (headerIter = splitHeader.begin(); headerIter != splitHeader.end(); ++headerIter) {
252  QString header = *headerIter;
253  if (header.toLower() == keyword.toLower()) {
254  return index;
255  }
256  index++;
257  }
258  }
259  IString msg = "Header [" + keyword + "] not found; make sure spelling is correct";
260  throw IException(IException::Io, msg, _FILEINFO_);
261  }
262 
270  void AdvancedTrackTool::updateRow(MdiCubeViewport *cvp, QPoint p, int row) {
271  // Get the sample line position to report
272  double sample, line;
273  cvp->viewportToCube(p.x(), p.y(), sample, line);
274  int isample = int (sample + 0.5);
275  int iline = int (line + 0.5);
276 
277  /*if there are linked cvp's then we want to highlight (select)
278  the row of the active cvp.*/
279  if(cvp->isLinked()) {
280 
281  if(cvp == cubeViewport()) {
282  p_tableWin->table()->selectRow(row);
283  }
284 
285  }
286 
287 
288  // Do we need more rows?
289  if(row + 1 > p_tableWin->table()->rowCount()) {
290  p_tableWin->table()->insertRow(row);
291  for(int c = 0; c < p_tableWin->table()->columnCount(); c++) {
292  QTableWidgetItem *item = new QTableWidgetItem("");
293  p_tableWin->table()->setItem(row, c, item);
294  if(c == 0) p_tableWin->table()->scrollToItem(item);
295  }
296  }
297 
298  // Blank out the row to remove stuff left over from previous cvps
299  for(int c = 0; c < p_tableWin->table()->columnCount(); c++) {
300  p_tableWin->table()->item(row, c)->setText("");
301  }
302 
303  // Don't write anything if we are outside the cube
304  if(sample < 0.5) return;
305  if(line < 0.5) return;
306  if(sample > cvp->cubeSamples() + 0.5) return;
307  if(line > cvp->cubeLines() + 0.5) return;
308 
309  // Write cols 0-2 (id, sample, line)
310  p_tableWin->table()->item(row, getIndex("ID"))->setText(QString::number(p_id));
311  p_tableWin->table()->item(row, getIndex("Sample"))->setText(QString::number(sample));
312  p_tableWin->table()->item(row, getIndex("Line"))->setText(QString::number(line));
313 
314  // Write col 3 (band)
315  if (cvp->isGray()) {
316  p_tableWin->table()->item(row, getIndex("Band"))->setText(QString::number(cvp->grayBand()));
317  }
318  else {
319  p_tableWin->table()->item(row, getIndex("Band"))->setText(QString::number(cvp->redBand()));
320  }
321 
322  // Write out the path, filename, and serial number
323  FileName fname = FileName(cvp->cube()->fileName()).expanded();
324  QString fnamePath = fname.path();
325  QString fnameName = fname.name();
326  p_tableWin->table()->item(row, getIndex("Path"))->setText(fnamePath);
327  p_tableWin->table()->item(row, getIndex("FileName"))->setText(fnameName);
328  if (!cvp->cube()->hasGroup("Tracking") && !cvp->cube()->hasTable("InputImages")){
329  p_tableWin->table()->item(row, getIndex("Serial Number"))->setText(SerialNumber::Compose(*cvp->cube()));
330  }
331 
332  // If we are outside of the image then we are done
333  if((sample < 0.5) || (line < 0.5) ||
334  (sample > cvp->cubeSamples() + 0.5) ||
335  (line > cvp->cubeLines() + 0.5)) {
336  return;
337  }
338 
339  // Otherwise write out col 4 (Pixel value)
340  if(cvp->isGray()) {
341  QString grayPixel = PixelToString(cvp->grayPixel(isample, iline));
342  QString p = grayPixel;
343  p_tableWin->table()->item(row, getIndex("Pixel"))->setText(p);
344  }
345  else {
346  QString redPixel = PixelToString(cvp->redPixel(isample, iline));
347  QString p = redPixel;
348  p_tableWin->table()->item(row, getIndex("Pixel"))->setText(p);
349  }
350 
351  // Do we have a camera model?
352  if(cvp->camera() != NULL) {
353  if(cvp->camera()->SetImage(sample, line)) {
354  // Write columns ocentric lat/lon, and radius, only if set image succeeds
355  double lat = cvp->camera()->UniversalLatitude();
356  double lon = cvp->camera()->UniversalLongitude();
357 
358  double radius = cvp->camera()->LocalRadius().meters();
359  p_tableWin->table()->item(row, getIndex("Planetocentric Latitude"))->
360  setText(QString::number(lat, 'f', 15));
361  p_tableWin->table()->item(row, getIndex("360 Positive East Longitude"))->
362  setText(QString::number(lon, 'f', 15));
363  p_tableWin->table()->item(row, getIndex("Local Radius"))->
364  setText(QString::number(radius, 'f', 15));
365 
366  /* 180 Positive East Lon. */
367  p_tableWin->table()->item(row, getIndex("180 Positive East Longitude"))->
368  setText(QString::number(TProjection::To180Domain(lon), 'f', 15));
369 
370  // Write out the planetographic and positive west values, only if set image succeeds
371  lon = -lon;
372  while(lon < 0.0) lon += 360.0;
373  Distance radii[3];
374  cvp->camera()->radii(radii);
375  lat = TProjection::ToPlanetographic(lat, radii[0].meters(), radii[2].meters());
376  p_tableWin->table()->item(row, getIndex("Planetographic Latitude"))->
377  setText(QString::number(lat, 'f', 15));
378  p_tableWin->table()->item(row, getIndex("360 Positive West Longitude"))->
379  setText(QString::number(lon, 'f', 15));
380 
381  /*180 Positive West Lon. */
382  p_tableWin->table()->item(row, getIndex("180 Positive West Longitude"))->setText(
383  QString::number(TProjection::To180Domain(lon), 'f', 15));
384 
385  // Next write out columns, the x/y/z position of the lat/lon, only if set image succeeds
386  double pos[3];
387  cvp->camera()->Coordinate(pos);
388  p_tableWin->table()->item(row, getIndex("Point X"))->setText(QString::number(pos[0]));
389  p_tableWin->table()->item(row, getIndex("Point Y"))->setText(QString::number(pos[1]));
390  p_tableWin->table()->item(row, getIndex("Point Z"))->setText(QString::number(pos[2]));
391 
392  // Write out columns resolution, only if set image succeeds
393  double res = cvp->camera()->PixelResolution();
394  if (res != -1.0) {
395  p_tableWin->table()->item(row, getIndex("Resolution"))->setText(QString::number(res));
396  }
397  else {
398  p_tableWin->table()->item(row, getIndex("Resolution"))->setText("");
399  }
400 
401  // Write out columns, oblique pixel resolution, only if set image succeeds
402  double obliquePRes = cvp->camera()->ObliquePixelResolution();
403  if (obliquePRes != Isis::Null) {
404  p_tableWin->table()->item(row, getIndex("Oblique Pixel Resolution"))->
405  setText(QString::number(obliquePRes));
406  }
407  else {
408  p_tableWin->table()->item(row, getIndex("Oblique Pixel Resolution"))->setText("");
409  }
410 
411  // Write out columns photometric angle values, only if set image succeeds
412  double phase = cvp->camera()->PhaseAngle();
413  p_tableWin->table()->item(row, getIndex("Phase"))->setText(QString::number(phase));
414  double incidence = cvp->camera()->IncidenceAngle();
415  p_tableWin->table()->item(row, getIndex("Incidence"))->setText(QString::number(incidence));
416  double emission = cvp->camera()->EmissionAngle();
417  p_tableWin->table()->item(row, getIndex("Emission"))->setText(QString::number(emission));
418 
419  // Write out columns local incidence and emission, only if set image
420  // succeeds. This might fail if there are holes in the DEM.
421  // Calculates the angles local to the slope for the DEMs, compare against
422  // the incidence and emission angles calculated for the sphere
423  Angle phaseAngle, incidenceAngle, emissionAngle;
424  bool bSuccess = false;
425  cvp->camera()->LocalPhotometricAngles(phaseAngle, incidenceAngle, emissionAngle, bSuccess);
426  if(bSuccess) {
427  p_tableWin->table()->item(row, getIndex("LocalIncidence"))->
428  setText(QString::number(incidenceAngle.degrees()));
429  p_tableWin->table()->item(row, getIndex("LocalEmission"))->
430  setText(QString::number(emissionAngle.degrees()));
431  }
432  else {
433  p_tableWin->table()->item(row, getIndex("LocalIncidence"))->setText("");
434  p_tableWin->table()->item(row, getIndex("LocalEmission"))->setText("");
435  }
436 
437  // If set image succeeds, write out columns north azimuth, sun azimuth, solar longitude
438  // north azimuth is meaningless for ring plane projections
439  double northAzi = cvp->camera()->NorthAzimuth();
440  if (cvp->camera()->target()->shape()->name() != "Plane"
441  && Isis::IsValidPixel(northAzi)) {
442  p_tableWin->table()->item(row, getIndex("North Azimuth"))->
443  setText(QString::number(northAzi));
444  }
445  else { // north azimuth is meaningless for ring plane projections
446  p_tableWin->table()->item(row, getIndex("North Azimuth"))->setText("");
447  }
448 
449  double sunAzi = cvp->camera()->SunAzimuth();
450  if (Isis::IsValidPixel(sunAzi)) {
451  p_tableWin->table()->item(row, getIndex("Sun Azimuth"))->
452  setText(QString::number(sunAzi));
453  }
454  else { // sun azimuth is null
455  p_tableWin->table()->item(row, getIndex("Sun Azimuth"))->setText("");
456  }
457 
458  double spacecraftAzi = cvp->camera()->SpacecraftAzimuth();
459  if (Isis::IsValidPixel(spacecraftAzi)) {
460  p_tableWin->table()->item(row, getIndex("Spacecraft Azimuth"))->
461  setText(QString::number(spacecraftAzi));
462  }
463  else { // spacecraft azimuth is null
464  p_tableWin->table()->item(row, getIndex("Spacecraft Azimuth"))->setText("");
465  }
466 
467  // Write out columns solar lon, slant distance, local solar time
468  double solarLon = cvp->camera()->solarLongitude().degrees();
469  p_tableWin->table()->item(row, getIndex("Solar Longitude"))->
470  setText(QString::number(solarLon));
471  double slantDistance = cvp->camera()->SlantDistance();
472  p_tableWin->table()->item(row, getIndex("Slant Distance"))->
473  setText(QString::number(slantDistance));
474  double lst = cvp->camera()->LocalSolarTime();
475  p_tableWin->table()->item(row, getIndex("Local Solar Time"))->
476  setText(QString::number(lst));
477  } // end if set image succeeds
478 
479  // Always write out the x/y/z of the undistorted focal plane
480  CameraDistortionMap *distortedMap = cvp->camera()->DistortionMap();
481  double undistortedFocalPlaneX = distortedMap->UndistortedFocalPlaneX();
482  p_tableWin->table()->item(row, getIndex("Undistorted Focal X"))->
483  setText(QString::number(undistortedFocalPlaneX));
484  double undistortedFocalPlaneY = distortedMap->UndistortedFocalPlaneY();
485  p_tableWin->table()->item(row, getIndex("Undistorted Focal Y"))->
486  setText(QString::number(undistortedFocalPlaneY));
487  double undistortedFocalPlaneZ = distortedMap->UndistortedFocalPlaneZ();
488  p_tableWin->table()->item(row, getIndex("Undistorted Focal Z"))->
489  setText(QString::number(undistortedFocalPlaneZ));
490 
491  // Always write out the x/y of the distorted focal plane
492  CameraFocalPlaneMap *focalPlaneMap = cvp->camera()->FocalPlaneMap();
493  double distortedFocalPlaneX = focalPlaneMap->FocalPlaneX();
494  p_tableWin->table()->item(row, getIndex("Focal Plane X"))->
495  setText(QString::number(distortedFocalPlaneX));
496  double distortedFocalPlaneY = focalPlaneMap->FocalPlaneY();
497  p_tableWin->table()->item(row, getIndex("Focal Plane Y"))->
498  setText(QString::number(distortedFocalPlaneY));
499 
500  // Always write out columns ra/dec, regardless of whether set image succeeds
501  double ra = cvp->camera()->RightAscension();
502  p_tableWin->table()->item(row, getIndex("Right Ascension"))->setText(QString::number(ra));
503  double dec = cvp->camera()->Declination();
504  p_tableWin->table()->item(row, getIndex("Declination"))->setText(QString::number(dec));
505 
506  // Always write out columns et and utc, regardless of whether set image succeeds
507  iTime time(cvp->camera()->time());
508  p_tableWin->table()->item(row, getIndex("Ephemeris Time"))->
509  setText(QString::number(time.Et(), 'f', 15));
510  QString time_utc = time.UTC();
511  p_tableWin->table()->item(row, getIndex("UTC"))->setText(time_utc);
512 
513  // Always out columns spacecraft position, regardless of whether set image succeeds
514  double pos[3];
515  cvp->camera()->instrumentPosition(pos);
516  p_tableWin->table()->item(row, getIndex("Spacecraft X"))->setText(QString::number(pos[0]));
517  p_tableWin->table()->item(row, getIndex("Spacecraft Y"))->setText(QString::number(pos[1]));
518  p_tableWin->table()->item(row, getIndex("Spacecraft Z"))->setText(QString::number(pos[2]));
519  }
520 
521  else if (cvp->projection() != NULL) {
522  // Determine the projection type
524 
525  if (cvp->projection()->SetWorld(sample, line)) {
526  if (projType == Projection::Triaxial) {
527  TProjection *tproj = (TProjection *) cvp->projection();
528  double lat = tproj->UniversalLatitude();
529  double lon = tproj->UniversalLongitude();
530 
531  double glat = tproj->ToPlanetographic(lat);
532  double wlon = -lon;
533  while(wlon < 0.0) wlon += 360.0;
534  if (tproj->IsSky()) {
535  lon = tproj->Longitude();
536  p_tableWin->table()->item(row, getIndex("Right Ascension"))->
537  setText(QString::number(lon, 'f', 15));
538  p_tableWin->table()->item(row, getIndex("Declination"))->
539  setText(QString::number(lat, 'f', 15));
540  }
541  else {
542  double radius = tproj->LocalRadius();
543  p_tableWin->table()->item(row, getIndex("Planetocentric Latitude"))->
544  setText(QString::number(lat, 'f', 15));
545  p_tableWin->table()->item(row, getIndex("Planetographic Latitude"))->
546  setText(QString::number(glat, 'f', 15));
547  p_tableWin->table()->item(row, getIndex("360 Positive East Longitude"))->
548  setText(QString::number(lon, 'f', 15));
549  p_tableWin->table()->item(row, getIndex("180 Positive East Longitude"))->
550  setText(QString::number(TProjection::To180Domain(lon), 'f', 15));
551  p_tableWin->table()->item(row, getIndex("360 Positive West Longitude"))->
552  setText(QString::number(wlon, 'f', 15));
553  p_tableWin->table()->item(row, getIndex("180 Positive East Longitude"))->
554  setText(QString::number(TProjection::To180Domain(wlon), 'f', 15));
555  p_tableWin->table()->item(row, getIndex("Local Radius"))->setText(QString::number(radius, 'f', 15));
556  }
557  }
558  else { // RingPlane
560  double lat = rproj->UniversalRingRadius();
561  double lon = rproj->UniversalRingLongitude();
562 
563  double wlon = -lon;
564  while(wlon < 0.0) wlon += 360.0;
565  double radius = lat;
566  p_tableWin->table()->item(row, getIndex("Planetocentric Latitude"))->setText("0.0");
567  p_tableWin->table()->item(row, getIndex("Planetographic Latitude"))->setText("0.0");
568  p_tableWin->table()->item(row, getIndex("360 Positive East Longitude"))->
569  setText(QString::number(lon, 'f', 15));
570  p_tableWin->table()->item(row, getIndex("180 Positive East Longitude"))->
571  setText(QString::number(RingPlaneProjection::To180Domain(lon), 'f', 15));
572  p_tableWin->table()->item(row, getIndex("360 Positive West Longitude"))->
573  setText(QString::number(wlon, 'f', 15));
574  p_tableWin->table()->item(row, getIndex("180 Positive West Longitude"))->
575  setText(QString::number(RingPlaneProjection::To180Domain(wlon), 'f', 15));
576  p_tableWin->table()->item(row, getIndex("Local Radius"))->
577  setText(QString::number(radius, 'f', 15));
578  }
579  }
580  }
581 
582  //If there is a projection add the Projected X and Y coords to the table
583  if(cvp->projection() != NULL) {
584  if(cvp->projection()->SetWorld(sample, line)) {
585  double projX = cvp->projection()->XCoord();
586  double projY = cvp->projection()->YCoord();
587  p_tableWin->table()->item(row, getIndex("Projected X"))->
588  setText(QString::number(projX, 'f', 15));
589  p_tableWin->table()->item(row, getIndex("Projected Y"))->
590  setText(QString::number(projY, 'f', 15));
591  }
592  }
593 
594  // Track the Mosaic Origin - Index (Zero based) and FileName
595  if (cvp->cube()->hasTable("InputImages") || cvp->cube()->hasGroup("Tracking")) {
596  int iMosaicOrigin = -1;
597  QString sSrcFileName = "";
598  QString sSrcSerialNum = "";
599  TrackMosaicOrigin(cvp, iline, isample, iMosaicOrigin, sSrcFileName, sSrcSerialNum);
600  p_tableWin->table()->item(row, getIndex("Track Mosaic Index"))->
601  setText(QString::number(iMosaicOrigin));
602  p_tableWin->table()->item(row, getIndex("Track Mosaic FileName"))->
603  setText(QString(sSrcFileName));
604  p_tableWin->table()->item(row, getIndex("Track Mosaic Serial Number"))->
605  setText(QString(sSrcSerialNum));
606  }
607  }
608 
609 
627  int piSample, int &piOrigin, QString &psSrcFileName,
628  QString &psSrcSerialNum) {
629  try {
630  Cube *cCube = cvp->cube();
631  int iTrackBand = -1;
632 
633  // This is a mosaic in the new format or the external tracking cube itself
634  if(cCube->hasGroup("Tracking") ||
635  (cCube->hasTable(trackingTableName) && cCube->bandCount() == 1)) {
636  Cube *trackingCube;
637  if(cCube->hasGroup("Tracking")) {
638  trackingCube = cvp->trackingCube();
639  }
640  else {
641  trackingCube = cCube;
642  }
643 
644  // Read the cube DN value from TRACKING cube at location (piLine, piSample)
645  Portal trackingPortal(trackingCube->sampleCount(), 1, trackingCube->pixelType());
646  trackingPortal.SetPosition(piSample, piLine, 1);
647  trackingCube->read(trackingPortal);
648 
649  unsigned int currentPixel = trackingPortal[0];
650  if (currentPixel != NULLUI4) { // If from an image
651  Table table = trackingCube->readTable(trackingTableName); // trackingTableName from TrackingTable
652  TrackingTable trackingTable(table);
653 
654  FileName trackingFileName = trackingTable.pixelToFileName(currentPixel);
655  psSrcFileName = trackingFileName.name();
656  psSrcSerialNum = trackingTable.pixelToSN(currentPixel);
657  piOrigin = trackingTable.fileNameToIndex(trackingFileName, psSrcSerialNum);
658  }
659  }
660  // Backwards compatability. Have this tool work with attached TRACKING bands
661  else if(cCube->hasTable(trackingTableName)) {
662  Pvl *cPvl = cCube->label();
663  PvlObject cObjIsisCube = cPvl->findObject("IsisCube");
664  PvlGroup cGrpBandBin = cObjIsisCube.findGroup("BandBin");
665  for(int i = 0; i < cGrpBandBin.keywords(); i++) {
666  PvlKeyword &cKeyTrackBand = cGrpBandBin[i];
667  for(int j = 0; j < cKeyTrackBand.size(); j++) {
668  if(cKeyTrackBand[j] == "TRACKING") {
669  iTrackBand = j;
670  break;
671  }
672  }
673  }
674 
675  if(iTrackBand > 0 && iTrackBand <= cCube->bandCount()) {
676  Portal cOrgPortal(cCube->sampleCount(), 1,
677  cCube->pixelType());
678  cOrgPortal.SetPosition(piSample, piLine, iTrackBand + 1); // 1 based
679  cCube->read(cOrgPortal);
680  piOrigin = (int)cOrgPortal[0];
681  switch(SizeOf(cCube->pixelType())) {
682  case 1:
683  piOrigin -= VALID_MIN1;
684  break;
685 
686  case 2:
687  piOrigin -= VALID_MIN2;
688  break;
689 
690  case 4:
691  piOrigin -= FLOAT_MIN;
692  break;
693  }
694 
695  // Get the input file name and serial number
696  Table cFileTable = cCube->readTable(trackingTableName);
697  int iRecs = cFileTable.Records();
698  if(piOrigin >= 0 && piOrigin < iRecs) {
699  psSrcFileName = QString(cFileTable[piOrigin][0]);
700  psSrcSerialNum = QString(cFileTable[piOrigin][1]);
701  }
702  }
703  }
704 
705  }
706  catch (IException &e) {
707  // This gets called too frequently to raise a warning; so, suppress the error
708  // and return invalid.
709  piOrigin = -1;
710  }
711 
712  if (piOrigin == -1) { // If not from an image, display N/A
713  psSrcFileName = "N/A";
714  psSrcSerialNum = "N/A";
715  }
716  }
717 
718 
725 
727 
728  QVBoxLayout *dialogLayout = new QVBoxLayout;
729  helpDialog->setLayout(dialogLayout);
730  QLabel *dialogTitle = new QLabel("<h3>Advanced Tracking Tool</h3>");
731  dialogLayout->addWidget(dialogTitle);
732 
733  QTabWidget *tabArea = new QTabWidget;
734  dialogLayout->addWidget(tabArea);
735 
736  QScrollArea *recordTab = new QScrollArea;
737  QWidget *recordContainer = new QWidget;
738  QVBoxLayout *recordLayout = new QVBoxLayout;
739  recordContainer->setLayout(recordLayout);
740  QLabel *recordText = new QLabel("To record, click on the viewport of interest and"
741  " press (r) while the mouse is hovering over the image.");
742  recordText->setWordWrap(true);
743  recordLayout->addWidget(recordText);
744  recordTab->setWidget(recordContainer);
745 
746  QScrollArea *helpTab = new QScrollArea;
747  QWidget *helpContainer = new QWidget;
748  QVBoxLayout *helpLayout = new QVBoxLayout;
749  helpContainer->setLayout(helpLayout);
750  QLabel *helpText = new QLabel("In order to use <i>ctrl+c</i> to copy and <i>ctrl+v</i> to"
751  " paste, you need to double click on the cell you are copying"
752  " from (the text should be highlighted). Then double click on"
753  " the cell you are pasting to (you should see a cursor if the"
754  " cell is blank). When a cell is in this editing mode, most"
755  " keyboard shortcuts work.");
756  helpText->setWordWrap(true);
757  recordText->setWordWrap(true);
758  helpLayout->addWidget(helpText);
759  helpTab->setWidget(helpContainer);
760 
761  tabArea->addTab(recordTab, "Record");
762  tabArea->addTab(helpTab, "Table Help");
763 
764  QPushButton *okButton = new QPushButton("OK");
765  dialogLayout->addStretch();
766  dialogLayout->addWidget(okButton);
767  helpDialog->show();
768  connect(okButton, SIGNAL(clicked()), helpDialog, SLOT(accept()));
769  }
770 
771 
777  if(p_tableWin->table()->isHidden()) return;
778  if(p_tableWin->table()->item(p_tableWin->currentRow(), 0)->text() == "") return;
779 
780  int row = 0;
783  while(p_tableWin->currentRow() >= p_tableWin->table()->rowCount()) {
784 
785  row = p_tableWin->table()->rowCount();
786 
787  p_tableWin->table()->insertRow(row);
788  for(int c = 0; c < p_tableWin->table()->columnCount(); c++) {
789  QTableWidgetItem *item = new QTableWidgetItem("");
790  p_tableWin->table()->setItem(row, c, item);
791  }
792  }
793 
794  QApplication::sendPostedEvents(p_tableWin->table(), 0);
795  p_tableWin->table()->scrollToItem(p_tableWin->table()->item(p_tableWin->currentRow(), 0),
796  QAbstractItemView::PositionAtBottom);
797 
798  //Keep track of number times user presses 'R' (record command)
799  p_id = p_tableWin->table()->item(p_tableWin->currentRow() - 1, 0)->text().toInt() + 1;
800  }
801 
802 
821  void AdvancedTrackTool::record(QPoint p) {
823  updateRow(p);
824  record();
825  }
826 
827 
833  //Check if the current row is 0
834  if(p_tableWin->currentRow() == 0)
835  p_id = 0;
836  else
837  p_id = p_tableWin->table()->item(p_tableWin->currentRow() - 1, getIndex("ID"))->text().toInt() + 1;
838  }
839 
840 
847 
848  QSettings settings(settingsFilePath() , QSettings::NativeFormat);
849 
850  m_showHelpOnStart = settings.value("showHelpOnStart", m_showHelpOnStart).toBool();
851  }
852 
853 
859 
860  QSettings settings(settingsFilePath(), QSettings::NativeFormat);
861 
862  settings.setValue("showHelpOnStart", m_showHelpOnStart);
863  }
864 
865 
872 
873  if (QApplication::applicationName() == "") {
874  throw IException(IException::Programmer, "You must set QApplication's "
875  "application name before using the Isis::MainWindow class. Window "
876  "state and geometry can not be saved and restored", _FILEINFO_);
877  }
878 
879  FileName config(FileName("$HOME/.Isis/" + QApplication::applicationName() + "/").path() + "/" +
880  "advancedTrackTool.config");
881 
882  return config.expanded();
883  }
884 }
Isis::CubeViewport::cubeLines
int cubeLines() const
Return the number of lines in the cube.
Definition: CubeViewport.cpp:439
Isis::PixelToString
QString PixelToString(double d)
Takes a double pixel value and returns the name of the pixel type as a string.
Definition: SpecialPixel.h:371
Isis::Spice::radii
void radii(Distance r[3]) const
Returns the radii of the body in km.
Definition: Spice.cpp:930
Isis::SizeOf
int SizeOf(Isis::PixelType pixelType)
Returns the number of bytes of the specified PixelType.
Definition: PixelType.h:46
Isis::Spice::instrumentPosition
void instrumentPosition(double p[3]) const
Returns the spacecraft position in body-fixed frame km units.
Definition: Spice.cpp:822
Isis::TProjection::LocalRadius
double LocalRadius(double lat) const
This method returns the local radius in meters at the specified latitude position.
Definition: TProjection.cpp:326
Isis::Spice::time
iTime time() const
Returns the ephemeris time in seconds which was used to obtain the spacecraft and sun positions.
Definition: Spice.cpp:884
Isis::AdvancedTrackTool::p_tableWin
TableMainWindow * p_tableWin
The table window.
Definition: AdvancedTrackTool.h:185
Isis::MdiCubeViewport
Cube display widget for certain Isis MDI applications.
Definition: MdiCubeViewport.h:39
QWidget
Isis::AdvancedTrackTool::mouseMove
virtual void mouseMove(QPoint p)
This method is called when the mouse has moved across the viewport and updates the row accordingly.
Definition: AdvancedTrackTool.cpp:185
Isis::Target::shape
ShapeModel * shape() const
Return the shape.
Definition: Target.cpp:655
Isis::PvlObject::findGroup
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes.
Definition: PvlObject.h:129
Isis::Cube::fileName
virtual QString fileName() const
Returns the opened cube's filename.
Definition: Cube.cpp:1563
Isis::IException::Io
@ Io
A type of error that occurred when performing an actual I/O operation.
Definition: IException.h:155
Isis::CameraFocalPlaneMap::FocalPlaneY
double FocalPlaneY() const
Definition: CameraFocalPlaneMap.cpp:247
Isis::PvlObject
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:61
Isis::TableMainWindow::setCurrentIndex
void setCurrentIndex(int currentIndex)
Sets the current index to currentIndex.
Definition: TableMainWindow.cpp:906
Isis::RingPlaneProjection::UniversalRingLongitude
double UniversalRingLongitude()
This returns a universal ring longitude (clockwise in 0 to 360 domain).
Definition: RingPlaneProjection.cpp:589
Isis::TableMainWindow::table
QTableWidget * table() const
Returns the table.
Definition: TableMainWindow.h:70
Isis::AdvancedTrackTool::p_id
int p_id
The record id.
Definition: AdvancedTrackTool.h:184
Isis::Portal
Buffer for containing a two dimensional section of an image.
Definition: Portal.h:36
Isis::Camera::ObliquePixelResolution
virtual double ObliquePixelResolution()
Returns the oblique pixel resolution at the current position in meters/pixel.
Definition: Camera.cpp:685
Isis::PvlKeyword
A single keyword-value pair.
Definition: PvlKeyword.h:82
QList
This is free and unencumbered software released into the public domain.
Definition: BoxcarCachingAlgorithm.h:13
Isis::TProjection::UniversalLatitude
virtual double UniversalLatitude()
This returns a universal latitude (planetocentric).
Definition: TProjection.cpp:908
Isis::Tool::cubeViewportList
CubeViewportList * cubeViewportList() const
Return the list of cubeviewports.
Definition: Tool.cpp:390
Isis::Camera::SetImage
virtual bool SetImage(const double sample, const double line)
Sets the sample/line values of the image to get the lat/lon values.
Definition: Camera.cpp:154
Isis::FileName::name
QString name() const
Returns the name of the file excluding the path and the attributes in the file name.
Definition: FileName.cpp:162
Isis::iTime
Parse and return pieces of a time string.
Definition: iTime.h:65
Isis::Cube::read
void read(Blob &blob, const std::vector< PvlKeyword > keywords=std::vector< PvlKeyword >()) const
This method will read data from the specified Blob object.
Definition: Cube.cpp:807
Isis::Tool
Base class for the Qisis tools.
Definition: Tool.h:67
Isis::FileName
File name manipulation and expansion.
Definition: FileName.h:100
Isis::Cube::readTable
Table readTable(const QString &name)
Read a Table from the cube.
Definition: Cube.cpp:952
Isis::CubeViewport::isGray
bool isGray() const
Definition: CubeViewport.h:189
Isis::CameraDistortionMap::UndistortedFocalPlaneX
double UndistortedFocalPlaneX() const
Gets the x-value in the undistorted focal plane coordinate system.
Definition: CameraDistortionMap.cpp:237
QMenu
Isis::Tool::toolIconDir
QString toolIconDir() const
returns the path to the icon directory.
Definition: Tool.h:113
Isis::AdvancedTrackTool::updateID
void updateID()
This method updates the record ID.
Definition: AdvancedTrackTool.cpp:832
Isis::AdvancedTrackTool::m_showHelpOnStart
bool m_showHelpOnStart
True to show dialog When tool is started.
Definition: AdvancedTrackTool.h:186
Isis::SerialNumber::Compose
static QString Compose(Pvl &label, bool def2filename=false)
Compose a SerialNumber from a PVL.
Definition: SerialNumber.cpp:38
Isis::Sensor::Declination
virtual double Declination()
Returns the declination angle (sky latitude).
Definition: Sensor.cpp:574
Isis::TProjection::Longitude
virtual double Longitude() const
This returns a longitude with correct longitude direction and domain as specified in the label object...
Definition: TProjection.cpp:823
Isis::ShapeModel::name
QString name() const
Gets the shape name.
Definition: ShapeModel.cpp:543
Isis::AdvancedTrackTool::settingsFilePath
QString settingsFilePath() const
Generate the correct path for the config file.
Definition: AdvancedTrackTool.cpp:871
Isis::AdvancedTrackTool::p_numRows
int p_numRows
The number of rows in the table.
Definition: AdvancedTrackTool.h:183
Isis::Projection::projectionType
ProjectionType projectionType() const
Returns an enum value for the projection type.
Definition: Projection.cpp:198
Isis::CubeViewport::grayPixel
double grayPixel(int sample, int line)
Gets the gray pixel.
Definition: CubeViewport.cpp:1654
Isis::Pvl
Container for cube-like labels.
Definition: Pvl.h:119
Isis::Camera::DistortionMap
CameraDistortionMap * DistortionMap()
Returns a pointer to the CameraDistortionMap object.
Definition: Camera.cpp:2826
Isis::CameraDistortionMap::UndistortedFocalPlaneZ
double UndistortedFocalPlaneZ() const
Gets the z-value in the undistorted focal plane coordinate system.
Definition: CameraDistortionMap.cpp:260
Isis::Sensor::LocalSolarTime
double LocalSolarTime()
Return the local solar time in hours.
Definition: Sensor.cpp:660
Isis::AdvancedTrackTool::addToPermanent
void addToPermanent(QToolBar *perm)
This method adds the action to bring up the track tool to the permanent tool bar.
Definition: AdvancedTrackTool.cpp:175
QToolBar
Isis::Sensor::RightAscension
virtual double RightAscension()
Returns the right ascension angle (sky longitude).
Definition: Sensor.cpp:561
Isis::Spice::solarLongitude
virtual Longitude solarLongitude()
Returns the solar longitude.
Definition: Spice.cpp:1509
Isis::TableMainWindow::addToTable
void addToTable(bool setOn, const QString &heading, const QString &menuText="", int insertAt=-1, Qt::Orientation o=Qt::Horizontal, QString toolTip="")
Adds a new column to the table when a new curve is added to the plot.
Definition: TableMainWindow.cpp:208
Isis::CubeViewport::camera
Camera * camera() const
Definition: CubeViewport.h:348
Isis::AdvancedTrackTool::writeSettings
void writeSettings()
Write out this tool's preserved state between runs.
Definition: AdvancedTrackTool.cpp:858
Isis::Distance
Distance measurement, usually in meters.
Definition: Distance.h:34
Isis::Spice::target
virtual Target * target() const
Returns a pointer to the target object.
Definition: Spice.cpp:1368
Isis::TableMainWindow::setTrackListItems
void setTrackListItems(bool track=false)
If this property is true, the class will keep track of the checked/unchecked items in the dock area w...
Definition: TableMainWindow.cpp:875
Isis::AdvancedTrackTool::readSettings
void readSettings()
Read this tool's preserved state.
Definition: AdvancedTrackTool.cpp:846
Isis::TableMainWindow::showTable
void showTable()
This method checks to see if the table has been created.
Definition: TableMainWindow.cpp:383
Isis::AdvancedTrackTool::addTo
void addTo(QMenu *menu)
This method adds the action to bring up the track tool to the menu.
Definition: AdvancedTrackTool.cpp:165
Isis::TableMainWindow::clearRow
void clearRow(int row)
This method clears the text of the given row.
Definition: TableMainWindow.cpp:452
Isis::Camera::SpacecraftAzimuth
double SpacecraftAzimuth()
Return the Spacecraft Azimuth.
Definition: Camera.cpp:1934
Isis::TableMainWindow::currentIndex
int currentIndex() const
Returns the current index.
Definition: TableMainWindow.h:104
Isis::FileName::expanded
QString expanded() const
Returns a QString of the full file name including the file path, excluding the attributes.
Definition: FileName.cpp:196
Isis::iTime::Et
double Et() const
Returns the ephemeris time (TDB) representation of the time as a double.
Definition: iTime.h:126
Isis::RingPlaneProjection
Base class for Map Projections of plane shapes.
Definition: RingPlaneProjection.h:147
Isis::CubeViewport::grayBand
int grayBand() const
Definition: CubeViewport.h:194
Isis::PvlGroup
Contains multiple PvlContainers.
Definition: PvlGroup.h:41
Isis::Sensor::UniversalLongitude
virtual double UniversalLongitude() const
Returns the positive east, 0-360 domain longitude, in degrees, at the surface intersection point in t...
Definition: Sensor.cpp:233
Isis::AdvancedTrackTool::AdvancedTrackTool
AdvancedTrackTool(QWidget *parent)
Constructs an AdvancedTrackTool object.
Definition: AdvancedTrackTool.cpp:53
Isis::Cube::hasGroup
bool hasGroup(const QString &group) const
Return if the cube has a specified group in the labels.
Definition: Cube.cpp:2004
Isis::TProjection
Base class for Map TProjections.
Definition: TProjection.h:166
Isis::CubeViewport::redPixel
double redPixel(int sample, int line)
Gets the red pixel.
Definition: CubeViewport.cpp:1606
Isis::CubeViewport::trackingCube
Cube * trackingCube() const
Definition: CubeViewport.h:358
Isis::Table
Class for storing Table blobs information.
Definition: Table.h:61
Isis::MdiCubeViewport::isLinked
bool isLinked() const
Is the viewport linked with other viewports.
Definition: MdiCubeViewport.h:50
Isis::TableMainWindow::setCurrentRow
void setCurrentRow(int row)
Sets the current row to row.
Definition: TableMainWindow.cpp:896
Isis::PvlObject::findObject
PvlObjectIterator findObject(const QString &name, PvlObjectIterator beg, PvlObjectIterator end)
Find the index of object with a specified name, between two indexes.
Definition: PvlObject.h:274
Isis::Cube::sampleCount
int sampleCount() const
Definition: Cube.cpp:1807
Isis::CameraDistortionMap
Distort/undistort focal plane coordinates.
Definition: CameraDistortionMap.h:41
Isis::TrackingTable
Table to store tracking information for a mosaic.
Definition: TrackingTable.h:37
Isis::Camera::NorthAzimuth
double NorthAzimuth()
Returns the North Azimuth.
Definition: Camera.cpp:1893
Isis::Cube
IO Handler for Isis Cubes.
Definition: Cube.h:167
Isis::TableMainWindow
a subclass of the qisis mainwindow, tablemainwindow handles all of the table tasks.
Definition: TableMainWindow.h:57
Isis::RingPlaneProjection::To180Domain
static double To180Domain(const double lon)
This method converts a ring longitude into the -180 to 180 domain.
Definition: RingPlaneProjection.cpp:352
Isis::IException
Isis exception class.
Definition: IException.h:91
Isis::CubeViewport::cubeSamples
int cubeSamples() const
Return the number of samples in the cube.
Definition: CubeViewport.cpp:433
Isis::TrackingTable::pixelToFileName
FileName pixelToFileName(unsigned int pixel)
Returns the FileName that corresponds to a pixel value.
Definition: TrackingTable.cpp:120
Isis::Cube::bandCount
virtual int bandCount() const
Returns the number of virtual bands for the cube.
Definition: Cube.cpp:1410
Isis::Angle
Defines an angle and provides unit conversions.
Definition: Angle.h:45
Isis::Projection::SetWorld
virtual bool SetWorld(const double x, const double y)
This method is used to set a world coordinate.
Definition: Projection.cpp:497
Isis::Sensor::IncidenceAngle
virtual double IncidenceAngle() const
Returns the incidence angle in degrees.
Definition: Sensor.cpp:335
Isis::TrackingTable::fileNameToIndex
int fileNameToIndex(FileName file, QString serialNumber)
Returns the index of the filename/serialnumber combination.
Definition: TrackingTable.cpp:200
Isis::TProjection::To180Domain
static double To180Domain(const double lon)
This method converts a longitude into the -180 to 180 domain.
Definition: TProjection.cpp:657
Isis::Null
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:95
Isis::AdvancedTrackTool::mouseLeave
virtual void mouseLeave()
This method is called when the mouse leaves the viewport and clears any rows accordingly.
Definition: AdvancedTrackTool.cpp:194
Isis::Camera::FocalPlaneMap
CameraFocalPlaneMap * FocalPlaneMap()
Returns a pointer to the CameraFocalPlaneMap object.
Definition: Camera.cpp:2836
Isis::IException::Programmer
@ Programmer
This error is for when a programmer made an API call that was illegal.
Definition: IException.h:146
Isis::CameraFocalPlaneMap::FocalPlaneX
double FocalPlaneX() const
Definition: CameraFocalPlaneMap.cpp:239
Isis::AdvancedTrackTool::p_action
QAction * p_action
Action to bring up the track tool.
Definition: AdvancedTrackTool.h:182
Isis::Cube::hasTable
bool hasTable(const QString &name)
Check to see if the cube contains a pvl table by the provided name.
Definition: Cube.cpp:2043
Isis::Cube::pixelType
PixelType pixelType() const
Definition: Cube.cpp:1758
Isis::CameraFocalPlaneMap
Convert between distorted focal plane and detector coordinates.
Definition: CameraFocalPlaneMap.h:85
Isis::IsValidPixel
bool IsValidPixel(const double d)
Returns if the input pixel is valid.
Definition: SpecialPixel.h:223
Isis::Tool::activate
void activate(bool)
Activates the tool.
Definition: Tool.cpp:131
Isis::AdvancedTrackTool::updateRow
void updateRow(QPoint p)
This method updates the row with data from the point given.
Definition: AdvancedTrackTool.cpp:212
Isis::Camera::PixelResolution
virtual double PixelResolution()
Returns the pixel resolution at the current position in meters/pixel.
Definition: Camera.cpp:670
Isis::TableMainWindow::setStatusMessage
void setStatusMessage(QString message)
sets the status message in the lower lefthand corner of the window.
Definition: TableMainWindow.cpp:191
Isis::Cube::label
Pvl * label() const
Returns a pointer to the IsisLabel object associated with the cube.
Definition: Cube.cpp:1701
Isis::TrackingTable::pixelToSN
QString pixelToSN(unsigned int pixel)
Returns the serial number that corresponds to a pixel value.
Definition: TrackingTable.cpp:170
Isis::TProjection::UniversalLongitude
virtual double UniversalLongitude()
This returns a universal longitude (positive east in 0 to 360 domain).
Definition: TProjection.cpp:922
Isis::Distance::meters
double meters() const
Get the distance in meters.
Definition: Distance.cpp:85
Isis::PvlKeyword::size
int size() const
Returns the number of values stored in this keyword.
Definition: PvlKeyword.h:125
Isis::TProjection::ToPlanetographic
double ToPlanetographic(const double lat) const
This method converts a planetocentric latitude to a planetographic latitude.
Definition: TProjection.cpp:463
Isis::AdvancedTrackTool::TrackMosaicOrigin
void TrackMosaicOrigin(MdiCubeViewport *cvp, int piLine, int piSample, int &piOrigin, QString &psSrcFileName, QString &psSrcSerialNum)
TrackMosaicOrigin - Given the pointer to Cube and line and sample index, finds the origin of the mosa...
Definition: AdvancedTrackTool.cpp:626
Isis::Angle::degrees
double degrees() const
Get the angle in units of Degrees.
Definition: Angle.h:232
Isis::Sensor::PhaseAngle
virtual double PhaseAngle() const
Returns the phase angle in degrees.
Definition: Sensor.cpp:312
Isis::TableMainWindow::currentRow
int currentRow() const
Returns the current row.
Definition: TableMainWindow.h:114
Isis::Projection::Triaxial
@ Triaxial
These projections are used to map triaxial and irregular-shaped bodies.
Definition: Projection.h:166
QDialog
Isis::Camera::LocalPhotometricAngles
void LocalPhotometricAngles(Angle &phase, Angle &incidence, Angle &emission, bool &success)
Calculates LOCAL photometric angles using the DEM (not ellipsoid).
Definition: Camera.cpp:1642
Isis::PvlContainer::keywords
int keywords() const
Returns the number of keywords contained in the PvlContainer.
Definition: PvlContainer.h:86
Isis::Sensor::Coordinate
void Coordinate(double p[3]) const
Returns the x,y,z of the surface intersection in BodyFixed km.
Definition: Sensor.cpp:196
Isis::CubeViewport::viewportToCube
void viewportToCube(int x, int y, double &sample, double &line) const
Turns a viewport into a cube.
Definition: CubeViewport.cpp:815
Isis::Projection::IsSky
bool IsSky() const
Returns true if projection is sky and false if it is land.
Definition: Projection.cpp:208
Isis::IString
Adds specific functionality to C++ strings.
Definition: IString.h:165
Isis::Sensor::EmissionAngle
virtual double EmissionAngle() const
Returns the emission angle in degrees.
Definition: Sensor.cpp:324
QObject
Isis::Table::Records
int Records() const
Returns the number of records.
Definition: Table.cpp:313
Isis::Projection::YCoord
double YCoord() const
This returns the projection Y provided SetGround, SetCoordinate, SetUniversalGround,...
Definition: Projection.cpp:400
QAction
Isis::CubeViewport::cube
Cube * cube() const
Definition: CubeViewport.h:338
Isis::AdvancedTrackTool::getIndex
int getIndex(QString keyword)
This method finds the index of the header in checkBoxItems by looping through checkBoxItems,...
Definition: AdvancedTrackTool.cpp:244
Isis::CameraDistortionMap::UndistortedFocalPlaneY
double UndistortedFocalPlaneY() const
Gets the y-value in the undistorted focal plane coordinate system.
Definition: CameraDistortionMap.cpp:248
Isis::AdvancedTrackTool::helpDialog
void helpDialog()
This method creates a dialog box that shows help tips.
Definition: AdvancedTrackTool.cpp:724
Isis::Portal::SetPosition
void SetPosition(const double sample, const double line, const int band)
Sets the line and sample position of the buffer.
Definition: Portal.h:93
Isis::Projection::ProjectionType
ProjectionType
This enum defines the subclasses of Projection supported in Isis.
Definition: Projection.h:166
Isis::CubeViewport::redBand
int redBand() const
Definition: CubeViewport.h:199
Isis::Camera::SunAzimuth
double SunAzimuth()
Returns the Sun Azimuth.
Definition: Camera.cpp:1920
Isis::Projection::XCoord
double XCoord() const
This returns the projection X provided SetGround, SetCoordinate, SetUniversalGround,...
Definition: Projection.cpp:387
Isis::iTime::UTC
QString UTC(int precision=8) const
Returns the internally stored time, formatted as a UTC time.
Definition: iTime.cpp:405
Isis::Tool::cubeViewport
MdiCubeViewport * cubeViewport() const
Return the current cubeviewport.
Definition: Tool.h:197
Isis::AdvancedTrackTool::eventFilter
bool eventFilter(QObject *o, QEvent *e)
An event filter that calls methods on certain events.
Definition: AdvancedTrackTool.cpp:144
Isis::FileName::path
QString path() const
Returns the path of the file name.
Definition: FileName.cpp:103
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::Sensor::SlantDistance
virtual double SlantDistance() const
Return the distance between the spacecraft and surface point in kmv.
Definition: Sensor.cpp:637
Isis::Sensor::LocalRadius
Distance LocalRadius() const
Returns the local radius at the intersection point.
Definition: Sensor.cpp:267
Isis::AdvancedTrackTool::record
void record()
This method records data to the current row.
Definition: AdvancedTrackTool.cpp:776
Isis::CubeViewport::projection
Projection * projection() const
Definition: CubeViewport.h:343
Isis::RingPlaneProjection::UniversalRingRadius
double UniversalRingRadius()
This returns a universal radius, which is just the radius in meters.
Definition: RingPlaneProjection.cpp:575
Isis::Sensor::UniversalLatitude
virtual double UniversalLatitude() const
Returns the planetocentric latitude, in degrees, at the surface intersection point in the body fixed ...
Definition: Sensor.cpp:210

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 USGS Astrogeology Discussion Board
To report a bug, or suggest a feature go to: ISIS Github
File Modified: 07/13/2023 15:16:06