Isis 3.0
Home
ControlPoint.h
Go to the documentation of this file.
1 #ifndef ControlPoint_h
2 #define ControlPoint_h
3 
27 #include <bitset>
28 
29 #include <QObject>
30 #include <QString>
31 
32 #include "SurfacePoint.h"
33 
34 template< typename A, typename B > class QHash;
35 
36 class QStringList;
37 
38 namespace Isis {
39  class ControlMeasure;
40  class ControlNet;
41  class ControlPointFileEntryV0002;
42  class Latitude;
43  class Longitude;
44  class PBControlNet_PBControlPoint;
45  class PBControlNetLogData_Point;
46  class PvlObject;
47  class Statistics;
48 
339  class ControlPoint : public QObject {
340 
341  Q_OBJECT
342 
343  friend class ControlNet;
344  public:
349  enum PointType {
356  Fixed = 0,
369  Free = 2
370  };
371  static const int PointTypeCount = 3;
372 
378  enum Status {
394  };
395 
410 // XConstrained = 3,
411 // YConstrained = 4,
412 // ZConstrained = 5;
413  };
414 
415  // This stuff input to jigsaw
416  // How did apriori source get computed??
418  enum Source {
425  };
426  };
427 
428  struct RadiusSource {
429  enum Source {
436  };
437  };
438 
439  ControlPoint();
440  ControlPoint(const ControlPoint &);
441  ControlPoint(const QString &id);
442  ControlPoint(const ControlPointFileEntryV0002 &fileEntry,
443  const Distance &majorRad, const Distance &minorRad,
444  const Distance &polarRad);
445  ~ControlPoint();
446 
447  ControlNet *Parent() { return parentNetwork; }
448 
449  void Load(PvlObject &p);
450 
451  void Add(ControlMeasure *measure);
452  int Delete(ControlMeasure *measure);
453  int Delete(QString serialNumber);
454  int Delete(int index);
456 
457  const ControlMeasure *GetMeasure(QString serialNumber) const;
458  ControlMeasure *GetMeasure(QString serialNumber);
459 
460  const ControlMeasure *GetMeasure(int index) const;
461  ControlMeasure *GetMeasure(int index);
462 
463  const ControlMeasure *GetRefMeasure() const;
465 
466  Status SetChooserName(QString name);
467  Status SetDateTime(QString newDateTime);
468  Status SetEditLock(bool editLock);
469  Status SetId(QString id);
471  Status SetRefMeasure(int index);
472  Status SetRefMeasure(QString sn);
473  Status SetRejected(bool rejected);
474  Status SetIgnored(bool newIgnoreStatus);
476  Status SetType(PointType newType);
477 
479  Status SetAprioriRadiusSourceFile(QString sourceFile);
482  Status SetAprioriSurfacePointSourceFile(QString sourceFile);
483 
484 // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon,
485 // const Distance &radius);
486 
490 
493  QString GetChooserName() const;
494  QString GetDateTime() const;
495  bool IsEditLocked() const;
496  bool IsRejected() const;
497  QString GetId() const;
498  bool IsIgnored() const;
499  bool IsValid() const;
500  bool IsInvalid() const;
501  bool IsFixed() const;
502 
503  bool HasAprioriCoordinates();
504  bool IsConstrained();
505  bool IsLatitudeConstrained();
506  bool IsLongitudeConstrained();
507  bool IsRadiusConstrained();
509 
510  static QString PointTypeToString(PointType type);
511  static PointType StringToPointType(QString pointTypeString);
512 
513  QString GetPointTypeString() const;
514  PointType GetType() const;
515 
516  static QString RadiusSourceToString(RadiusSource::Source source);
517  static RadiusSource::Source StringToRadiusSource(QString str);
518  QString GetRadiusSourceString() const;
521  QString GetSurfacePointSourceString() const;
522 
525  QString GetAprioriRadiusSourceFile() const;
527  QString GetAprioriSurfacePointSourceFile() const;
528 
529  int GetNumMeasures() const;
530  int GetNumValidMeasures() const;
531  int GetNumLockedMeasures() const;
532  bool HasSerialNumber(QString serialNumber) const;
533  int IndexOf(ControlMeasure *, bool throws = true) const;
534  int IndexOf(QString sn, bool throws = true) const;
535  int IndexOfRefMeasure() const;
536  bool IsReferenceExplicit() const;
537  QString GetReferenceSN() const;
538 
539  Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const;
540  Statistics GetStatistic(long dataType) const;
541 
542  QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const;
544 
545  const ControlMeasure *operator[](QString serialNumber) const;
546  ControlMeasure *operator[](QString serialNumber);
547 
548  const ControlMeasure *operator[](int index) const;
549  ControlMeasure *operator[](int index);
550 
551  bool operator!=(const ControlPoint &pPoint) const;
552  bool operator==(const ControlPoint &pPoint) const;
553  const ControlPoint &operator=(const ControlPoint &pPoint);
554 
555  // The next 7 methods are specifically to support BundleAdjust
557  void SetNumberOfRejectedMeasures(int numRejected);
558  int GetNumberOfRejectedMeasures() const;
559  double GetSampleResidualRms() const;
560  double GetLineResidualRms() const;
561  double GetResidualRms() const;
562  void ClearJigsawRejected();
563 
565 
566  private:
567  void SetExplicitReference(ControlMeasure *measure);
568  void ValidateMeasure(QString serialNumber) const;
569  void AddMeasure(ControlMeasure *measure);
570  void PointModified();
571 
572 
573  private:
574  ControlNet *parentNetwork;
575 
578 
579  QStringList *cubeSerials;
580 
581  ControlMeasure *referenceMeasure;
582 
588  QString id;
589 
598  QString chooserName;
599 
604  QString dateTime;
605 
610  PointType type;
611 
617  bool invalid;
618 
623  bool editLock;
624 
629  bool jigsawRejected;
630 
635  std::bitset<6> constraintStatus;
636 
643  bool referenceExplicitlySet;
644 
649  bool ignore;
650 
652  SurfacePointSource::Source aprioriSurfacePointSource;
653 
655  QString aprioriSurfacePointSourceFile;
656 
661  RadiusSource::Source aprioriRadiusSource;
662 
666  QString aprioriRadiusSourceFile;
667 
676  SurfacePoint aprioriSurfacePoint;
677 
682  SurfacePoint adjustedSurfacePoint;
683 
689  int numberOfRejectedMeasures;
690  };
691 }
692 
693 #endif
This class defines a body-fixed surface point.
Definition: SurfacePoint.h:86
double GetSampleResidualRms() const
Get rms of sample residuals.
Definition: ControlPoint.cpp:2108
Status SetAprioriSurfacePointSource(SurfacePointSource::Source source)
This updates the source of the surface point.
Definition: ControlPoint.cpp:958
PointType GetType() const
Definition: ControlPoint.cpp:1512
bool IsRejected() const
Definition: ControlPoint.cpp:1394
void ZeroNumberOfRejectedMeasures()
Initialize the number of rejected measures to 0.
Definition: ControlPoint.cpp:2074
QString GetAprioriSurfacePointSourceFile() const
Definition: ControlPoint.cpp:1721
void SetNumberOfRejectedMeasures(int numRejected)
Set (update) the number of rejected measures for the control point.
Definition: ControlPoint.cpp:2087
void Add(ControlMeasure *measure)
Add a measurement to the control point, taking ownership of the measure in the process.
Definition: ControlPoint.cpp:421
Source
Definition: ControlPoint.h:429
A Constrained point is a Control Point whose lat/lon/radius is somewhat established and should not be...
Definition: ControlPoint.h:361
bool IsLatitudeConstrained()
Definition: ControlPoint.cpp:1695
A Fixed point is a Control Point whose lat/lon is well established and should not be changed...
Definition: ControlPoint.h:356
Status ComputeApriori()
This method computes the apriori lat/lon for a point.
Definition: ControlPoint.cpp:1018
RadiusSource::Source GetAprioriRadiusSource() const
Definition: ControlPoint.cpp:1677
bool IsEditLocked() const
Definition: ControlPoint.cpp:1389
Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const
This function will call a given method on every control measure that this point has.
Definition: ControlPoint.cpp:1864
Status SetAprioriRadiusSourceFile(QString sourceFile)
This updates the filename of the DEM that the apriori radius came from.
Definition: ControlPoint.cpp:908
Status SetIgnored(bool newIgnoreStatus)
Set whether to ignore or use control point.
Definition: ControlPoint.cpp:812
SurfacePoint GetAdjustedSurfacePoint() const
Definition: ControlPoint.cpp:1399
Source
Definition: ControlPoint.h:418
bool IsLongitudeConstrained()
Definition: ControlPoint.cpp:1699
void ClearJigsawRejected()
Set jigsaw rejected flag for all measures to false and set the jigsaw rejected flag for the point its...
Definition: ControlPoint.cpp:2190
QString GetPointTypeString() const
Obtain a string representation of the PointType.
Definition: ControlPoint.cpp:1503
PointType
These are the valid &#39;types&#39; of point.
Definition: ControlPoint.h:349
Status ComputeResiduals_Millimeters()
This method computes the residuals for a point.
Definition: ControlPoint.cpp:1324
int GetNumValidMeasures() const
Definition: ControlPoint.cpp:1735
const ControlMeasure * operator[](QString serialNumber) const
Same as GetMeasure (provided for convenience)
Definition: ControlPoint.cpp:1920
bool HasAprioriCoordinates()
Definition: ControlPoint.cpp:1682
Definition: ControlPoint.h:408
Status SetChooserName(QString name)
Set the point&#39;s chooser name.
Definition: ControlPoint.cpp:656
Definition: ControlPoint.h:428
SurfacePoint GetAprioriSurfacePoint() const
Definition: ControlPoint.cpp:1672
bool IsValid() const
Definition: ControlPoint.cpp:1431
Status SetEditLock(bool editLock)
Set the EditLock state.
Definition: ControlPoint.cpp:689
ControlPoint()
Construct a control point.
Definition: ControlPoint.cpp:43
const ControlMeasure * GetRefMeasure() const
Get the reference control measure.
Definition: ControlPoint.cpp:626
Distance measurement, usually in meters.
Definition: Distance.h:47
ConstraintStatus
This is a convenience member for checking number of constrained coordinates in the SurfacePoint...
Definition: ControlPoint.h:400
QString GetReferenceSN() const
Definition: ControlPoint.cpp:1785
Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint)
Set or update the surface point relating to this control point.
Definition: ControlPoint.cpp:852
A Free point is a Control Point that identifies common measurements between two or more cubes...
Definition: ControlPoint.h:369
QString GetDateTime() const
Definition: ControlPoint.cpp:1379
static QString SurfacePointSourceToString(SurfacePointSource::Source source)
Obtain a string representation of a given SurfacePointSource.
Definition: ControlPoint.cpp:1598
bool HasSerialNumber(QString serialNumber) const
Return true if given serial number exists in point.
Definition: ControlPoint.cpp:1768
static QString RadiusSourceToString(RadiusSource::Source source)
Obtain a string representation of a given RadiusSource.
Definition: ControlPoint.cpp:1524
ControlPointFileEntryV0002 ToFileEntry() const
Definition: ControlPoint.cpp:2207
This class is used to accumulate statistics on double arrays.
Definition: Statistics.h:109
Status SetAprioriSurfacePointSourceFile(QString sourceFile)
This updates the filename of where the apriori surface point came from.
Definition: ControlPoint.cpp:975
bool IsFixed() const
Definition: ControlPoint.cpp:1667
QString GetRadiusSourceString() const
Obtain a string representation of the RadiusSource.
Definition: ControlPoint.cpp:1586
Definition: ControlPoint.h:419
a control network
Definition: ControlNet.h:207
QString GetId() const
Return the Id of the control point.
Definition: ControlPoint.cpp:1421
Definition: ControlPoint.h:433
static RadiusSource::Source StringToRadiusSource(QString str)
Obtain a RadiusSource::Source from a string.
Definition: ControlPoint.cpp:1559
Status SetDateTime(QString newDateTime)
Set the point&#39;s last modified time.
Definition: ControlPoint.cpp:672
Status SetRefMeasure(ControlMeasure *cm)
Set the point&#39;s reference measure.
Definition: ControlPoint.cpp:732
Status SetAprioriSurfacePoint(SurfacePoint aprioriSP)
This updates the apriori surface point.
Definition: ControlPoint.cpp:931
SurfacePoint GetBestSurfacePoint() const
Returns the adjusted surface point if it exists, otherwise returns the a priori surface point...
Definition: ControlPoint.cpp:1408
static const int PointTypeCount
Definition: ControlPoint.h:371
This is returned when an operation cannot be performed due to a problem such as the point is ignored ...
Definition: ControlPoint.h:384
A single control point.
Definition: ControlPoint.h:339
Definition: ControlPoint.h:417
int IndexOf(ControlMeasure *, bool throws=true) const
Definition: ControlPoint.cpp:1804
const ControlPoint & operator=(const ControlPoint &pPoint)
Definition: ControlPoint.cpp:2024
bool IsInvalid() const
Definition: ControlPoint.cpp:1436
bool IsReferenceExplicit() const
Definition: ControlPoint.cpp:1777
bool IsRadiusConstrained()
Definition: ControlPoint.cpp:1703
~ControlPoint()
This destroys the current instance and cleans up any and all allocated memory.
Definition: ControlPoint.cpp:345
Status SetRejected(bool rejected)
Set the jigsawRejected state.
Definition: ControlPoint.cpp:703
Status SetType(PointType newType)
Updates the control point&#39;s type.
Definition: ControlPoint.cpp:868
Definition: ControlNetFileV0002.pb.h:789
Status SetId(QString id)
Sets the Id of the control point.
Definition: ControlPoint.cpp:716
Definition: ControlPoint.h:420
static SurfacePointSource::Source StringToSurfacePointSource(QString str)
Obtain a SurfacePoint::Source from a string.
Definition: ControlPoint.cpp:1636
Status
This is a return status for many of the mutating (setter) method calls.
Definition: ControlPoint.h:378
void Load(PvlObject &p)
Loads the PvlObject into a ControlPoint.
Definition: ControlPoint.cpp:410
Definition: ControlPoint.h:434
Definition: ControlPoint.h:409
double GetResidualRms() const
Get rms of residuals.
Definition: ControlPoint.cpp:2164
ControlNet * Parent()
Definition: ControlPoint.h:447
bool operator==(const ControlPoint &pPoint) const
Compare two Control Points for equality.
Definition: ControlPoint.cpp:1983
int GetNumberOfRejectedMeasures() const
Get the number of rejected measures on the control point.
Definition: ControlPoint.cpp:2098
SurfacePointSource::Source GetAprioriSurfacePointSource() const
Definition: ControlPoint.cpp:1716
QList< ControlMeasure * > getMeasures(bool excludeIgnored=false) const
Definition: ControlPoint.cpp:1893
Definition: BoxcarCachingAlgorithm.h:29
int GetNumMeasures() const
Definition: ControlPoint.cpp:1726
bool operator!=(const ControlPoint &pPoint) const
Compare two Control Points for inequality.
Definition: ControlPoint.cpp:1970
a control measurement
Definition: ControlMeasure.h:171
Definition: ControlPoint.h:430
bool IsConstrained()
Definition: ControlPoint.cpp:1691
bool IsIgnored() const
Definition: ControlPoint.cpp:1426
Status ResetApriori()
Reset all the Apriori info to defaults.
Definition: ControlPoint.cpp:561
QString GetChooserName() const
Definition: ControlPoint.cpp:1369
int GetNumLockedMeasures() const
Returns the number of locked control measures.
Definition: ControlPoint.cpp:1751
int Delete(ControlMeasure *measure)
Remove a measurement from the control point, deleting reference measure is allowed.
Definition: ControlPoint.cpp:534
QString GetSurfacePointSourceString() const
Obtain a string representation of the SurfacePointSource.
Definition: ControlPoint.cpp:1662
int NumberOfConstrainedCoordinates()
Definition: ControlPoint.cpp:1707
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:74
QString GetAprioriRadiusSourceFile() const
Definition: ControlPoint.cpp:1711
const ControlMeasure * GetMeasure(QString serialNumber) const
Get a control measure based on its cube&#39;s serial number.
Definition: ControlPoint.cpp:595
QList< QString > getCubeSerialNumbers() const
Definition: ControlPoint.cpp:1908
static QString PointTypeToString(PointType type)
Obtain a string representation of a given PointType.
Definition: ControlPoint.cpp:1448
int IndexOfRefMeasure() const
Definition: ControlPoint.cpp:1839
Status SetAprioriRadiusSource(RadiusSource::Source source)
This updates the source of the radius of the apriori surface point.
Definition: ControlPoint.cpp:890
Definition: ControlPoint.h:431
Status ComputeResiduals()
This method computes the BundleAdjust residuals for a point.
Definition: ControlPoint.cpp:1172
double GetLineResidualRms() const
Get rms of line residuals.
Definition: ControlPoint.cpp:2136
This is returned when the operation successfully took effect.
Definition: ControlPoint.h:388
This is the status of constrained coordinates in the SurfacePoint.
Definition: ControlPoint.h:407
static PointType StringToPointType(QString pointTypeString)
Obtain a PointType given a string representation of it.
Definition: ControlPoint.cpp:1474
Definition: ControlCubeGraphNode.h:28
This is returned when the operation requires Edit Lock to be false but it is currently true...
Definition: ControlPoint.h:393