Skip to content

Commit

Permalink
Changes made per feedback in PR. Moved xform from .cpp to .h.
Browse files Browse the repository at this point in the history
  • Loading branch information
artmathgirl committed Jan 23, 2025
1 parent ae2b05b commit 033e367
Show file tree
Hide file tree
Showing 2 changed files with 69 additions and 78 deletions.
69 changes: 0 additions & 69 deletions isis/src/base/apps/cam2cam/cam2cam.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ find files of those names at the top level of this repository. **/
#include "Application.h"
#include "Camera.h"
#include "CameraFactory.h"
#include "Distance.h"
#include "ProcessRubberSheet.h"

using namespace std;
Expand Down Expand Up @@ -141,72 +140,4 @@ namespace Isis {
}


// Transform object constructor
cam2camXform::cam2camXform(const int inputSamples, const int inputLines,
Camera *incam, const int outputSamples,
const int outputLines, Camera *outcam,
const bool offbody, const bool trim) {
p_inputSamples = inputSamples;
p_inputLines = inputLines;
p_incam = incam;

p_outputSamples = outputSamples;
p_outputLines = outputLines;
p_outcam = outcam;
p_offbody = offbody;
p_trim = trim;
}


// Transform method mapping output line/samps to lat/lons to input line/samps
bool cam2camXform::Xform(double &inSample, double &inLine,
const double outSample, const double outLine) {

// See if the output image coordinate converts to lat/lon
if ( p_outcam->SetImage(outSample, outLine) ) {
// Get the universal lat/lon and see if it can be converted to input line/samp
double lat = p_outcam->UniversalLatitude();
double lon = p_outcam->UniversalLongitude();
Distance rad = p_outcam->LocalRadius();
if (rad.isValid()) {
if(!p_incam->SetUniversalGround(lat, lon, rad.meters())) return false;
}
else {
if(!p_incam->SetUniversalGround(lat, lon)) return false;
}
}
else if ( p_offbody ) {
double ra = p_outcam->RightAscension();
double dec = p_outcam->Declination();
if ( !p_incam->SetRightAscensionDeclination(ra,dec) ) return false;
if ( p_trim ) {
if ( p_incam->SetImage(p_incam->Sample(), p_incam->Line()) ) return (false);
}
}
else {
return false;
}

// Make sure the point is inside the input image
if (p_incam->Sample() < 0.5) return false;
if (p_incam->Line() < 0.5) return false;
if (p_incam->Sample() > p_inputSamples + 0.5) return false;
if (p_incam->Line() > p_inputLines + 0.5) return false;

// Everything is good
inSample = p_incam->Sample();
inLine = p_incam->Line();
return true;
}


int cam2camXform::OutputSamples() const {
return p_outputSamples;
}


int cam2camXform::OutputLines() const {
return p_outputLines;
}

}
78 changes: 69 additions & 9 deletions isis/src/base/apps/cam2cam/cam2cam.h
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ find files of those names at the top level of this repository. **/
#include "Application.h"
#include "Camera.h"
#include "Cube.h"
#include "Distance.h"
#include "UserInterface.h"

namespace Isis {
Expand Down Expand Up @@ -42,16 +43,73 @@ namespace Isis {
// constructor
cam2camXform(const int inputSamples, const int inputLines, Isis::Camera *incam,
const int outputSamples, const int outputLines, Isis::Camera *outcam,
const bool offbody = false, const bool trim = true);

const bool offbody = false, const bool trim = true) {

p_inputSamples = inputSamples;
p_inputLines = inputLines;
p_incam = incam;

p_outputSamples = outputSamples;
p_outputLines = outputLines;
p_outcam = outcam;
p_offbody = offbody;
p_trim = trim;
}

// destructor
~cam2camXform() {};

// Override parent's pure virtual members
bool Xform(double &inSample, double &inLine,
const double outSample, const double outLine);
int OutputSamples() const;
int OutputLines() const;
virtual ~cam2camXform() {};

/** Transform method mapping output line/samps to lat/lons to input line/samps */
inline bool Xform(double &inSample, double &inLine,
const double outSample, const double outLine) {

// See if the output image coordinate converts to lat/lon
if ( p_outcam->SetImage(outSample, outLine) ) {
// Get the universal lat/lon and see if it can be converted to input line/samp
double lat = p_outcam->UniversalLatitude();
double lon = p_outcam->UniversalLongitude();
Distance rad = p_outcam->LocalRadius();
if (rad.isValid()) {
if(!p_incam->SetUniversalGround(lat, lon, rad.meters())) return false;
}
else {
if(!p_incam->SetUniversalGround(lat, lon)) return false;
}
}
else if ( p_offbody ) {
double ra = p_outcam->RightAscension();
double dec = p_outcam->Declination();
if ( !p_incam->SetRightAscensionDeclination(ra,dec) ) return false;
if ( p_trim ) {
if ( p_incam->SetImage(p_incam->Sample(), p_incam->Line()) ) return (false);
}
}
else {
return false;
}

// Make sure the point is inside the input image
if (p_incam->Sample() < 0.5) return false;
if (p_incam->Line() < 0.5) return false;
if (p_incam->Sample() > p_inputSamples + 0.5) return false;
if (p_incam->Line() > p_inputLines + 0.5) return false;

// Everything is good
inSample = p_incam->Sample();
inLine = p_incam->Line();
return true;
}


inline int OutputSamples() const {
return p_outputSamples;
}


inline int OutputLines() const {
return p_outputLines;
}

};


Expand Down Expand Up @@ -179,6 +237,8 @@ namespace Isis {
bool m_offbodytrim;
std::shared_ptr<Transform> m_transform;
};


}

#endif

0 comments on commit 033e367

Please sign in to comment.