|
Isis 3.0 Developer's Reference (API) |
Home |
00001 #ifndef ControlPoint_h 00002 #define ControlPoint_h 00003 00027 #include <bitset> 00028 00029 #include <QObject> 00030 #include <QString> 00031 00032 #include "SurfacePoint.h" 00033 00034 template< typename A, typename B > class QHash; 00035 00036 class QStringList; 00037 00038 namespace Isis { 00039 class ControlMeasure; 00040 class ControlNet; 00041 class ControlPointFileEntryV0002; 00042 class Latitude; 00043 class Longitude; 00044 class PBControlNet_PBControlPoint; 00045 class PBControlNetLogData_Point; 00046 class PvlObject; 00047 class Statistics; 00048 00330 class ControlPoint : public QObject { 00331 00332 Q_OBJECT 00333 00334 friend class ControlNet; 00335 public: 00340 enum PointType { 00347 Fixed = 0, 00352 Constrained = 1, 00360 Free = 2 00361 }; 00362 static const int PointTypeCount = 3; 00363 00369 enum Status { 00375 Failure, 00379 Success, 00384 PointLocked 00385 }; 00386 00391 enum ConstraintStatus { 00398 LatitudeConstrained = 0, 00399 LongitudeConstrained = 1, 00400 RadiusConstrained = 2, 00401 // XConstrained = 3, 00402 // YConstrained = 4, 00403 // ZConstrained = 5; 00404 }; 00405 00406 // This stuff input to jigsaw 00407 // How did apriori source get computed?? 00408 struct SurfacePointSource { 00409 enum Source { 00410 None, 00411 User, 00412 AverageOfMeasures, 00413 Reference, 00414 Basemap, 00415 BundleSolution 00416 }; 00417 }; 00418 00419 struct RadiusSource { 00420 enum Source { 00421 None, 00422 User, 00423 AverageOfMeasures, 00424 Ellipsoid, 00425 DEM, 00426 BundleSolution 00427 }; 00428 }; 00429 00430 ControlPoint(); 00431 ControlPoint(const ControlPoint &); 00432 ControlPoint(const QString &id); 00433 ControlPoint(const ControlPointFileEntryV0002 &fileEntry, 00434 const Distance &majorRad, const Distance &minorRad, 00435 const Distance &polarRad); 00436 ~ControlPoint(); 00437 00438 ControlNet *Parent() { return parentNetwork; } 00439 00440 void Load(PvlObject &p); 00441 00442 void Add(ControlMeasure *measure); 00443 int Delete(ControlMeasure *measure); 00444 int Delete(QString serialNumber); 00445 int Delete(int index); 00446 Status ResetApriori(); 00447 00448 const ControlMeasure *GetMeasure(QString serialNumber) const; 00449 ControlMeasure *GetMeasure(QString serialNumber); 00450 00451 const ControlMeasure *GetMeasure(int index) const; 00452 ControlMeasure *GetMeasure(int index); 00453 00454 const ControlMeasure *GetRefMeasure() const; 00455 ControlMeasure *GetRefMeasure(); 00456 00457 Status SetChooserName(QString name); 00458 Status SetDateTime(QString newDateTime); 00459 Status SetEditLock(bool editLock); 00460 Status SetId(QString id); 00461 Status SetRefMeasure(ControlMeasure *cm); 00462 Status SetRefMeasure(int index); 00463 Status SetRefMeasure(QString sn); 00464 Status SetRejected(bool rejected); 00465 Status SetIgnored(bool newIgnoreStatus); 00466 Status SetAdjustedSurfacePoint(SurfacePoint newSurfacePoint); 00467 Status SetType(PointType newType); 00468 00469 Status SetAprioriRadiusSource(RadiusSource::Source source); 00470 Status SetAprioriRadiusSourceFile(QString sourceFile); 00471 Status SetAprioriSurfacePoint(SurfacePoint aprioriSP); 00472 Status SetAprioriSurfacePointSource(SurfacePointSource::Source source); 00473 Status SetAprioriSurfacePointSourceFile(QString sourceFile); 00474 00475 // Status UpdateSphericalPointCoordinates(const Latitude &lat, const Longitude &lon, 00476 // const Distance &radius); 00477 00478 Status ComputeApriori(); 00479 Status ComputeResiduals(); 00480 Status ComputeResiduals_Millimeters(); 00481 00482 SurfacePoint GetAdjustedSurfacePoint() const; 00483 SurfacePoint GetBestSurfacePoint() const; 00484 QString GetChooserName() const; 00485 QString GetDateTime() const; 00486 bool IsEditLocked() const; 00487 bool IsRejected() const; 00488 QString GetId() const; 00489 bool IsIgnored() const; 00490 bool IsValid() const; 00491 bool IsInvalid() const; 00492 bool IsFixed() const; 00493 00494 bool HasAprioriCoordinates(); 00495 bool IsConstrained(); 00496 bool IsLatitudeConstrained(); 00497 bool IsLongitudeConstrained(); 00498 bool IsRadiusConstrained(); 00499 int NumberOfConstrainedCoordinates(); 00500 00501 static QString PointTypeToString(PointType type); 00502 static PointType StringToPointType(QString pointTypeString); 00503 00504 QString GetPointTypeString() const; 00505 PointType GetType() const; 00506 00507 static QString RadiusSourceToString(RadiusSource::Source source); 00508 static RadiusSource::Source StringToRadiusSource(QString str); 00509 QString GetRadiusSourceString() const; 00510 static QString SurfacePointSourceToString(SurfacePointSource::Source source); 00511 static SurfacePointSource::Source StringToSurfacePointSource(QString str); 00512 QString GetSurfacePointSourceString() const; 00513 00514 SurfacePoint GetAprioriSurfacePoint() const; 00515 RadiusSource::Source GetAprioriRadiusSource() const; 00516 QString GetAprioriRadiusSourceFile() const; 00517 SurfacePointSource::Source GetAprioriSurfacePointSource() const; 00518 QString GetAprioriSurfacePointSourceFile() const; 00519 00520 int GetNumMeasures() const; 00521 int GetNumValidMeasures() const; 00522 int GetNumLockedMeasures() const; 00523 bool HasSerialNumber(QString serialNumber) const; 00524 int IndexOf(ControlMeasure *, bool throws = true) const; 00525 int IndexOf(QString sn, bool throws = true) const; 00526 int IndexOfRefMeasure() const; 00527 bool IsReferenceExplicit() const; 00528 QString GetReferenceSN() const; 00529 00530 Statistics GetStatistic(double(ControlMeasure::*statFunc)() const) const; 00531 Statistics GetStatistic(long dataType) const; 00532 00533 QList< ControlMeasure * > getMeasures(bool excludeIgnored = false) const; 00534 QList< QString > getCubeSerialNumbers() const; 00535 00536 const ControlMeasure *operator[](QString serialNumber) const; 00537 ControlMeasure *operator[](QString serialNumber); 00538 00539 const ControlMeasure *operator[](int index) const; 00540 ControlMeasure *operator[](int index); 00541 00542 bool operator!=(const ControlPoint &pPoint) const; 00543 bool operator==(const ControlPoint &pPoint) const; 00544 const ControlPoint &operator=(const ControlPoint &pPoint); 00545 00546 // The next 7 methods are specifically to support BundleAdjust 00547 void ZeroNumberOfRejectedMeasures(); 00548 void SetNumberOfRejectedMeasures(int numRejected); 00549 int GetNumberOfRejectedMeasures() const; 00550 double GetSampleResidualRms() const; 00551 double GetLineResidualRms() const; 00552 double GetResidualRms() const; 00553 void ClearJigsawRejected(); 00554 00555 ControlPointFileEntryV0002 ToFileEntry() const; 00556 00557 private: 00558 void SetExplicitReference(ControlMeasure *measure); 00559 void ValidateMeasure(QString serialNumber) const; 00560 void AddMeasure(ControlMeasure *measure); 00561 void PointModified(); 00562 00563 00564 private: 00565 ControlNet *parentNetwork; 00566 00568 QHash< QString, ControlMeasure * > * measures; 00569 00570 QStringList *cubeSerials; 00571 00572 ControlMeasure *referenceMeasure; 00573 00579 QString id; 00580 00589 QString chooserName; 00590 00595 QString dateTime; 00596 00601 PointType type; 00602 00608 bool invalid; 00609 00614 bool editLock; 00615 00620 bool jigsawRejected; 00621 00626 std::bitset<6> constraintStatus; 00627 00634 bool referenceExplicitlySet; 00635 00640 bool ignore; 00641 00643 SurfacePointSource::Source aprioriSurfacePointSource; 00644 00646 QString aprioriSurfacePointSourceFile; 00647 00652 RadiusSource::Source aprioriRadiusSource; 00653 00657 QString aprioriRadiusSourceFile; 00658 00667 SurfacePoint aprioriSurfacePoint; 00668 00673 SurfacePoint adjustedSurfacePoint; 00674 00680 int numberOfRejectedMeasures; 00681 }; 00682 } 00683 00684 #endif