void cChangeCamFormat::DoAll()
{
   mEq =  mSet.NewEqCalibCroisee(mC2M,*mPIF);
   mSet.SetClosed();

   for (int aKet=0 ; aKet< 30 ; aKet++)
   {
       if (mPIF_DR)
       {
           if (aKet== 1)
	      mPIF_DR->SetFocFree(true);

           if (aKet >= 3)
	   {
	      int aDegre =  ElMin(mDegRadOut,1+ (aKet-3)/3);
	      mPIF_DR->SetDRFDegreFige(aDegre);
           }

           if (aKet >= 10)
	       mPIF_DR->SetCDistPPLie();

           if ((aKet >= 15) && (! mCDistPPLie))
               mPIF_DR->SetLibertePPAndCDist(true,true);
       }
       else 
       {
          ELISE_ASSERT(false,"Unknown Cam Modele");
       }
       int aNBP = 20;
       mSet.AddContrainte(mPIF->StdContraintes(),true);
       mSet.AddContrainte(mEq->RotF().StdContraintes(),true);

       for (int aKx=0 ; aKx<= aNBP ; aKx++)
       {
            double aPdsX = aKx / double(aNBP);
            for (int aKy=0 ; aKy<= aNBP ; aKy++)
            {
                double aPdsY = aKy / double(aNBP);
	        Pt2dr aP0  (mSz.x*aPdsX,mSz.y*aPdsY);
		Pt3dr aDir = mCamInput->F2toDirRayonL3(aP0);
		Pt2dr aPNew = ToNewCoord(aP0);
		mEq->AddObservation(aPNew,aDir);
            }
       }

        mSet.SolveResetUpdate();
   }
}
void cMA_AffineOrient::OneItere(bool isLast)
{
   ElRotation3D aR1 = mCamF1->RF().CurRot();
   ElRotation3D aR2 = mCamF2->RF().CurRot();

      std::cout << "TR = " << (aR2.tr()-aR1.tr())  << "\n";
      std::cout << "I = " <<   aR2.ImVect(Pt3dr(1,0,0))  << euclid(aR2.ImVect(Pt3dr(1,0,0))) << "\n";
      std::cout << "J = " <<   aR2.ImVect(Pt3dr(0,1,0))  << euclid(aR2.ImVect(Pt3dr(0,1,0))) << "\n";
      std::cout << "K = " <<   aR2.ImVect(Pt3dr(0,0,1))  << euclid(aR2.ImVect(Pt3dr(0,0,1))) << "\n";

   mSetEq.AddContrainte(mPIF->StdContraintes(),true);
   mSetEq.AddContrainte(mCamF1->RF().StdContraintes(),true);
   mSetEq.AddContrainte(mCamF2->RF().StdContraintes(),true);

   double aSEc2 =0;
   double aSEc =0;
   double aSP =0;
   int aNbP=0;
   for 
   (
      ElPackHomologue::iterator iT = mPack.begin();
      iT != mPack.end();
      iT++
   )
   {
       // double aD =  mCam1.EcartProj(iT->P1(),mCam2,iT->P2());
       Pt2dr aQ1  = mCam1.F2toPtDirRayonL3(iT->P1());
       Pt2dr aQ2  = mCam2.F2toPtDirRayonL3(iT->P2());
       //double aL =  mCpl12->ResiduSigneP1P2(aQ1,aQ2);
       double aL2 =  mCpl12->AddLiaisonP1P2(aQ1,aQ2,iT->Pds(),false);
       aSEc2 += ElSquare(aL2)*iT->Pds();
       aSEc += ElAbs(aL2)*iT->Pds();
       aSP  += iT->Pds();

       Pt2dr  aP1 = mGeoTer.R2ToRDisc(iT->P1());
       Pt2di  aI1  =  round_down(aP1/mPas);
       mTImResidu.oset(aI1,aL2*mFocale);
       mTImPds.oset(aI1,iT->Pds());

       if (iT->Pds() > 1e-5)
          aNbP++;
   }

   if (aNbP < mNbPtMin)
   {
      mAppli.MicMacErreur
      (
         eErrNbPointInEqOriRel,
         "Pas assez de point pour equation d'orientation relative",
         "Zone de recouvrement trop faible"
      );
   }


   mSetEq.SolveResetUpdate();
   // if (isLast)
   {
       std::cout 
           << aSEc2 << " " << aSP << " " << mPack.size()
           << " EQuad = " << (sqrt(aSEc2/aSP)*mFocale) 
           << " EAbs  = " << ((aSEc/aSP)*mFocale) 
           << "\n";
  } 
}