diff --git a/.github/workflows/build_mmvii.yml b/.github/workflows/build_mmvii.yml index d8b9190f0e..32a10d78b1 100644 --- a/.github/workflows/build_mmvii.yml +++ b/.github/workflows/build_mmvii.yml @@ -150,7 +150,7 @@ jobs: # dll for GDAL (CGDAL require PROJ too) cp blosc.dll cfitsio.dll charset.dll comerr64.dll freetype.dll freexl.dll gdal.dll geos.dll geos_c.dll geotiff.dll gssapi64.dll ${MMVII_BINDIR}/ cp hdf.dll hdf5.dll hdf5_cpp.dll hdf5_hl.dll ${MMVII_BINDIR}/ - cp iconv.dll k5sprt64.dll krb5_64.dll lcms2.dll libbz2.dll libexpat.dll libkea.dll liblz4.dll libminizip.dll libpng16.dll ${MMVII_BINDIR}/ + cp iconv.dll k5sprt64.dll krb5_64.dll lcms2.dll libbz2.dll libexpat.dll libjpeg.dll libkea.dll liblz4.dll libminizip.dll libpng16.dll ${MMVII_BINDIR}/ cp libpq.dll libsharpyuv.dll libssl-3-x64.dll libwebp.dll libxml2.dll ${MMVII_BINDIR}/ cp mfhdf.dll netcdf.dll openjp2.dll pcre2-8.dll poppler.dll spatialite.dll tiledb.dll xdr.dll xerces-c_3_2.dll zip.dll ${MMVII_BINDIR}/ diff --git a/MMVII/src/Bench/BenchGlob.cpp b/MMVII/src/Bench/BenchGlob.cpp index c3265cb975..3868e6ca60 100755 --- a/MMVII/src/Bench/BenchGlob.cpp +++ b/MMVII/src/Bench/BenchGlob.cpp @@ -366,20 +366,6 @@ cAppli_MMVII_Bench::cAppli_MMVII_Bench (const std::vector & aVArgs, mNumBugRecall (-1), mDoBUSD (false) { - if (The_MMVII_DebugLevel < The_MMVII_DebugLevel_InternalError_tiny) - { - StdOut() << "WARNN MMVII Bench requires highest level of debug " << std::endl ; getchar(); - } - else - { -/* - MMVII_INTERNAL_ASSERT_always - ( - The_MMVII_DebugLevel >= The_MMVII_DebugLevel_InternalError_tiny, - "MMVII Bench requires highest level of debug" - ); -*/ - } } @@ -394,7 +380,22 @@ cAppliBenchAnswer cAppli_MMVII_Bench::BenchAnswer() const int cAppli_MMVII_Bench::Exe() { - if (!IsInit(&mShow)) + if (The_MMVII_DebugLevel < The_MMVII_DebugLevel_InternalError_tiny) + { + StdOut() << "WARNN MMVII Bench requires highest level of debug " << std::endl ; + } + else + { + /* + MMVII_INTERNAL_ASSERT_always + ( + The_MMVII_DebugLevel >= The_MMVII_DebugLevel_InternalError_tiny, + "MMVII Bench requires highest level of debug" + ); + */ + } + + if (!IsInit(&mShow)) mShow = IsInit(&mPat); // Becoz, if mPat init, few bench => we can display msg cParamExeBench aParam(mPat,mKeyBug,mLevMin,mShow); diff --git a/MMVII/src/BundleAdjustment/cAppliBundAdj.cpp b/MMVII/src/BundleAdjustment/cAppliBundAdj.cpp index 1be98c9e79..f182390b86 100644 --- a/MMVII/src/BundleAdjustment/cAppliBundAdj.cpp +++ b/MMVII/src/BundleAdjustment/cAppliBundAdj.cpp @@ -247,7 +247,6 @@ int cAppliBundlAdj::Exe() mPhProj.DPPointsMeasures().SetDirInIfNoInit(mDataDir); mPhProj.DPMulTieP().SetDirInIfNoInit(mDataDir); mPhProj.DPRigBloc().SetDirInIfNoInit(mDataDir); // RIGIDBLOC - mPhProj.DPClinoMeters().SetDirInIfNoInit(mDataDir); // CLINOBLOC mPhProj.FinishInit(); diff --git a/MMVII/src/CodedTarget/CodedTarget.h b/MMVII/src/CodedTarget/CodedTarget.h index e79714abd3..9dda06a812 100755 --- a/MMVII/src/CodedTarget/CodedTarget.h +++ b/MMVII/src/CodedTarget/CodedTarget.h @@ -133,7 +133,7 @@ class cGeomSimDCT /// defaut constructor usefull for serialization cGeomSimDCT(); /// constructor used afetr randoming generating parameters - cGeomSimDCT(const cOneEncoding & anEncod,const cPt2dr& aC,const double& aR1,const double& aR2); + cGeomSimDCT(const cOneEncoding & anEncod,const cPt2dr& aC,const double& aR1,const double& aR2, const std::string & aName); /// Do to simulated target intersect, used to avoid overlapping target in images bool Intersect(const cGeomSimDCT & aG2) const ; @@ -148,7 +148,7 @@ class cGeomSimDCT cPt2dr mCornEl2; ///< Theoreticall corner 2 of ellipse double mR1; ///< "small" size of deformaed rectangle double mR2; ///< "big " size .... - // std::string mName; + std::string mName; }; /// method for serializing cGeomSimDCT void AddData(const cAuxAr2007 & anAux,cGeomSimDCT & aGSD); diff --git a/MMVII/src/CodedTarget/cSimulTarget.cpp b/MMVII/src/CodedTarget/cSimulTarget.cpp index 3f9c8fb132..cb5c363929 100755 --- a/MMVII/src/CodedTarget/cSimulTarget.cpp +++ b/MMVII/src/CodedTarget/cSimulTarget.cpp @@ -35,13 +35,14 @@ void cGeomSimDCT::Translate(const cPt2dr & aTr) } -cGeomSimDCT::cGeomSimDCT(const cOneEncoding & anEncod,const cPt2dr& aC,const double& aR1,const double& aR2): +cGeomSimDCT::cGeomSimDCT(const cOneEncoding & anEncod, const cPt2dr& aC, const double& aR1, const double& aR2, const std::string &aName): mResExtr (nullptr), mEncod (anEncod), // mNum (aNum), mC (aC), mR1 (aR1), - mR2 (aR2) + mR2 (aR2), + mName(aName) { } @@ -215,7 +216,7 @@ void cAppliSimulCodeTarget::AddPosTarget(const cOneEncoding & anEncod) double aRsmall = aRbig*RandInInterval(mRS.mRatioMinMax); // check if there is already a selected target overlaping - cGeomSimDCT aGSD(anEncod,aC,aRsmall,aRbig); + cGeomSimDCT aGSD(anEncod,aC,aRsmall,aRbig,anEncod.Name()); bool GotClose = false; for (const auto& aG2 : mRS.mVG) GotClose = GotClose || aG2.Intersect(aGSD); @@ -230,6 +231,9 @@ void cAppliSimulCodeTarget::AddPosTarget(const cOneEncoding & anEncod) void cAppliSimulCodeTarget::IncrustTarget(cGeomSimDCT & aGSD) { + // We want that random is different for each image, but deterministic, independent of number of pixel noise drawn + cRandGenerator::TheOne()->setSeed(HashValue(mNameIm+"*"+aGSD.mName,true)); + // [1] -- Load and scale image of target tIm aImT = Convert((tElem*)nullptr,mSpec->OneImTarget(aGSD.mEncod).DIm()); aImT = aImT.GaussDeZoom(mDownScale,5); @@ -369,11 +373,16 @@ int cAppliSimulCodeTarget::Exe() { if (MatchRegex(anEncod.Name(),mPatternNames)) { + // We want that random is different for each image, but deterministic for one given image + cRandGenerator::TheOne()->setSeed(HashValue(mNameIm+"/"+anEncod.Name(),true)); AddPosTarget(anEncod); - StdOut() << "Target " << anEncod.Name() << " " << mRS.mVG.back().mC << std::endl; + //StdOut() << "Target " << anEncod.Name() << " " << mRS.mVG.back().mC << std::endl; } } + if (!mRS.mVG.empty()) + StdOut() << "1st target " << mRS.mVG[0].mName << " " << mRS.mVG[0].mC << std::endl; + for (auto & aG : mRS.mVG) { IncrustTarget(aG); diff --git a/MMVII/src/ImagesBase/FileImages.cpp b/MMVII/src/ImagesBase/FileImages.cpp index c9c83a00dc..d0b0b665ff 100644 --- a/MMVII/src/ImagesBase/FileImages.cpp +++ b/MMVII/src/ImagesBase/FileImages.cpp @@ -6,9 +6,9 @@ #include #include "MMVII_Sys.h" //FIXME CM: Used by Convert_JPG. Delete when Convert_JPG refactored -//#ifdef MMVII_KEEP_MMV1_IMAGE //FIXME CM: Used by code at end of this file. Remove comment when refactored +#ifdef MMVII_KEEP_MMV1_IMAGE # include "V1VII.h" -//#endif +#endif using namespace MMVII; @@ -842,34 +842,6 @@ double DifAbsInVal(const std::string & aN1,const std::string & aN2,double aDef) } -// FIXME CM: rewrite ImageOfString_10x8, ImageOfString_DCT from MMV1 -template cIm2D BitsV1ToV2(const Im2D_Bits & aImV1) -{ - cIm2D aImV2(ToMMVII(aImV1.sz())); - cDataIm2D& aDImV2 = aImV2.DIm(); - - for (const auto & aPixV2 : aDImV2) - { - aDImV2.SetV(aPixV2,aImV1.GetI(ToMMV1(aPixV2))); - } - - - return aImV2; -} - - -cIm2D ImageOfString_10x8(const std::string & aStr ,int aSpace) -{ - Im2D_Bits<1> aImV1 = cElBitmFont::BasicFont_10x8().BasicImageString(aStr,aSpace); - return BitsV1ToV2(aImV1); -} - -cIm2D ImageOfString_DCT(const std::string & aStr ,int aSpace) -{ - Im2D_Bits<1> aImV1 = cElBitmFont::FontCodedTarget().BasicImageString(aStr,aSpace); - return BitsV1ToV2(aImV1); -} - // FIXME CM: Rewrite Convert_JPG with special API from cDataFileIm2D / CDataIm2D.toFile() void Convert_JPG(const std::string & aNameIm,bool DeleteAfter,tREAL8 aQuality,const std::string & aPost) diff --git a/MMVII/src/ImagesBase/drawtext.cpp b/MMVII/src/ImagesBase/drawtext.cpp new file mode 100644 index 0000000000..505044a506 --- /dev/null +++ b/MMVII/src/ImagesBase/drawtext.cpp @@ -0,0 +1,1579 @@ +#include "MMVII_Image2D.h" + +using namespace MMVII; + +// Taken from MicMac v1 + +namespace { // Private + +// We will make it public later if needed +class cBitmFont +{ +public : + static cBitmFont & BasicFont_10x8(); + static cBitmFont & FontCodedTarget(); + virtual cIm2D ImChar(char) = 0; + virtual ~cBitmFont() {} + + cIm2D BasicImageString(const std::string & ,int aSpace); + cIm2D MultiLineImageString(const std::string & aStrInit,const cPt2di& aSpace,cPt2di aRab,int Centering); +}; + +} // namespace Private + +namespace MMVII { +// The public API ... +cIm2D ImageOfString_10x8(const std::string & aStr ,int aSpace) +{ + return cBitmFont::BasicFont_10x8().BasicImageString(aStr,aSpace); +} + +cIm2D ImageOfString_DCT(const std::string & aStr ,int aSpace) +{ + return cBitmFont::FontCodedTarget().BasicImageString(aStr,aSpace); +} + +cIm2D MultiLineImageOfString_10x8(const std::string & aStrInit,const cPt2di& aSpace,cPt2di aRab,int Centering) +{ + return cBitmFont::BasicFont_10x8().MultiLineImageString(aStrInit,aSpace,aRab,Centering); +} + +cIm2D MultiLineImageOfString_DCT(const std::string & aStrInit,const cPt2di& aSpace,cPt2di aRab,int Centering) +{ + return cBitmFont::FontCodedTarget().MultiLineImageString(aStrInit,aSpace,aRab,Centering); +} + +} // namespace MMVII + +namespace { // private + +std::list SplitStrings(const std::string & aCppStr) +{ + std::list aRes; + const char * aStrInit = aCppStr.c_str(); + const char * aStr0 = aStrInit; + bool Cont = (*aStr0!=0); + + while (Cont) + { + const char * aStr1 = aStr0; + while ((*aStr1!=0) && (*aStr1 !='\n')) + aStr1++; + aRes.push_back(std::string(aStr0,aStr1)); + + if (*aStr1==0) + Cont= false; + else + aStr0 = aStr1+1; + } + + return aRes; +} + + +/******************************************************/ +/* */ +/* cImplemBitmFont */ +/* */ +/******************************************************/ + +class cImplemBitmFont : public cBitmFont, public cObj2DelAtEnd +{ +public : + + cImplemBitmFont(const cPt2di& aSz,const std::string & aName); + virtual ~cImplemBitmFont(); + void AddChar(char,const char*); + +private : + virtual cIm2D ImChar(char) ; + + + std::map *> mDico; + + cPt2di mSz; + std::string mName; +}; + +cImplemBitmFont::cImplemBitmFont(const cPt2di& aSz,const std::string & aName) : + mSz (aSz), + mName (aName) +{ +} + +cImplemBitmFont::~cImplemBitmFont() +{ + for (auto& it: mDico) + { + delete it.second; + } +} + + +cIm2D cImplemBitmFont::ImChar(char aChar) +{ + auto aResIt = mDico.find(aChar); + MMVII_INTERNAL_ASSERT_strong(aResIt != mDico.end(), std::string("cImplemBitmFont::ImChar cannot Get Im for font ") + mName + " With Char [" + aChar + "]"); + return *aResIt->second; +} + +void cImplemBitmFont::AddChar(char anEntry,const char* aStr) +{ + MMVII_INTERNAL_ASSERT_strong( + strlen(aStr) == (size_t)(mSz.x()*mSz.y()), + std::string("cImplemBitmFont::AddChar bad size for char=[") + anEntry + "] ASCII=" + std::to_string((int)anEntry) + ); + auto aVal = new cIm2D (mSz); + mDico[anEntry] = aVal; + + for (const auto& aPt : aVal->DIm()) { + aVal->DIm().SetV(aPt,*(aStr++) == '#' ? 255 : 0); + } +} + +/******************************************************/ +/* */ +/* cBitmFont */ +/* */ +/******************************************************/ + +cIm2D cBitmFont::BasicImageString(const std::string & aStr,int aSpace) +{ + bool isHor = (aSpace>=0); + aSpace = std::abs(aSpace); + + if (aStr=="") + { + return ImChar(' '); + } + cPt2di aSzRes(0,0); + cPt2di aSzIm (0,0); + + for (const char * aC = aStr.c_str(); (*aC) ; aC++) + { + cIm2D anIm = ImChar(*aC); + aSzIm = anIm.DIm().Sz(); + if (aSzRes.x()==0) + { + aSzRes = aSzIm; + } + else + { + if (isHor) + { + aSzRes.x() += aSzIm.x() + aSpace; + MMVII_INTERNAL_ASSERT_strong(aSzRes.y() == aSzIm.y(),"cBitmFont::BasicImageString: ImageString Height variable for font"); + } + else + { + aSzRes.y() += aSzIm.y() + aSpace; + MMVII_INTERNAL_ASSERT_strong(aSzRes.x()==aSzIm.x(),"cBitmFont::BasicImageString: ImageString Width variable for font"); + } + } + } + + cIm2D aRes(aSzRes, nullptr, eModeInitImage::eMIA_Null); + cPt2di anOffset(0,0); + + for (const char * aC = aStr.c_str(); (*aC) ; aC++) + { + cIm2D anIm = ImChar(*aC); + const cPt2di& aSzIm = anIm.DIm().Sz(); + auto aResOffset = anOffset + aRes.DIm().P0() - anIm.DIm().P0(); + for (const auto& aPt : anIm.DIm()) + { + aRes.DIm().SetV(aPt + aResOffset, anIm.DIm().GetV(aPt)); + } + if (isHor) + anOffset.x() += aSzIm.x() + aSpace; + else + anOffset.y() += aSzIm.y() + aSpace; + } + + return aRes; +} + +cIm2D cBitmFont::MultiLineImageString(const std::string & aStrInit,const cPt2di& aSpace,cPt2di aRab,int Centering) +{ + std::list aLStr = SplitStrings(aStrInit); + + std::list> aLIm; + + int aXMax=0; + int aSomY = 0; + + std::list> aLB; + for (std::list::const_iterator itS=aLStr.begin() ;itS!=aLStr.end() ; itS++) + { + cIm2D anIm = BasicImageString(*itS,aSpace.x()); + cPt2di aSz = anIm.DIm().Sz(); + aXMax = std::max(aXMax,aSz.x()); + aSomY += aSz.y(); + aLB.push_back(anIm); + } + aSomY += aSpace.y()*(int)(aLStr.size()-1); + if (aRab.x()<0) // Alors Rab est une taille totale + { + aRab = - aRab; + aRab = (aRab- cPt2di(aXMax,aSomY))/2; + } + + cPt2di aSzRes = (aRab*2) + cPt2di(aXMax,aSomY); + + cIm2D aRes(aSzRes, nullptr, eModeInitImage::eMIA_Null); + + cPt2di aP0(0,aRab.y()); + + for (std::list >::const_iterator itB=aLB.begin() ;itB!=aLB.end() ; itB++) + { + + cIm2D anIm = *itB; + cPt2di aSz = anIm.DIm().Sz(); + + aP0.x() = aRab.x(); // cas -1 + if (Centering==0) + aP0.x() = (aSzRes.x()-aSz.x()) /2; + else if (Centering>0) + aP0.x() = (aSzRes.x()-aSz.x()) - aRab.x(); + + auto aResOffset = aP0 + aRes.DIm().P0() - anIm.DIm().P0(); + for (const auto& aPt : anIm.DIm()) + { + aRes.DIm().SetV(aPt + aResOffset, anIm.DIm().GetV(aPt)); + } + aP0.y() += aSz.y() + aSpace.y(); + } + + return aRes; +} + + +cBitmFont & cBitmFont::FontCodedTarget() +{ + static cImplemBitmFont* theFontCodedTarget = 0; + if (theFontCodedTarget !=0) + return *theFontCodedTarget; + + theFontCodedTarget = new cImplemBitmFont(cPt2di(11,11),"DCT"); + cMMVII_Appli::CurrentAppli().AddObj2DelAtEnd(theFontCodedTarget); + + theFontCodedTarget->AddChar + ( + '0', + "..####....." + ".#....#...." + ".#....#...." + ".#....#...." + ".#....#...." + ".#....#...." + ".#....#...." + "..####....." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '1', + "....#......" + "...##......" + "..#.#......" + ".#..#......" + "....#......" + "....#......" + "....#......" + "....#......" + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '2', + ".###......." + "#...#......" + "#....#....." + "....#......" + "...#......." + "..#........" + "######....." + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '3', + "..##......." + ".#..#......" + "....#......" + "..##......." + ".....#....." + ".#...#....." + "..###......" + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '4', + "....#......" + "...#......." + "..#........" + ".#........." + "#...#......" + "######....." + "....#......" + "....#......" + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '5', + ".#####....." + ".#........." + "#.........." + "####......." + "....#......" + ".....#....." + ".....#....." + "#####......" + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '6', + "...###....." + "..#...#...." + " #........." + ".####......" + "#.....#...." + "#.....#...." + ".#####....." + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '7', + ".#####....." + ".....#....." + "....#......" + "..####....." + "...#......." + "...#......." + "..#........" + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '8', + "...###....." + "..#...#...." + "..#...#...." + "...###....." + "..#...#...." + ".#.....#..." + ".#....#...." + "..####....." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + '9', + "..#####...." + ".#.....#..." + ".#....##..." + "..####.#..." + ".......#..." + ".....#....." + "..###......" + "..........." + "..........." + "..........." + "..........." + ); + + + theFontCodedTarget->AddChar + ( + 'A', + "...###....." + "..#...#...." + ".#.....#..." + ".#######..." + ".#.....#..." + ".#.....#..." + ".#.....#..." + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + 'B', + ".####......" + ".#...#....." + ".#..#......" + ".######...." + ".#.....#..." + ".#.....#..." + ".######...." + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + 'C', + "...####...." + ". #...#...." + ".#........." + ".#........." + "#.........." + "#....#....." + ".####......" + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + 'D', + "..####....." + "..#...#...." + "..#....#..." + ".#....#...." + ".#....#...." + ".#..##....." + "####......." + "..........." + "..........." + "..........." + "..........." + ); + + theFontCodedTarget->AddChar + ( + 'E', + "..#####...." + "..#........" + ".#........." + ".###......." + ".#........." + "#.........." + "#####......" + "..........." + "..........." + "..........." + "..........." + ); + theFontCodedTarget->AddChar + ( + 'F', + "..######..." + "..#........" + "..#........" + "..###......" + ".#........." + ".#........." + ".#........." + "..........." + "..........." + "..........." + "..........." + ); + + return *theFontCodedTarget; +} + + +cBitmFont & cBitmFont::BasicFont_10x8() +{ + static cImplemBitmFont *theFont_10x8 = 0; + if (theFont_10x8 !=0) + return *theFont_10x8; + + theFont_10x8 = new cImplemBitmFont(cPt2di(10,10),"El_10x8"); + cMMVII_Appli::CurrentAppli().AddObj2DelAtEnd(theFont_10x8); + + theFont_10x8->AddChar + ( + '_', + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + "..#######." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + ' ', + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '.', + ".........." + ".........." + ".........." + ".........." + ".........." + ".........." + "....##...." + "....##...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '0', + "...####..." + "..#....#.." + "..#....#.." + "..#....#.." + "..#....#.." + "..#....#.." + "..#....#.." + "...####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '1', + "......#..." + ".....##..." + "....#.#..." + "...#..#..." + "......#..." + "......#..." + "......#..." + "....####.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '2', + "...###...." + "..#...#..." + "..#....#.." + "......#..." + ".....#...." + "....#....." + "...#......" + "..######.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '3', + "....##...." + "...#..#..." + "......#..." + "....##...." + "......#..." + ".......#.." + "...#...#.." + "....###..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '4', + "......#..." + ".....#...." + "....#....." + "...#......" + "..#...#..." + "..######.." + "......#..." + "......#..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '5', + "..#####..." + "..#......." + "..#......." + "..####...." + "......#..." + ".......#.." + ".......#.." + "..#####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '6', + ".....###.." + "....#....." + ".. #......" + "..#......." + "..#.####.." + "..##....#." + "..#.....#." + "...#####.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '7', + "...#####.." + ".......#.." + "......#..." + "....####.." + ".....#...." + ".....#...." + "....#....." + "....#....." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '8', + "...####..." + "..#....#.." + "..#....#.." + "...####..." + "..#....#.." + ".#......#." + ".#......#." + "..######.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + '9', + "..#####..." + ".#.....#.." + ".#....##.." + "..####.#.." + ".......#.." + "......#..." + ".....#...." + "..###....." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'A', + "...####..." + "..#....#.." + ".#......#." + ".#......#." + ".########." + ".#......#." + ".#......#." + ".#......#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'B', + ".#####...." + ".#....#..." + ".#....#..." + ".#####...." + ".#.....#.." + ".#......#." + ".#.....#.." + ".######..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'C', + "...####..." + "..#....#.." + "..#......." + "..#......." + "..#......." + "..#......." + "..#....#.." + "...####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'D', + "..####...." + "..#...#..." + "..#....#.." + "..#....#.." + "..#....#.." + "..#....#.." + "..#...#..." + "..####...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'E', + "..######.." + "..#......." + "..#......." + "..#####..." + "..#......." + "..#......." + "..#......." + "..######.." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'F', + "..######.." + "..#......." + "..#......." + "..#####..." + "..#......." + "..#......." + "..#......." + "..#......." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'G', + "...####..." + "..#....#.." + "..#......." + "..#......." + "..#.. ###." + "..#....#.." + "..#....#.." + "...####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'H', + "..#....#.." + "..#....#.." + "..#....#.." + "..######.." + "..#....#.." + "..#....#.." + "..#....#.." + "..#....#.." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'I', + "..#######." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + "..#######." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'J', + "..#######." + ".......#.." + ".......#.." + ".......#.." + ".......#.." + ".......#.." + "..#...#..." + "...###...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'K', + "..#....#.." + "..#...#..." + "..#..#...." + "..##......" + "..#..#...." + "..#...#..." + "..#....#.." + "..#.....#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'L', + "..#......." + "..#......." + "..#......." + "..#......." + "..#......." + "..#......." + "..#......." + "..#######." + + ".........." + ".........." + ); + + + + + theFont_10x8->AddChar + ( + 'M', + "..#.....#." + "..##...##." + "..#.#.#.#." + "..#..#..#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'N', + "..#.....#." + "..##....#." + "..#.#...#." + "..#..#..#." + "..#...#.#." + "..#....##." + "..#.....#." + "..#.....#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'O', + "...####..." + "..#....#.." + ".#......#." + ".#......#." + ".#......#." + ".#......#." + "..#....#.." + "...####..." + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'P', + "..####...." + "..#...##.." + "..#....#.." + "..#...##.." + "..####...." + "..#......." + "..#......." + "..#......." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'Q', + "...####..." + "..#....#.." + ".#......#." + ".#......#." + ".#......#." + ".#......#." + "..#.#..#.." + "...####..." + ".....#...." + "......#..." + ); + + + theFont_10x8->AddChar + ( + 'R', + "..#####..." + "..#....#.." + "..#....#.." + "..#####..." + "..#....#.." + "..#.....#." + "..#.....#." + "..#.....#." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'S', + "...####..." + "..#....#.." + "..#......." + "...#####.." + "........#." + "........#." + "..#.....#." + "...#####.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'T', + ".########." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'U', + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#....##." + "...####.#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'V', + "..#.....#." + "..#.....#." + "..#.....#." + "...#...#.." + "...#...#.." + "...#...#.." + "....#.#..." + ".....#...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'W', + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#..#..#." + "..#.#.#.#." + "..##...##." + "..#.....#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'X', + "..#.....#." + "...#...#.." + "....#.#..." + ".....#...." + "....#.#..." + "...#...#.." + "..#.....#." + "..#.....#." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'Y', + "..#.....#." + "...#...#.." + "....#.#..." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + ".....#...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'Z', + ".########." + ".#.....#.." + "......#..." + ".....#...." + "....#....." + "...#......" + "..#.....#." + ".########." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'a', + ".........." + ".........." + "...####..." + ".......#.." + "...#####.." + "..#....#.." + "..#...##.." + "...###.#.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'b', + ".........." + ".........." + "..#......." + "..#......." + "..#####..." + "..#....#.." + "..#....#.." + "..#####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'c', + ".........." + ".........." + ".........." + "...####..." + "..#....#.." + "..#......." + "..#....#.." + "...####..." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'd', + ".........." + ".........." + ".......#.." + ".......#.." + "...#####.." + "..#....#.." + "..#....#.." + "...#####.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'e', + ".........." + ".........." + "...####..." + "..#....#.." + "..#....#.." + "..#####..." + "..#......." + "...####..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'f', + ".........." + ".....###.." + "....#....." + "...#......" + "..####...." + "...#......" + "...#......" + "...#......" + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'g', + ".........." + ".........." + ".........." + "...###.#.." + "..#...##.." + "..#....#.." + "..#....#.." + "...#####.." + + ".......#.." + "...####..." + ); + + theFont_10x8->AddChar + ( + 'h', + ".........." + "..#......." + "..#......." + "..#......." + "..#####..." + "..#....#.." + "..#....#.." + "..#....#.." + + ".........." + ".........." + ); + + + + + + theFont_10x8->AddChar + ( + 'i', + ".........." + "...#......" + ".........." + "..##......" + "...#......" + "...#......" + "....#....." + ".....##..." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'j', + ".........." + "......#..." + ".........." + "......#..." + "......#..." + "......#..." + "......#..." + "......#..." + + ".....#...." + "..###....." + ); + theFont_10x8->AddChar + ( + 'k', + ".........." + "..#......." + "..#......." + "..#...#..." + "..#..#...." + "..###....." + "..#..#...." + "..#...#..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'l', + "..##......" + "...#......" + "...#......" + "...#......" + "...#......" + "...#......" + "....#..#.." + ".....##..." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'm', + ".........." + ".........." + "..#.#.##.." + "..##.#..#." + "..#..#..#." + "..#..#..#." + "..#..#..#." + "..#..#..#." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'n', + ".........." + ".........." + "..#.####.." + "..##....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'o', + ".........." + ".........." + "....###..." + "...#...#.." + "..#.....#." + "..#.....#." + "...#...#.." + "....###..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'p', + ".........." + ".........." + "..####...." + "..#...#..." + "..#....#.." + "..#....#.." + "..#...#..." + "..####...." + "..#......." + "..#......." + ); + + + theFont_10x8->AddChar + ( + 'q', + ".........." + ".........." + "...###.#.." + "..#...##.." + "..#....#.." + "..#....#.." + "..#...##.." + "...###.#.." + ".......#.." + ".......#.." + ); + + theFont_10x8->AddChar + ( + 'r', + ".........." + ".........." + "..#.####.." + "..##......" + "..#......." + "..#......." + "..#......." + "..#......." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 's', + ".........." + ".........." + "...####..." + "..#......." + "...####..." + ".......#.." + "..#....#.." + "...####..." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 't', + ".........." + ".........." + "...#......" + "..####...." + "...#......" + "...#......" + "...#...#.." + "....###..." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'u', + ".........." + ".........." + "..#.....#." + "..#.....#." + "..#.....#." + "..#.....#." + "..#....##." + "...####.#." + + ".........." + ".........." + ); + theFont_10x8->AddChar + ( + 'v', + ".........." + ".........." + "..#.....#." + "..#.....#." + "...#...#.." + "...#...#.." + "....#.#..." + ".....#...." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'w', + ".........." + ".........." + "#.......#." + "#.......#." + ".#..#..#.." + ".#..#..#.." + "..##.##..." + "..#...#..." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'x', + ".........." + ".........." + ".........." + "..#....#.." + "...#..#..." + "....##...." + "...#..#..." + "..#....#.." + + ".........." + ".........." + ); + + theFont_10x8->AddChar + ( + 'y', + ".........." + ".........." + ".........." + "..#.....#." + "...#...#.." + "....###..." + ".....#...." + ".....#...." + + ".........." + ".........." + ); + + + theFont_10x8->AddChar + ( + 'z', + ".........." + ".........." + "..######.." + "......#..." + ".....#...." + "....#....." + "...#......" + "..######.." + + ".........." + ".........." + ); + + return *theFont_10x8; +} + +} // namespace Private diff --git a/MMVII/src/ImportFormat/ImportGCP.cpp b/MMVII/src/ImportFormat/ImportGCP.cpp index 779125135d..c4caa0f3f4 100644 --- a/MMVII/src/ImportFormat/ImportGCP.cpp +++ b/MMVII/src/ImportFormat/ImportGCP.cpp @@ -132,8 +132,8 @@ int cAppli_ImportGCP::Exe() bool withPatternAddInfoFree = IsInit(&mPatternAddInfoFree); bool wSigmaX = aNRFS.FieldIsKnown(mFieldSx); - bool wSigmaY = aNRFS.FieldIsKnown(mFieldSy); - bool wSigmaZ = aNRFS.FieldIsKnown(mFieldSz); + [[maybe_unused]] bool wSigmaY = aNRFS.FieldIsKnown(mFieldSy); // May be unused depending of 'The_MMVII_DebugLevel' + [[maybe_unused]] bool wSigmaZ = aNRFS.FieldIsKnown(mFieldSz); bool wSigmaXYZ = aNRFS.FieldIsKnown(mFieldSxyz); // too complicate to handle partiall case of fixing sigma, and btw, not pertinent ? diff --git a/MMVII/src/OrientReport/MesImQuality.cpp b/MMVII/src/OrientReport/MesImQuality.cpp index d599002b25..3b6f750e65 100644 --- a/MMVII/src/OrientReport/MesImQuality.cpp +++ b/MMVII/src/OrientReport/MesImQuality.cpp @@ -221,7 +221,7 @@ int cAppli_MesImReport::Exe() InitReportCSV(mNameReportGlobResidual,"csv",false); - AddStdHeaderStatCSV(mNameReportGlobResidual,"Image",mPropStat,{"%% Undetected","%% False Detect"}); + AddStdHeaderStatCSV(mNameReportGlobResidual,"Image",mPropStat,{"% Undetected","% False Detect"}); for (const std::string & aName : VectMainSet(0))