Skip to content

Commit bc5b6fe

Browse files
author
deseilligny
committed
Bug in cCdts_CheckBoardTarget.cpp
1 parent d81027e commit bc5b6fe

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

MMVII/src/CodedTarget/cCdts_CheckBoardTarget.cpp

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -876,8 +876,11 @@ class cOptimPosCdM : public cOptimSymetryOnImage<tREAL4>
876876
// cPt1dr Value(const cPt2dr & ) const override;
877877
typedef cSegment2DCompiled<tREAL8> tSeg;
878878

879+
bool IsOk() const {return mIsOk;}
880+
879881
private :
880-
void AddPts1Seg(const cPt2dr & aMaster, const cPt2dr & aSecond,bool toAvoid2);
882+
bool mIsOk;
883+
bool AddPts1Seg(const cPt2dr & aMaster, const cPt2dr & aSecond,bool toAvoid2);
881884
const cCdMerged& mCdM;
882885
};
883886

@@ -888,11 +891,12 @@ cOptimPosCdM::cOptimPosCdM(const cCdMerged & aCdM,const cDiffInterpolator1D & aI
888891
mCdM (aCdM)
889892
// mCurInt (aInt)
890893
{
891-
AddPts1Seg(aCdM.CornerlEl_WB(), aCdM.CornerlEl_BW(),true);
892-
AddPts1Seg(aCdM.CornerlEl_BW(), aCdM.CornerlEl_WB(),false);
894+
mIsOk = AddPts1Seg(aCdM.CornerlEl_WB(), aCdM.CornerlEl_BW(),true)
895+
&& AddPts1Seg(aCdM.CornerlEl_BW(), aCdM.CornerlEl_WB(),false)
896+
;
893897
}
894898

895-
void cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,bool toAvoid2)
899+
bool cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,bool toAvoid2)
896900
{
897901
cPt2dr aCorn1 = aSCorn1 * mCdM.mScale;
898902
cPt2dr aCorn2 = aSCorn2 * mCdM.mScale;
@@ -903,14 +907,18 @@ void cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,boo
903907
// cPt2dr aCorn2 = aSCorn2 * mScale;
904908

905909
int aNbX = round_up(aL1/aStep);
906-
tREAL8 aStepX = aL1 / aNbX;
907-
908910
int aNbY = round_up(aWidth/aStep);
911+
if ((aNbX==0) || (aNbY==0))
912+
return false;
913+
914+
tREAL8 aStepX = aL1 / aNbX;
909915
tREAL8 aStepY = aWidth / aNbY;
910916

911917
tSeg aSeg1(mCdM.mC0,aCorn1);
912918
tSeg aSeg2(mCdM.mC0,aCorn2);
913919

920+
// StdOut() << " A11S " << aNbX << " " << aNbX << "\n";
921+
914922
for (int aKX=-aNbX ; aKX<=aNbX ; aKX++)
915923
{
916924
for (int aKY=0 ; aKY<=aNbY ; aKY++) // KY=0 : we take only one point /2
@@ -927,6 +935,8 @@ void cOptimPosCdM::AddPts1Seg(const cPt2dr & aSCorn1, const cPt2dr & aSCorn2,boo
927935
}
928936
}
929937
}
938+
939+
return true;
930940
}
931941

932942
/* ********************************************* */
@@ -946,6 +956,8 @@ cCdMerged::cCdMerged(const cDataIm2D<tREAL4> * aDIm0,const cCdEllipse & aCDE,tRE
946956
void cCdMerged::GradOptimizePosition(const cDiffInterpolator1D & anInt,tREAL8 aStepEnd)
947957
{
948958
cOptimPosCdM aCdGrad(*this,anInt);
959+
if (! aCdGrad.IsOk())
960+
return;
949961
// StdOut() << "----------- TEST GRAD ---------------- V0=" << aCdGrad.Value(cPt2dr(0,0)) << " \n";
950962

951963
aCdGrad.IterLeastSqGrad(aStepEnd,5);
@@ -955,6 +967,9 @@ void cCdMerged::GradOptimizePosition(const cDiffInterpolator1D & anInt,tREAL8 aS
955967
void cCdMerged::HeuristikOptimizePosition(const cDiffInterpolator1D & anInt,tREAL8 aStepEnd)
956968
{
957969
cOptimPosCdM aCdtOpt(*this,anInt);
970+
if (! aCdtOpt.IsOk())
971+
return;
972+
958973
cOptimByStep anOpt(aCdtOpt,true,1.0);
959974

960975

0 commit comments

Comments
 (0)