@@ -378,8 +378,14 @@ void SurfaceManager::generateSurfacefromWavefront(wavefront * wf){
378378
379379 mirrorDlg *md = mirrorDlg::get_Instance ();
380380 zp.unwrap_to_zernikes (*wf);
381- // check for swapped conic value
382- if (!m_ignoreInverse)
381+
382+ //
383+ // AUTO INVERT CODE STARTS HERE
384+ //
385+
386+ if (!m_ignoreInverse &&
387+ wf->m_manuallyInverted == false && // don't auto-invert if user already manually inverted
388+ wf->m_origin == WavefrontOrigin::Igram) // only auto-invert if wavefront created from processed igram
383389 {
384390 if (m_inverseMode==invNOTSET)
385391 {
@@ -413,6 +419,9 @@ void SurfaceManager::generateSurfacefromWavefront(wavefront * wf){
413419 }
414420 }
415421
422+ //
423+ // AUTO INVERT CODE ENDS HERE/
424+ //
416425
417426 ((MainWindow*)parent ())-> zernTablemodel->setValues (wf->InputZerns , !wf->useSANull );
418427 ((MainWindow*)parent ())-> zernTablemodel->update ();
@@ -806,7 +815,7 @@ void SurfaceManager::useDemoWaveFront(){
806815 createSurfaceFromPhaseMap (result,
807816 CircleOutline (QPointF (xcen,ycen),rad),
808817 CircleOutline (QPointF (0 ,0 ),0 ),
809- QString (" Demo" ));
818+ QString (" Demo" ), WavefrontOrigin::Demo );
810819}
811820
812821void SurfaceManager::waveFrontClickedSlot (int ndx)
@@ -1062,7 +1071,8 @@ void SurfaceManager::SaveWavefronts(bool saveNulled){
10621071}
10631072void SurfaceManager::createSurfaceFromPhaseMap (cv::Mat phase, CircleOutline outside,
10641073 CircleOutline center,
1065- const QString &name, QVector<std::vector<cv::Point> > polyArea){
1074+ const QString &name, WavefrontOrigin origin,
1075+ QVector<std::vector<cv::Point> > polyArea){
10661076
10671077 wavefront *wf;
10681078
@@ -1100,6 +1110,7 @@ void SurfaceManager::createSurfaceFromPhaseMap(cv::Mat phase, CircleOutline outs
11001110 m_surfaceTools->addWaveFront (wf->name );
11011111 m_currentNdx = m_wavefronts.size ()-1 ;
11021112 }
1113+ wf->m_origin = origin;
11031114 wf->m_outside = outside;
11041115 wf->m_inside = center;
11051116 wf->data = phase;
@@ -1129,6 +1140,7 @@ wavefront * SurfaceManager::readWaveFront(const QString &fileName){
11291140 }
11301141 spdlog::get (" logger" )->trace (" readWaveFront() step 1" );
11311142 wavefront *wf = new wavefront ();
1143+ wf->m_origin = WavefrontOrigin::File;
11321144 double width;
11331145 double height;
11341146 file >> width;
@@ -1634,6 +1646,7 @@ void SurfaceManager::average(QList<wavefront *> wfList){
16341646 wf->data = sum.clone ();
16351647 wf->mask = mask;
16361648 wf->workMask = mask.clone ();
1649+ wf->m_origin = WavefrontOrigin::Average;
16371650 m_wavefronts << wf;
16381651 wf->wasSmoothed = false ;
16391652 wf->name = " Average.wft" ;
@@ -1658,6 +1671,7 @@ void SurfaceManager::averageComplete(wavefront *wf){
16581671 wf->wasSmoothed = false ;
16591672 wf->name = " Average.wft" ;
16601673 wf->dirtyZerns = true ;
1674+ wf->m_origin = WavefrontOrigin::Average;
16611675 m_surfaceTools->addWaveFront (wf->name );
16621676 m_currentNdx = m_wavefronts.size ()-1 ;
16631677 // makeMask(m_currentNdx);
@@ -1726,7 +1740,7 @@ void SurfaceManager::rotateThese(double angle, QList<int> list){
17261740 QStringList l = oldWf->name .split (' .' );
17271741 QString newName = QString (" %1_%2%3.wft" ).arg (l[0 ]).arg ((angle >= 0 ) ? " CW" :" CCW" ).arg (fabs (angle), 5 , ' f' , 1 , QLatin1Char (' 0' )); // clazy:exclude=qstring-arg
17281742 wavefront *wf = new wavefront ();
1729- *wf = *oldWf; // copy everything to new wavefront including basic things like diameter,wavelength
1743+ *wf = *oldWf; // copy everything to new wavefront including basic things like diameter,wavelength,origin
17301744 // emit nameChanged(wf->name, newName);
17311745
17321746 wf->name = newName;
@@ -1802,6 +1816,7 @@ void SurfaceManager::subtract(wavefront *wf1, wavefront *wf2, bool use_null){
18021816 resultwf->data = result.clone ();
18031817 resultwf->mask = mask.clone ();
18041818 resultwf->workMask = mask.clone ();
1819+ resultwf->m_origin = WavefrontOrigin::Subtraction;
18051820 m_wavefronts << resultwf;
18061821 m_currentNdx = m_wavefronts.size () -1 ;
18071822
@@ -1861,8 +1876,7 @@ void SurfaceManager::invert(QList<int> list){
18611876 m_wavefronts[list[i]]->data *= -1 ;
18621877 m_wavefronts[list[i]]->dirtyZerns = true ;
18631878 m_wavefronts[list[i]]->wasSmoothed = false ;
1864- m_ignoreInverse = true ;
1865-
1879+ m_wavefronts[list[i]]->m_manuallyInverted = true ;
18661880 }
18671881 m_waveFrontTimer->start (500 );
18681882}
0 commit comments