40 p_interestAmount = 0.0;
41 p_worstInterest = 0.0;
91 p_samples = op[
"Samples"];
94 p_lines = op[
"Lines"];
97 p_deltaLine = op[
"DeltaLine"];
108 QString msg =
"Improper format for InterestOperator PVL [" + pPvl.
fileName() +
"]";
153 int piSample,
int piLine) {
158 QString msg =
"Cannot run interest on images with no camera. Image " +
159 pCube.
fileName() +
" has no Camera";
164 Chip chip(2 *
p_deltaSamp + p_samples + pad, 2 * p_deltaLine + p_lines + pad);
173 double dSmallestDist = DBL_MAX;
175 int iLines = 2 * p_deltaLine + p_lines / 2 + 1;
176 int iSamples = 2 *
p_deltaSamp + p_samples / 2 + 1;
177 bool bCalculateInterest =
false;
179 for (
int lin = p_lines / 2 + 1; lin <= iLines; lin++) {
180 for (
int samp = p_samples / 2 + 1; samp <= iSamples; samp++) {
185 bCalculateInterest =
false;
188 if (results.isValid()) {
189 bCalculateInterest =
true;
192 if (bCalculateInterest) {
193 Chip subChip = chip.
Extract(p_samples + pad, p_lines + pad, samp, lin);
194 double interest =
Interest(subChip);
197 double dist = std::sqrt(std::pow(piSample - samp, 2.0) + std::pow(piLine - lin, 2.0));
198 if (interest == dBestInterest && dist > dSmallestDist) {
202 dBestInterest = interest;
205 dSmallestDist = dist;
216 if (pUnivGrndMap.
SetImage(piSample, piLine)) {
217 p_interestAmount = dBestInterest;
222 p_interestAmount = dBestInterest;
244 QString psOverlapListFile) {
249 if (psOverlapListFile !=
"") {
269 int iNumMeasures = pCPoint.GetNumMeasures();
270 bool bPntEditLock = pCPoint.IsEditLocked();
278 for (
int measure = 0; measure < iNumMeasures; measure++) {
289 PvlGroup pvlMeasureGrp(
"MeasureDetails");
294 if (bMeasureLocked) {
298 if (!newMeasure->IsIgnored()) {
303 if (!results.isValid()) {
305 pvlMeasureGrp +=
Isis::PvlKeyword(
"UnIgnored",
"Failed Validation Test but not "
306 "Ignored as Point EditLock is True");
308 else if (bMeasureLocked == measure) {
313 pvlMeasureGrp +=
Isis::PvlKeyword(
"Ignored",
"Failed Emission, Incidence, Resolution "
314 "and/or Dn Value Test");
315 newMeasure->SetIgnored(
true);
317 piMeasuresModified++;
326 pPvlObj += pvlMeasureGrp;
329 if ((iNumMeasures - iMsrIgnored) < 2) {
332 "but Point EditLock is True");
361 int iPointsModified = 0;
362 int iMeasuresModified = 0;
371 for (
int point = 0; point < pNewNet.
GetNumPoints(); ++point) {
384 int numMeasures = newPnt->GetNumMeasures();
386 bool bRefLocked =
false;
387 int iOrigRefIndex = -1;
398 (iNumMeasuresLocked == 0 || (iNumMeasuresLocked > 0 && bRefLocked))) {
402 if (newPnt->IsEditLocked() || iNumMeasuresLocked > 0) {
408 if (*newPnt != origPnt) {
417 double dReferenceLat = 0, dReferenceLon = 0;
418 if (iBestMeasureIndex >= 0) {
425 bestCamera = bestCube->
camera();
435 bestCamera->
SetImage(dBestSample, dBestLine);
446 for (
int measure = 0; measure < numMeasures; ++measure) {
453 PvlGroup pvlMeasureGrp(
"MeasureDetails");
456 newMeasure->GetLine()));
459 if (!newMeasure->IsIgnored() && iBestMeasureIndex >= 0 &&
464 newMeasure->SetIgnored(
false);
470 measureCamera = measureCube->
camera();
478 measureCamera->
InCube()) {
480 if (measure == iBestMeasureIndex) {
494 double dSample = measureCamera->
Sample();
495 double dLine = measureCamera->
Line();
497 double origSample = newMeasure->GetSample();
498 double origLine = newMeasure->GetLine();
504 if (!results.isValid()) {
506 pvlMeasureGrp +=
Isis::PvlKeyword(
"Ignored",
"Failed Validation Test-" + results.toString());
507 newMeasure->SetIgnored(
true);
518 newMeasure->SetIgnored(
true);
519 if (!measureCamera->
InCube()) {
520 pvlMeasureGrp +=
Isis::PvlKeyword(
"Comments",
"New location is not in the Image");
528 newMeasure->SetIgnored(
true);
531 if (newMeasure != origPnt[measure]) {
532 iMeasuresModified ++;
540 pvlPointObj += pvlMeasureGrp;
544 if ((numMeasures - iNumIgnore) < 2) {
551 if (*newPnt != origPnt) {
555 if (!newPnt->IsIgnored() && iBestMeasureIndex != iOrigRefIndex) {
557 PvlGroup pvlRefChangeGrp(
"ReferenceChangeDetails");
558 if (iOrigRefIndex >= 0) {
573 if (newPnt->GetAprioriSurfacePointSource() == ControlPoint::SurfacePointSource::Reference) {
574 pvlRefChangeGrp +=
Isis::PvlKeyword(
"AprioriSource",
"Reference is the source and has changed");
577 pvlPointObj += pvlRefChangeGrp;
589 if (numMeasures == 0) {
590 QString sComment =
"Comment";
595 if (newPnt->IsIgnored()) {
596 QString sComment =
"Comment";
602 QString sComment =
"Comment";
607 QString sComment =
"Comment";
612 if (iNumMeasuresLocked > 0 && !bRefLocked) {
613 pvlPointObj +=
Isis::PvlKeyword(
"Error",
"Point has a Measure with EditLock set to true "
614 "but the Reference is not Locked");
617 for (
int measure = 0; measure < newPnt->GetNumMeasures(); measure++) {
648 const geos::geom::MultiPolygon *overlapPoly = NULL;
652 if (overlapPoly == NULL) {
653 QString msg =
"Unable to find overlap polygon for point [" +
654 pCnetPoint.
GetId() +
"]";
659 std::vector <PvlGroup> pvlGrpVector;
664 int iBestMeasureIndex = -1;
667 for (
int measure = 0; measure < pCnetPoint.GetNumMeasures(); ++measure) {
673 if (!origMsr->IsIgnored()) {
693 iBestMeasureIndex = measure;
702 return iBestMeasureIndex;
721 int iOrigSample = (int)(pCnetMeasure.GetSample() + 0.5);
722 int iOrigLine = (int)(pCnetMeasure.GetLine() + 0.5);
729 Chip chip(2 *
p_deltaSamp + p_samples + pad, 2 * p_deltaLine + p_lines + pad);
730 chip.
TackCube(iOrigSample, iOrigLine);
738 double dSmallestDist = DBL_MAX;
740 int iLines = 2 * p_deltaLine + p_lines / 2 + 1;
741 int iSamples = 2 *
p_deltaSamp + p_samples / 2 + 1;
742 bool bCalculateInterest =
false;
743 for (
int lin = p_lines / 2 + 1; lin <= iLines; lin++) {
744 for (
int samp = p_samples / 2 + 1; samp <= iSamples; samp++) {
749 bCalculateInterest =
false;
753 if (results.isValid()) {
754 bCalculateInterest =
true;
757 if (bCalculateInterest) {
758 Chip subChip = chip.
Extract(p_samples + pad, p_lines + pad, samp, lin);
759 double interest =
Interest(subChip);
763 double dist = std::sqrt(std::pow(iOrigSample - samp, 2.0) +
764 std::pow(iOrigLine - lin, 2.0));
765 if (interest == dBestInterest && dist > dSmallestDist) {
769 dBestInterest = interest;
770 dSmallestDist = dist;
800 if (camera->
SetImage(iOrigSample, iOrigLine)) {
803 pCube.
read(inPortal);
836 int exactMatchIndex = -1;
838 for (
int overlapIndex = 0; ((exactMatchIndex == -1) && (overlapIndex <
mOverlaps.
Size()));
843 if (overlap->Size() != pCnetPoint.GetNumMeasures())
850 for (
int measureIndex = 0;
851 measureIndex < pCnetPoint.GetNumMeasures();
853 if (measureIndex == numMatches) {
862 if (numMatches == pCnetPoint.GetNumMeasures()) {
863 exactMatchIndex = overlapIndex;
867 if (exactMatchIndex < 0) {
871 return mOverlaps[exactMatchIndex]->Polygon();
887 geos::geom::Geometry *geomIntersect1, *geomIntersect2;
890 QString sn1 = pCnetPoint[0]->GetCubeSerialNumber();
891 Cube *inCube1 = mCubeMgr.OpenCube(mSerialNumbers.FileName(sn1));
892 inCube1->
read((
Blob &)measPolygon1);
895 QString sn2 = pCnetPoint[1]->GetCubeSerialNumber();
896 Cube *inCube2 = mCubeMgr.OpenCube(mSerialNumbers.FileName(sn2));
897 inCube2->
read((
Blob &)measPolygon2);
901 (
const geos::geom::Geometry *)measPolygon2.Polys());
903 for (
int measureIndex = 2; measureIndex < pCnetPoint.GetNumMeasures(); measureIndex ++) {
904 QString sn3 = pCnetPoint[measureIndex]->GetCubeSerialNumber();
905 Cube *inCube3 = mCubeMgr.OpenCube(mSerialNumbers.FileName(sn3));
906 inCube3->
read((
Blob &)measPolygon3);
910 (
const geos::geom::Geometry *)measPolygon3.Polys());
911 geomIntersect1 = geomIntersect2;
924 return(int1 >= int2);