From: <da...@us...> - 2008-02-18 23:18:24
|
Revision: 2895 http://hugin.svn.sourceforge.net/hugin/?rev=2895&view=rev Author: dangelo Date: 2008-02-18 15:18:22 -0800 (Mon, 18 Feb 2008) Log Message: ----------- Changing the focal length and crop factor in the assistant panel preserves exposure of the images. Modified Paths: -------------- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp hugin/trunk/src/hugin1/hugin/LensPanel.cpp hugin/trunk/src/hugin1/hugin/MainFrame.cpp hugin/trunk/src/hugin1/hugin/xrc/assistant_panel.xrc Modified: hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-18 22:22:26 UTC (rev 2894) +++ hugin/trunk/src/hugin1/hugin/AssistantPanel.cpp 2008-02-18 23:18:22 UTC (rev 2895) @@ -646,7 +646,10 @@ SrcPanoImage srcImg = m_pano->getSrcImage(imgNr); bool ok = initImageFromFile(srcImg, focalLength, cropFactor); if (! ok) { - getLensDataFromUser(this, srcImg, focalLength, cropFactor); + if (!getLensDataFromUser(this, srcImg, focalLength, cropFactor)) { + // hmm, we don't know anything, assume a standart lens. + srcImg.setHFOV(50); + } } //initLensFromFile(pano.getImage(imgNr).getFilename().c_str(), c, lens, vars, imgopts, true); GlobalCmdHist::getInstance().addCommand( @@ -677,6 +680,8 @@ void AssistantPanel::OnFocalLengthChanged(wxCommandEvent & e) { + if (m_pano->getNrOfImages() == 0) return; + // always change first lens wxString text = m_focalLengthText->GetValue(); DEBUG_INFO("focal length: " << text.mb_str(*wxConvCurrent)); @@ -685,12 +690,22 @@ return; } + // always change first lens... Lens lens = m_pano->getLens(0); lens.setFocalLength(val); + LensVariable v = map_get(lens.variables, "v"); + LensVarMap lmv; + lmv.insert(make_pair("v", v)); + std::vector<LensVarMap> lvars; + UIntSet lenses; + for (unsigned i=0; i < m_pano->getNrOfLenses(); i++) { + lenses.insert(i); + lvars.push_back(lmv); + } GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensCmd(*m_pano, 0, lens) + new PT::SetLensesVariableCmd(*m_pano, lenses, lvars) ); } @@ -708,10 +723,26 @@ double fl = lens.getFocalLength(); lens.setCropFactor(val); lens.setFocalLength(fl); + LensVariable v = map_get(lens.variables, "v"); + LensVarMap lmv; + lmv.insert(make_pair("v", v)); + std::vector<LensVarMap> lvars; + UIntSet lenses; + for (unsigned i=0; i < m_pano->getNrOfLenses(); i++) { + lenses.insert(i); + lvars.push_back(lmv); + } GlobalCmdHist::getInstance().addCommand( - new PT::ChangeLensCmd( *m_pano, 0, lens) - ); + new PT::SetLensesVariableCmd(*m_pano, lenses, lvars) + ); + // TODO: update crop factor as well without destroying other information. + SrcPanoImage img0 = m_pano->getSrcImage(0); + img0.setExifCropFactor(val); + GlobalCmdHist::getInstance().addCommand( + new PT::UpdateSrcImageCmd(*m_pano, 0, img0) + ); + } IMPLEMENT_DYNAMIC_CLASS(AssistantPanel, wxPanel) Modified: hugin/trunk/src/hugin1/hugin/LensPanel.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-18 22:22:26 UTC (rev 2894) +++ hugin/trunk/src/hugin1/hugin/LensPanel.cpp 2008-02-18 23:18:22 UTC (rev 2895) @@ -821,7 +821,9 @@ SrcPanoImage srcImg = pano->getSrcImage(imgNr); bool ok = initImageFromFile(srcImg, focalLength, cropFactor); if (! ok) { - getLensDataFromUser(this, srcImg, focalLength, cropFactor); + if ( ! getLensDataFromUser(this, srcImg, focalLength, cropFactor)) { + srcImg.setHFOV(50); + } } //initLensFromFile(pano->getImage(imgNr).getFilename().c_str(), c, lens, vars, imgopts, true); GlobalCmdHist::getInstance().addCommand( Modified: hugin/trunk/src/hugin1/hugin/MainFrame.cpp =================================================================== --- hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-18 22:22:26 UTC (rev 2894) +++ hugin/trunk/src/hugin1/hugin/MainFrame.cpp 2008-02-18 23:18:22 UTC (rev 2895) @@ -1476,15 +1476,22 @@ return m_filename; } -void getLensDataFromUser(wxWindow * parent, SrcPanoImage & srcImg, +bool getLensDataFromUser(wxWindow * parent, SrcPanoImage & srcImg, double & focalLength, double & cropFactor) { // display lens dialog HFOVDialog dlg(parent, srcImg, focalLength, cropFactor); - dlg.ShowModal(); - srcImg = dlg.GetSrcImage(); - focalLength = dlg.GetFocalLength(); - cropFactor = dlg.GetCropFactor(); + int ret = dlg.ShowModal(); + if (ret == wxID_OK) { + // assume a cancel dialog. + srcImg = dlg.GetSrcImage(); + if (dlg.GetCropFactor() <= 0) { + srcImg.setExifCropFactor(1); + } + return true; + } else { + return false; + } } MainFrame * MainFrame::m_this = 0; Modified: hugin/trunk/src/hugin1/hugin/xrc/assistant_panel.xrc =================================================================== --- hugin/trunk/src/hugin1/hugin/xrc/assistant_panel.xrc 2008-02-18 22:22:26 UTC (rev 2894) +++ hugin/trunk/src/hugin1/hugin/xrc/assistant_panel.xrc 2008-02-18 23:18:22 UTC (rev 2895) @@ -276,6 +276,7 @@ </object> <object class="sizeritem"> <object class="wxTextCtrl" name="lensdlg_hfov_text"/> + <minsize>60,-1</minsize> </object> <object class="sizeritem"> <object class="wxStaticText"> @@ -301,6 +302,7 @@ </object> <object class="sizeritem"> <object class="wxTextCtrl" name="lensdlg_focallength_text"/> + <minsize>60,-1</minsize> </object> <cols>6</cols> <vgap>6</vgap> @@ -320,6 +322,7 @@ </object> <object class="sizeritem"> <object class="wxTextCtrl" name="lensdlg_cropfactor_text"/> + <minsize>60,-1</minsize> </object> <object class="sizeritem"> <object class="wxStaticText"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |