4 #include <boost/numeric/ublas/symmetric.hpp> 5 #include <boost/numeric/ublas/io.hpp> 10 #include <QStringList> 29 using boost::numeric::ublas::symmetric_matrix;
30 using boost::numeric::ublas::upper;
40 ControlPoint::ControlPoint() : invalid(false) {
56 referenceMeasure = NULL;
70 referenceMeasure = NULL;
78 QListIterator<QString> i(*other.cubeSerials);
80 QString sn = i.next();
86 if (other.referenceMeasure == otherCm) {
119 referenceMeasure = NULL;
140 if (measures != NULL) {
142 for (
int i = 0; i < keys.size(); i++) {
143 delete(*measures)[keys[i]];
144 (*measures)[keys[i]] = NULL;
156 referenceMeasure = NULL;
229 QString msg =
"The SerialNumber is not unique. A measure with " 231 "exists for ControlPoint [" +
GetId() +
"]";
236 if (!measures->size()) {
238 referenceMeasure = measure;
240 else if (referenceMeasure->IsIgnored() && !measure->IsIgnored() &&
245 referenceMeasure = measure;
250 measures->insert(newSerial, measure);
251 cubeSerials->append(newSerial);
269 if (!measures->contains(serialNumber)) {
270 QString msg =
"No measure with serial number [" + serialNumber +
271 "] is owned by this point";
291 if (!IsIgnored() && !cm->IsIgnored()) {
297 return ControlMeasure::MeasureLocked;
301 measures->remove(serialNumber);
302 cubeSerials->removeAt(cubeSerials->indexOf(serialNumber));
305 if (cubeSerials->size()) {
306 if (referenceMeasure == cm) {
307 referenceMeasure = (*measures)[cubeSerials->at(0)];
312 referenceMeasure = NULL;
320 return ControlMeasure::Success;
359 if (index < 0 || index >= cubeSerials->size()) {
360 QString msg =
"index [" + QString(index) +
"] out of bounds";
364 return Delete(cubeSerials->at(index));
374 if (IsEditLocked()) {
398 return (*measures)[serialNumber];
410 return measures->value(serialNumber);
415 if (index < 0 || index >= cubeSerials->size()) {
416 QString msg =
"Index [" +
toString(index) +
"] out of range";
425 if (index < 0 || index >= cubeSerials->size()) {
426 QString msg =
"Index [" +
toString(index) +
"] out of range";
440 return !(referenceMeasure == NULL);
451 QString msg =
"Control point [" +
GetId() +
"] has no reference measure!";
455 return referenceMeasure;
464 QString msg =
"Control point [" +
GetId() +
"] has no reference measure!";
468 return referenceMeasure;
583 if (index < 0 || index >= cubeSerials->size()) {
584 QString msg =
"Index [";
585 msg +=
toString(index) +
"] out of range";
604 if (!cubeSerials->contains(sn)) {
605 QString msg =
"Point [" +
id +
"] has no measure with serial number [" +
635 referenceMeasure = measure;
654 if (oldStatus !=
ignore) {
703 QString msg =
"Invalid Point Enumeration, [" + QString(
type) +
"], for " 704 "Control Point [" +
GetId() +
"]";
729 RadiusSource::Source source) {
748 QString sourceFile) {
784 if (aprioriSP.GetLatSigma().
isValid())
786 if (aprioriSP.GetLonSigma().
isValid())
788 if (aprioriSP.GetLocalRadiusSigma().
isValid())
792 if (aprioriSP.GetXSigma().
isValid())
794 if (aprioriSP.GetYSigma().
isValid())
796 if (aprioriSP.GetZSigma().
isValid())
814 SurfacePointSource::Source source) {
832 QString sourceFile) {
897 QString msg =
"In method ControlPoint::ComputeApriori(). ControlPoint [" +
GetId() +
"] is ";
898 msg +=
"fixed or constrained and requires a priori coordinates";
906 int goodMeasures = 0;
913 for (
int i = 0; i < cubeSerials->size(); i++) {
915 if (m->IsIgnored()) {
919 Camera *cam = m->Camera();
922 QString msg =
"in method ControlPoint::ComputeApriori(). Camera has not been set in ";
923 msg +=
"measure for cube serial number [" + cubeSN +
"], Control Point id ";
924 msg +=
"[" +
GetId() +
"]. Camera must be set prior to calculating a priori coordinates";
928 bool setImageSuccess = cam->
SetImage(m->GetSample(), m->GetLine());
935 if (setImageSuccess) {
941 r2B += pB[0]*pB[0] + pB[1]*pB[1] + pB[2]*pB[2];
956 if (goodMeasures == 0) {
957 QString msg =
"in method ControlPoint::ComputeApriori(). ControlPoint [" +
GetId() +
"] has ";
958 msg +=
"no measures which project to the body";
965 double avgX = xB / goodMeasures;
966 double avgY = yB / goodMeasures;
967 double avgZ = zB / goodMeasures;
968 double avgR2 = r2B / goodMeasures;
969 double scale = sqrt(avgR2/(avgX*avgX+avgY*avgY+avgZ*avgZ));
1023 for (
int j = 0; j < keys.size(); j++) {
1025 if (m->IsIgnored()) {
1034 Camera *cam = m->Camera();
1052 if (!fpmap->
SetFocalPlane(m->GetFocalPlaneComputedX(), m->GetFocalPlaneComputedY())) {
1053 QString msg =
"Sanity check #1 for ControlPoint [" +
GetId() +
1079 double sample = m->GetSample();
1080 double computedY = m->GetFocalPlaneComputedY();
1081 double computedX = m->GetFocalPlaneComputedX();
1085 if (computedY < 0) {
1086 adjLine = m->GetLine() - 1.;
1089 adjLine = m->GetLine() + 1.;
1096 cam->
SetImage(sample, m->GetLine());
1106 if (computedY < 0) {
1107 deltaLine = -computedY/scalingY;
1110 deltaLine = computedY/scalingY;
1122 cuLine = m->GetLine() + deltaLine;
1130 if (!fpmap->
SetFocalPlane(m->GetFocalPlaneMeasuredX(), m->GetFocalPlaneMeasuredY())) {
1131 QString msg =
"Sanity check #2 for ControlPoint [" +
GetId() +
1140 muSamp = m->GetSample();
1141 muLine = m->GetLine();
1147 double sampResidual = muSamp - cuSamp;
1148 double lineResidual = muLine - cuLine;
1183 for (
int j = 0; j < keys.size(); j++) {
1185 if (m->IsIgnored()) {
1194 Camera *cam = m->Camera();
1205 cam->
SetImage(m->GetSample(), m->GetLine());
1209 cam->
GroundMap()->
GetXY(GetAdjustedSurfacePoint(), &cudx, &cudy,
false);
1222 QString ControlPoint::GetChooserName()
const {
1242 QString ControlPoint::GetDateTime()
const {
1252 bool ControlPoint::IsEditLocked()
const {
1257 bool ControlPoint::IsRejected()
const {
1262 SurfacePoint ControlPoint::GetAdjustedSurfacePoint()
const {
1291 bool ControlPoint::IsIgnored()
const {
1296 bool ControlPoint::IsValid()
const {
1301 bool ControlPoint::IsInvalid()
const {
1316 switch (pointType) {
1321 str =
"Constrained";
1340 QString pointTypeString) {
1345 QString errMsg =
"There is no PointType that has a string representation" 1347 errMsg += pointTypeString;
1350 if (pointTypeString ==
"Fixed") {
1353 else if (pointTypeString ==
"Constrained") {
1356 else if (pointTypeString ==
"Free") {
1397 case RadiusSource::None:
1400 case RadiusSource::User:
1403 case RadiusSource::AverageOfMeasures:
1404 str =
"AverageOfMeasures";
1406 case RadiusSource::Ellipsoid:
1409 case RadiusSource::DEM:
1412 case RadiusSource::BundleSolution:
1413 str =
"BundleSolution";
1431 str = str.toLower();
1432 RadiusSource::Source source = RadiusSource::None;
1434 if (str ==
"user") {
1435 source = RadiusSource::User;
1437 else if (str ==
"averageofmeasures") {
1438 source = RadiusSource::AverageOfMeasures;
1440 else if (str ==
"ellipsoid") {
1441 source = RadiusSource::Ellipsoid;
1443 else if (str ==
"dem") {
1444 source = RadiusSource::DEM;
1446 else if (str ==
"bundlesolution") {
1447 source = RadiusSource::BundleSolution;
1473 SurfacePointSource::Source source) {
1478 case SurfacePointSource::None:
1481 case SurfacePointSource::User:
1484 case SurfacePointSource::AverageOfMeasures:
1485 str =
"AverageOfMeasures";
1487 case SurfacePointSource::Reference:
1490 case SurfacePointSource::Basemap:
1493 case SurfacePointSource::BundleSolution:
1494 str =
"BundleSolution";
1509 ControlPoint::SurfacePointSource::Source
1513 str = str.toLower();
1514 SurfacePointSource::Source source = SurfacePointSource::None;
1516 if (str ==
"user") {
1517 source = SurfacePointSource::User;
1519 else if (str ==
"averageofmeasures") {
1520 source = SurfacePointSource::AverageOfMeasures;
1522 else if (str ==
"reference") {
1523 source = SurfacePointSource::Reference;
1525 else if (str ==
"basemap") {
1526 source = SurfacePointSource::Basemap;
1528 else if (str ==
"bundlesolution") {
1529 source = SurfacePointSource::BundleSolution;
1546 SurfacePoint ControlPoint::GetAprioriSurfacePoint()
const {
1551 ControlPoint::RadiusSource::Source ControlPoint::GetAprioriRadiusSource()
1557 bool ControlPoint::HasAprioriCoordinates() {
1656 QString ControlPoint::GetAprioriRadiusSourceFile()
const {
1661 ControlPoint::SurfacePointSource::Source
1662 ControlPoint::GetAprioriSurfacePointSource()
const {
1677 QString ControlPoint::GetAprioriSurfacePointSourceFile()
const {
1682 int ControlPoint::GetNumMeasures()
const {
1683 return measures->size();
1694 for (
int cm = 0; cm < keys.size(); cm++) {
1695 if (!(*measures)[keys[cm]]->IsIgnored()) {
1711 for (
int cm = 0; cm < keys.size(); cm++) {
1712 if ((*measures)[keys[cm]]->IsEditLocked()) {
1727 return cubeSerials->contains(serialNumber);
1745 QString msg =
"There is no reference measure set in the ControlPoint [" +
1777 int index = cubeSerials->indexOf(sn);
1779 if (
throws && index == -1) {
1780 QString msg =
"ControlMeasure [" + sn +
"] does not exist in point [" +
1799 QString msg =
"There is no reference measure for point [" +
id +
"]." 1800 " This also means of course that the point is empty!";
1826 if (!cm->IsIgnored()) {
1827 stats.
AddData((cm->*statFunc)());
1838 if (!cm->IsIgnored()) {
1854 bool excludeIgnored)
const {
1856 for (
int i = 0; i < cubeSerials->size(); i++) {
1858 if (!excludeIgnored || !measure->IsIgnored()) {
1859 orderedMeasures.append(measures->value((*cubeSerials)[i]));
1862 return orderedMeasures;
1870 return *cubeSerials;
1932 return !(*
this == other);
1945 return other.GetNumMeasures() == GetNumMeasures() &&
1958 other.measures == measures &&
1964 other.cubeSerials == cubeSerials &&
1965 other.referenceMeasure == referenceMeasure;
1987 if (
this != &other) {
1990 for (
int i = cubeSerials->size() - 1; i >= 0; i--) {
1991 (*measures)[cubeSerials->at(i)]->SetEditLock(
false);
1992 Delete(cubeSerials->at(i));
1997 QHashIterator< QString, ControlMeasure * > i(*other.measures);
1998 while (i.hasNext()) {
2001 *newMeasure = *i.value();
2003 if (other.referenceMeasure == i.value()) {
2080 int nmeasures = measures->size();
2081 if ( nmeasures <= 0 ) {
2087 for(
int i = 0; i < nmeasures; i++) {
2093 if ( !m->IsIgnored() || m->IsRejected() ) {
2097 stats.
AddData(m->GetSampleResidual());
2111 int nmeasures = measures->size();
2112 if ( nmeasures <= 0 ) {
2118 for(
int i = 0; i < nmeasures; i++) {
2124 if ( !m->IsIgnored() || m->IsRejected() ) {
2128 stats.
AddData(m->GetLineResidual());
2142 int nmeasures = measures->size();
2143 if ( nmeasures <= 0 ) {
2149 for(
int i = 0; i < nmeasures; i++) {
2155 if ( m->IsIgnored() || m->IsRejected() ) {
2159 stats.
AddData(m->GetSampleResidual());
2160 stats.
AddData(m->GetLineResidual());
2172 int nmeasures = measures->size();
2173 if ( nmeasures <= 0 ) {
2177 for(
int i = 0; i < nmeasures; i++) {
This class defines a body-fixed surface point.
Status SetAprioriSurfacePointSource(SurfacePointSource::Source source)
This updates the source of the surface point.
void Coordinate(double p[3]) const
Returns the x,y,z of the surface intersection in BodyFixed km.
bool HasSerialNumber(QString serialNumber) const
Return true if given serial number exists in point.
virtual CameraType GetCameraType() const =0
Returns the type of camera that was created.
void UpdatePointReference(ControlPoint *point, QString oldId)
Updates the key reference (poind Id) from the old one to what the point id was changet to...
void ZeroNumberOfRejectedMeasures()
Initialize the number of rejected measures to 0.
bool IsReferenceExplicit() const
The distance is being specified in kilometers.
bool editLock
This stores the edit lock state.
void emitNetworkStructureModified()
This method is a wrapper to emit the networkStructureModified() signal.
void SetNumberOfRejectedMeasures(int numRejected)
Set (update) the number of rejected measures for the control point.
double DetectorSample() const
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.
A Constrained point is a Control Point whose lat/lon/radius is somewhat established and should not be...
A Fixed point is a Control Point whose lat/lon is well established and should not be changed...
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.
CameraDistortionMap * DistortionMap()
Returns a pointer to the CameraDistortionMap object.
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.
virtual bool SetFocalPlane(const double dx, const double dy)
Compute detector position (sample,line) from focal plane coordinates.
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'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...
ControlPoint * parentPoint
Pointer to parent ControlPoint, may be null.
bool jigsawRejected
This stores the jigsaw rejected state.
PointType
These are the valid 'types' of point.
Status ComputeResiduals_Millimeters()
This method computes the residuals for a point.
QString GetReferenceSN() const
bool isValid() const
Test if this displacement has been initialized or not.
bool HasAprioriSurfacePointSourceFile() const
Checks to see if the surface point source file has been set.
Namespace for the standard library.
ControlNet * parentNetwork
List of Control Measures.
QString GetRadiusSourceString() const
Obtain a string representation of the RadiusSource.
QString dateTime
This is the last modified date and time.
void emitMeasureModified(ControlMeasure *measure, ControlMeasure::ModType type, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the measureModified() signal and is called whenever a change is made...
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's chooser name.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
This error is for when a programmer made an API call that was illegal.
static QString Name()
Returns the name of the application.
Status SetEditLock(bool editLock)
Set the EditLock state.
ControlPoint()
Construct a control point.
int GetNumValidMeasures() const
Status SetRejected(bool rejected)
Set "jigsaw" rejected flag for a measure.
double GetResidualRms() const
Get rms of residuals.
void measureDeleted(ControlMeasure *measure)
Updates the node for this measure's serial number to reflect the deletion.
bool HasAprioriRadiusSourceFile() const
Checks to see if the radius source file has been set.
void measureAdded(ControlMeasure *measure)
Updates the ControlNet graph for the measure's serial number to reflect the addition.
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...
static QString SurfacePointSourceToString(SurfacePointSource::Source source)
Obtain a string representation of a given SurfacePointSource.
Planetocentric latitudinal (lat/lon/rad) coordinates.
SurfacePoint adjustedSurfacePoint
This is the calculated, or aposterori, surface point.
static QString RadiusSourceToString(RadiusSource::Source source)
Obtain a string representation of a given RadiusSource.
bool SetImage(const double sample, const double line)
Sets the sample/line values of the image to get the lat/lon values.
bool operator!=(const ControlPoint &pPoint) const
Compare two Control Points for inequality.
This class is used to accumulate statistics on double arrays.
void pointIgnored(ControlPoint *point)
Update the ControlNet's internal structure when a ControlPoint is ignored.
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...
Status SetResidual(double sampResidual, double lineResidual)
Set the BundleAdjust Residual of the coordinate.
double FocalPlaneY() const
Gets the y-value in the focal plane coordinate system.
QString GetSurfacePointSourceString() const
Obtain a string representation of the SurfacePointSource.
int GetNumLockedMeasures() const
Returns the number of locked control measures.
Convert between distorted focal plane and detector coordinates.
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.
CameraGroundMap * GroundMap()
Returns a pointer to the CameraGroundMap object.
virtual bool SetUndistortedFocalPlane(double ux, double uy)
Compute distorted focal plane x/y.
Status SetDateTime(QString newDateTime)
Set the point's last modified time.
static QString DateTime(time_t *curtime=0)
Returns the date and time as a QString.
bool IsCoord2Constrained()
Return bool indicating if 2nd coordinate is Constrained or not.
QList< QString > getCubeSerialNumbers() const
#define _FILEINFO_
Macro for the filename and line number.
std::bitset< 3 > constraintStatus
This stores the constraint status of the a priori SurfacePoint.
Status SetRefMeasure(ControlMeasure *cm)
Set the point'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.
A type of error that could only have occurred due to a mistake on the user's part (e...
Status SetAprioriSurfacePoint(SurfacePoint aprioriSP)
This updates the apriori surface point.
virtual bool GetXY(const SurfacePoint &spoint, double *cudx, double *cudy, bool test=true)
Compute undistorted focal plane coordinate from ground position using current Spice from SetImage cal...
QList< ControlMeasure *> getMeasures(bool excludeIgnored=false) const
bool IsCoord1Constrained()
Return bool indicating if 1st coordinate is Constrained or not.
void pointUnIgnored(ControlPoint *point)
Update the ControlNet's internal structure when a ControlPoint is un-ignored.
This is returned when an operation cannot be performed due to a problem such as the point is ignored ...
bool referenceExplicitlySet
This indicates if a program has explicitely set the reference in this point or the implicit reference...
double Rms() const
Computes and returns the rms.
bool isValid() const
Test if this distance has been initialized or not.
const ControlPoint & operator=(const ControlPoint &pPoint)
Body-fixed rectangular x/y/z coordinates.
bool ignore
True if we should preserve but ignore the entire control point and its measures.
bool invalid
If we forced a build that we would normally have thrown an exception for then this is set to true...
SurfacePoint::CoordinateType GetCoordType()
Get the control point coordinate type (see the available types in SurfacePoint.h).
CoordinateType
Defines the coordinate typ, units, and coordinate index for some of the output methods.
CameraFocalPlaneMap * FocalPlaneMap()
Returns a pointer to the CameraFocalPlaneMap object.
~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's type.
PointType type
What this control point is tying together.
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.
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
Status
This is a return status for many of the mutating (setter) method calls.
SurfacePointSource::Source aprioriSurfacePointSource
Where the apriori surface point originated from.
void Load(PvlObject &p)
Loads the PvlObject into a ControlPoint.
void SetExplicitReference(ControlMeasure *measure)
Explicitly defines a new reference measure by pointer.
double DetectorLine() const
int numberOfRejectedMeasures
This parameter is used and maintained by BundleAdjust for the jigsaw application. ...
QString chooserName
This is the user name of the person who last modified this control point.
Status SetFocalPlaneMeasured(double x, double y)
Set the focal plane x/y for the measured line/sample.
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's radius.
QString aprioriSurfacePointSourceFile
FileName where the apriori surface point originated from.
int IndexOfRefMeasure() const
Displacement is a signed length, usually in meters.
int IndexOf(ControlMeasure *, bool throws=true) const
SurfacePoint GetSurfacePoint() const
Returns the surface point (most efficient accessor).
QString GetPointTypeString() const
Obtain a string representation of the PointType.
Namespace for ISIS/Bullet specific routines.
bool IsEditLocked() const
Return value for p_editLock or implicit lock on reference measure.
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 isValid() const
This indicates whether we have a legitimate angle stored or are in an unset, or invalid, state.
double GetNumericalValue() const
Get the value associated with this log data.
bool HasDateTime() const
Returns true if the datetime is not empty.
void emitPointModified(ControlPoint *point, ControlPoint::ModType type, QVariant oldValue, QVariant newValue)
This method is a wrapper to emit the pointModified() signal and is called whenever a change is made t...
PointType GetType() const
int NumberOfConstrainedCoordinates()
Return bool indicating if point is Constrained or not.
double UndistortedFocalPlaneY() const
Gets the y-value in the undistorted focal plane coordinate system.
void AddData(const double *data, const unsigned int count)
Add an array of doubles to the accumulators and counters.
Contains Pvl Groups and Pvl Objects.
void ValidateMeasure(QString serialNumber) const
Throws an exception if none of the point's measures have the given serial number. ...
static QString PointTypeToString(PointType type)
Obtain a string representation of a given PointType.
double UndistortedFocalPlaneX() const
Gets the x-value in the undistorted focal plane coordinate system.
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.
Status SetFocalPlaneComputed(double x, double y)
Set the computed focal plane x/y for the apriori lat/lon.
QString GetCubeSerialNumber() const
Return the serial number of the cube containing the coordinate.
This is returned when the operation successfully took effect.
static PointType StringToPointType(QString pointTypeString)
Obtain a PointType given a string representation of it.
void SetRectangular(const Displacement &x, const Displacement &y, const Displacement &z, const Distance &xSigma=Distance(), const Distance &ySigma=Distance(), const Distance &zSigma=Distance())
Set surface point in rectangular body-fixed coordinates wtih optional sigmas.
void PointModified()
What the heck is the point of this?
Unless noted otherwise, the portions of Isis written by the USGS are public domain.
double FocalPlaneX() const
Gets the x-value in the focal plane coordinate system.
This is returned when the operation requires Edit Lock to be false but it is currently true...
RadiusSource::Source aprioriRadiusSource
Where the apriori surface point's radius originated from, most commonly used by jigsaw.