Isis 3 Programmer Reference
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 "ControlMeasure.h"
33 #include "SurfacePoint.h"
34 
35 template< typename A, typename B > class QHash;
36 
37 class QStringList;
38 
39 namespace Isis {
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 
369  class ControlPoint : public QObject {
370 
371  Q_OBJECT
372 
373  friend class ControlNet;
374  public:
379  enum PointType {
386  Fixed = 0,
399  Free = 2
400  };
401  static const int PointTypeCount = 3;
402 
408  enum Status {
424  };
425 
431  Coord1Constrained = 0,
432  Coord2Constrained = 1,
433  Coord3Constrained = 2
434  };
435 
446  enum ModType {
447  EditLockModified,
448  IgnoredModified,
449  TypeModified
450  };
451 
452  // This stuff input to jigsaw
453  // How did apriori source get computed??
455  enum Source {
456  None,
457  User,
458  AverageOfMeasures,
459  Reference,
460  Basemap,
461  BundleSolution
462  };
463  };
464 
465  struct RadiusSource {
466  enum Source {
467  None,
468  User,
469  AverageOfMeasures,
470  Ellipsoid,
471  DEM,
472  BundleSolution
473  };
474  };
475 
476  ControlPoint();
477  ControlPoint(const ControlPoint &);
478  ControlPoint(const QString &id);
479  ~ControlPoint();
480 
481  ControlNet *Parent() { return parentNetwork; }
482 
483  void Load(PvlObject &p);
484 
485  void Add(ControlMeasure *measure);
486  int Delete(ControlMeasure *measure);
487  int Delete(QString serialNumber);
488  int Delete(int index);
490 
491  const ControlMeasure *GetMeasure(QString serialNumber) const;
492  ControlMeasure *GetMeasure(QString serialNumber);
493 
494  const ControlMeasure *GetMeasure(int index) const;
495  ControlMeasure *GetMeasure(int index);
496 
497  bool HasRefMeasure() const;
498  const ControlMeasure *GetRefMeasure() const;
500 
501  Status SetChooserName(QString name);
502  Status SetDateTime(QString newDateTime);
504  Status SetId(QString id);
506  Status SetRefMeasure(int index);
507  Status SetRefMeasure(QString sn);
508  Status SetRejected(bool rejected);
509  Status SetIgnored(bool newIgnoreStatus);
511  Status SetType(PointType newType);
512 
513  Status SetAprioriRadiusSource(RadiusSource::Source source);
514  Status SetAprioriRadiusSourceFile(QString sourceFile);
516  Status SetAprioriSurfacePointSource(SurfacePointSource::Source source);
517  Status SetAprioriSurfacePointSourceFile(QString sourceFile);
518 
519 // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon,
520 // const Distance &radius);
521 
525 
526  SurfacePoint GetAdjustedSurfacePoint() const;
527 
529  QString GetChooserName() const;
530  QString GetDateTime() const;
531  bool IsEditLocked() const;
532  bool IsRejected() const;
533  QString GetId() const;
534  bool IsIgnored() const;
535  bool IsValid() const;
536  // Can we get rid of this? It doesn't appear to be used anywhere. *** ToDo ***
537  bool IsInvalid() const;
538  bool IsFree() const;
539  bool IsFixed() const;
540  bool HasAprioriCoordinates();
541 
542  bool IsConstrained();
543  bool IsCoord1Constrained();
544  bool IsCoord2Constrained();
545  bool IsCoord3Constrained();
547 
548  static QString PointTypeToString(PointType type);
549  static PointType StringToPointType(QString pointTypeString);
550 
551  QString GetPointTypeString() const;
552  PointType GetType() const;
553 
554  static QString RadiusSourceToString(RadiusSource::Source source);
555  static RadiusSource::Source StringToRadiusSource(QString str);
556  QString GetRadiusSourceString() const;
557  static QString SurfacePointSourceToString(SurfacePointSource::Source source);
558  static SurfacePointSource::Source StringToSurfacePointSource(QString str);
559  QString GetSurfacePointSourceString() const;
560  SurfacePoint GetAprioriSurfacePoint() const;
561 
562  RadiusSource::Source GetAprioriRadiusSource() const;
563  bool HasAprioriRadiusSourceFile() const;
564  QString GetAprioriRadiusSourceFile() const;
565  SurfacePointSource::Source GetAprioriSurfacePointSource() const;
567  QString GetAprioriSurfacePointSourceFile() const;
568 
569  int GetNumMeasures() const;
570  int GetNumValidMeasures() const;
571  int GetNumLockedMeasures() const;
572  bool HasSerialNumber(QString serialNumber) const;
573  bool HasChooserName() const;
574  bool HasDateTime() const;
575  int IndexOf(ControlMeasure *, bool throws = true) const;
576  int IndexOf(QString sn, bool throws = true) const;
577  int IndexOfRefMeasure() const;
578  bool IsReferenceExplicit() const;
579  QString GetReferenceSN() const;
580  void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType modType, QVariant oldValue, QVariant newValue);
581 
582 
583 
584  Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const;
585  Statistics GetStatistic(long dataType) const;
586 
587  QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const;
589 
590  const ControlMeasure *operator[](QString serialNumber) const;
591  ControlMeasure *operator[](QString serialNumber);
592 
593  const ControlMeasure *operator[](int index) const;
594  ControlMeasure *operator[](int index);
595 
596  bool operator!=(const ControlPoint &pPoint) const;
597  bool operator==(const ControlPoint &pPoint) const;
598  const ControlPoint &operator=(const ControlPoint &pPoint);
599 
600  // The next 7 methods are specifically to support BundleAdjust
602  void SetNumberOfRejectedMeasures(int numRejected);
603  int GetNumberOfRejectedMeasures() const;
604  double GetSampleResidualRms() const;
605  double GetLineResidualRms() const;
606  double GetResidualRms() const;
607  void ClearJigsawRejected();
608 
609  private:
610  void SetExplicitReference(ControlMeasure *measure);
611  void ValidateMeasure(QString serialNumber) const;
612  void AddMeasure(ControlMeasure *measure);
613  void PointModified();
614 
615 
616  private:
618 
621 
622  QStringList *cubeSerials;
623 
624  ControlMeasure *referenceMeasure;
625 
631  QString id;
632 
641  QString chooserName;
642 
647  QString dateTime;
648 
654 
660  bool invalid;
661 
666  bool editLock;
667 
673 
678  std::bitset<3> constraintStatus;
679 
687 
692  bool ignore;
693 
695  SurfacePointSource::Source aprioriSurfacePointSource;
696 
699 
704  RadiusSource::Source aprioriRadiusSource;
705 
710 
720 
726 
733  };
734 }
735 
736 #endif
This class defines a body-fixed surface point.
Definition: SurfacePoint.h:148
Status SetAprioriSurfacePointSource(SurfacePointSource::Source source)
This updates the source of the surface point.
bool HasSerialNumber(QString serialNumber) const
Return true if given serial number exists in point.
void ZeroNumberOfRejectedMeasures()
Initialize the number of rejected measures to 0.
bool IsReferenceExplicit() const
bool editLock
This stores the edit lock state.
Definition: ControlPoint.h:666
void SetNumberOfRejectedMeasures(int numRejected)
Set (update) the number of rejected measures for the control point.
void Add(ControlMeasure *measure)
Add a measurement to the control point, taking ownership of the measure in the process.
double GetSampleResidualRms() const
Get rms of sample residuals.
SurfacePoint aprioriSurfacePoint
The apriori surface point.
Definition: ControlPoint.h:719
A Constrained point is a Control Point whose lat/lon/radius is somewhat established and should not be...
Definition: ControlPoint.h:391
A Fixed point is a Control Point whose lat/lon is well established and should not be changed...
Definition: ControlPoint.h:386
Status ComputeApriori()
Computes a priori lat/lon/radius point coordinates by determining the average lat/lon/radius of all ...
bool IsFixed() const
Return bool indicating if point is Fixed or not.
QString id
This is the control point ID.
Definition: ControlPoint.h:631
Status SetAprioriRadiusSourceFile(QString sourceFile)
This updates the filename of the DEM that the apriori radius came from.
bool IsCoord3Constrained()
Return bool indicating if 3rd coordinate is Constrained or not.
int GetNumberOfRejectedMeasures() const
Get the number of rejected measures on the control point.
const ControlMeasure * GetMeasure(QString serialNumber) const
Get a control measure based on its cube&#39;s serial number.
Status SetIgnored(bool newIgnoreStatus)
Set whether to ignore or use control point.
ModType
Control Measure Modification Types.
void ClearJigsawRejected()
Set jigsaw rejected flag for all measures to false and set the jigsaw rejected flag for the point its...
bool jigsawRejected
This stores the jigsaw rejected state.
Definition: ControlPoint.h:672
PointType
These are the valid &#39;types&#39; of point.
Definition: ControlPoint.h:379
Status ComputeResiduals_Millimeters()
This method computes the residuals for a point.
QString GetReferenceSN() const
bool HasAprioriSurfacePointSourceFile() const
Checks to see if the surface point source file has been set.
ControlNet * parentNetwork
List of Control Measures.
Definition: ControlPoint.h:617
QString GetRadiusSourceString() const
Obtain a string representation of the RadiusSource.
QString dateTime
This is the last modified date and time.
Definition: ControlPoint.h:647
SurfacePoint GetBestSurfacePoint() const
Returns the adjusted surface point if it exists, otherwise returns the a priori surface point...
Status SetChooserName(QString name)
Set the point&#39;s chooser name.
Status SetEditLock(bool editLock)
Set the EditLock state.
ControlPoint()
Construct a control point.
int GetNumValidMeasures() const
double GetResidualRms() const
Get rms of residuals.
bool HasAprioriRadiusSourceFile() const
Checks to see if the radius source file has been set.
ConstraintStatus
This is a convenience member for checking number of constrained coordinates in the SurfacePoint...
Definition: ControlPoint.h:430
Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint)
Set or update the surface point relating to this control point.
Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const
This function will call a given method on every control measure that this point has.
A Free point is a Control Point that identifies common measurements between two or more cubes...
Definition: ControlPoint.h:399
static QString SurfacePointSourceToString(SurfacePointSource::Source source)
Obtain a string representation of a given SurfacePointSource.
SurfacePoint adjustedSurfacePoint
This is the calculated, or aposterori, surface point.
Definition: ControlPoint.h:725
static QString RadiusSourceToString(RadiusSource::Source source)
Obtain a string representation of a given RadiusSource.
bool operator!=(const ControlPoint &pPoint) const
Compare two Control Points for inequality.
This class is used to accumulate statistics on double arrays.
Definition: Statistics.h:107
Status SetAprioriSurfacePointSourceFile(QString sourceFile)
This updates the filename of where the apriori surface point came from.
double GetLineResidualRms() const
Get rms of line residuals.
void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType modType, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the measureModified() signal in the parent network is called wheneve...
a control network
Definition: ControlNet.h:271
QString GetSurfacePointSourceString() const
Obtain a string representation of the SurfacePointSource.
int GetNumLockedMeasures() const
Returns the number of locked control measures.
QString GetId() const
Return the Id of the control point.
const ControlMeasure * operator[](QString serialNumber) const
Same as GetMeasure (provided for convenience)
static RadiusSource::Source StringToRadiusSource(QString str)
Obtain a RadiusSource::Source from a string.
Status SetDateTime(QString newDateTime)
Set the point&#39;s last modified time.
bool IsCoord2Constrained()
Return bool indicating if 2nd coordinate is Constrained or not.
QList< QString > getCubeSerialNumbers() const
std::bitset< 3 > constraintStatus
This stores the constraint status of the a priori SurfacePoint.
Definition: ControlPoint.h:678
Status SetRefMeasure(ControlMeasure *cm)
Set the point&#39;s reference measure.
bool IsFree() const
Return bool indicating if point is Free or not.
bool HasChooserName() const
Returns true if the choosername is not empty.
Status SetAprioriSurfacePoint(SurfacePoint aprioriSP)
This updates the apriori surface point.
QList< ControlMeasure *> getMeasures(bool excludeIgnored=false) const
bool IsCoord1Constrained()
Return bool indicating if 1st coordinate is Constrained or not.
This is returned when an operation cannot be performed due to a problem such as the point is ignored ...
Definition: ControlPoint.h:414
A single control point.
Definition: ControlPoint.h:369
bool referenceExplicitlySet
This indicates if a program has explicitely set the reference in this point or the implicit reference...
Definition: ControlPoint.h:686
const ControlPoint & operator=(const ControlPoint &pPoint)
bool ignore
True if we should preserve but ignore the entire control point and its measures.
Definition: ControlPoint.h:692
bool invalid
If we forced a build that we would normally have thrown an exception for then this is set to true...
Definition: ControlPoint.h:660
~ControlPoint()
This destroys the current instance and cleans up any and all allocated memory.
Status SetRejected(bool rejected)
Set the jigsawRejected state.
Status SetType(PointType newType)
Updates the control point&#39;s type.
PointType type
What this control point is tying together.
Definition: ControlPoint.h:653
ModType
Control Point Modification Types.
Definition: ControlPoint.h:446
Status SetId(QString id)
Sets the Id of the control point.
static SurfacePointSource::Source StringToSurfacePointSource(QString str)
Obtain a SurfacePoint::Source from a string.
const ControlMeasure * GetRefMeasure() const
Get the reference control measure.
Status
This is a return status for many of the mutating (setter) method calls.
Definition: ControlPoint.h:408
SurfacePointSource::Source aprioriSurfacePointSource
Where the apriori surface point originated from.
Definition: ControlPoint.h:695
void Load(PvlObject &p)
Loads the PvlObject into a ControlPoint.
void SetExplicitReference(ControlMeasure *measure)
Explicitly defines a new reference measure by pointer.
int numberOfRejectedMeasures
This parameter is used and maintained by BundleAdjust for the jigsaw application. ...
Definition: ControlPoint.h:732
QString chooserName
This is the user name of the person who last modified this control point.
Definition: ControlPoint.h:641
bool HasRefMeasure() const
Checks to see if a reference measure is set.
QString aprioriRadiusSourceFile
The name of the file that derives the apriori surface point&#39;s radius.
Definition: ControlPoint.h:709
QString aprioriSurfacePointSourceFile
FileName where the apriori surface point originated from.
Definition: ControlPoint.h:698
int IndexOfRefMeasure() const
int IndexOf(ControlMeasure *, bool throws=true) const
QString GetPointTypeString() const
Obtain a string representation of the PointType.
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
a control measurement
bool IsConstrained()
Return bool indicating if point is Constrained or not.
Status ResetApriori()
Reset all the Apriori info to defaults.
int Delete(ControlMeasure *measure)
Remove a measurement from the control point, deleting reference measure is allowed.
void AddMeasure(ControlMeasure *measure)
Do the actual work of adding a measure to this point, without changing any extra data.
bool HasDateTime() const
Returns true if the datetime is not empty.
PointType GetType() const
int NumberOfConstrainedCoordinates()
Return bool indicating if point is Constrained or not.
Contains Pvl Groups and Pvl Objects.
Definition: PvlObject.h:74
void ValidateMeasure(QString serialNumber) const
Throws an exception if none of the point&#39;s measures have the given serial number. ...
static QString PointTypeToString(PointType type)
Obtain a string representation of a given PointType.
Status SetAprioriRadiusSource(RadiusSource::Source source)
This updates the source of the radius of the apriori surface point.
bool operator==(const ControlPoint &pPoint) const
Compare two Control Points for equality.
Status ComputeResiduals()
This method computes the BundleAdjust residuals for a point.
This is returned when the operation successfully took effect.
Definition: ControlPoint.h:418
static PointType StringToPointType(QString pointTypeString)
Obtain a PointType given a string representation of it.
void PointModified()
What the heck is the point of this?
This is returned when the operation requires Edit Lock to be false but it is currently true...
Definition: ControlPoint.h:423
RadiusSource::Source aprioriRadiusSource
Where the apriori surface point&#39;s radius originated from, most commonly used by jigsaw.
Definition: ControlPoint.h:704