Hugin trunk 0.1
Loading...
Searching...
No Matches
wxLensDB.cpp
Go to the documentation of this file.
1// -*- c-basic-offset: 4 -*-
10/* This program is free software; you can redistribute it and/or
11 * modify it under the terms of the GNU General Public
12 * License as published by the Free Software Foundation; either
13 * version 2 of the License, or (at your option) any later version.
14 *
15 * This software is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 * General Public License for more details.
19 *
20 * You should have received a copy of the GNU General Public
21 * License along with this software. If not, see
22 * <http://www.gnu.org/licenses/>.
23 *
24 */
25
26#include "panoinc_WX.h"
27#include "panoinc.h"
28#include "wxLensDB.h"
29#include "lensdb/LensDB.h"
30#include "platform.h"
31#include "base_wx/wxPlatform.h"
34#include "base_wx/PanoCommand.h"
35#include <set>
36#include "base_wx/wxutils.h"
37
39class LoadLensDBDialog : public wxDialog
40{
41public:
43 explicit LoadLensDBDialog(wxWindow *parent);
44 void SetLensName(std::string lensname);
45 std::string GetLensName() const;
46 void SetFocalLength(double focal);
47 double GetFocalLength() const;
48 void SetAperture(double aperture);
49 double GetAperture() const;
50 void SetSubjectDistance(double distance);
51 double GetSubjectDistance() const;
52 bool GetLoadDistortion() const;
53 bool GetLoadVignetting() const;
54
55protected:
57 void OnOk(wxCommandEvent & e);
58 void OnCheckChanged(wxCommandEvent & e);
59
60private:
61 void FillLensList();
65 double m_focal{ 0 };
66 double m_aperture{ 0 };
67 double m_distance{ 0 };
69};
70
72{
73 // load our children. some children might need special
74 // initialization. this will be done later.
75 wxXmlResource::Get()->LoadDialog(this, parent, "load_lens_dlg");
76
77 //set parameters
78 wxConfigBase * config = wxConfigBase::Get();
79 // get display size
80 hugin_utils::RestoreFramePosition(this, "LoadLensDialog", true);
81 bool b;
82 config->Read("/LoadLensDialog/loadDistortion", &b, true);
83 m_loadDistortion = XRCCTRL(*this, "load_lens_distortion", wxCheckBox);
84 m_loadDistortion->SetValue(b);
86 config->Read("/LoadLensDialog/loadVignetting", &b, true);
87 m_loadVignetting = XRCCTRL(*this, "load_lens_vignetting", wxCheckBox);
88 m_loadVignetting->SetValue(b);
90 m_lenslist=XRCCTRL(*this,"load_lens_lenschoice", wxChoice);
94};
95
97{
98 if (HuginBase::LensDB::LensDB::GetSingleton().GetLensNames(true, true, false, m_lensNames))
99 {
101 for (HuginBase::LensDB::LensList::const_iterator it = m_lensNames.begin(); it != m_lensNames.end(); ++it)
102 {
103 wxString s((*it).c_str(), wxConvLocal);
104 wxString cam = s.AfterFirst('|');
105 if (!cam.empty())
106 {
107 s = wxString::Format(_("Camera %s (%s)"), cam.c_str(), s.BeforeFirst('|').c_str());
108 };
109 lensnames.Add(s);
110 };
111 m_lenslist->Append(lensnames);
112 };
113};
114
116{
117 if (!lensname.empty() && !m_lensNames.empty())
118 {
119 HuginBase::LensDB::LensList::const_iterator it=std::find(m_lensNames.begin(), m_lensNames.end(), lensname);
120 if (it != m_lensNames.end())
121 {
122 m_lenslist->SetSelection(it - m_lensNames.begin());
123 };
124 };
125 wxCommandEvent dummy;
127};
128
130{
131 return m_lensNames[m_lenslist->GetSelection()];
132};
133
135{
137 XRCCTRL(*this,"load_lens_focallength",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_focal,1));
138};
139
141{
142 return m_focal;
143};
144
145void LoadLensDBDialog::SetAperture(double aperture)
146{
147 m_aperture=aperture;
148 XRCCTRL(*this,"load_lens_aperture",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_aperture,1));
149};
150
152{
153 return m_aperture;
154};
155
157{
158 m_distance=distance;
159 XRCCTRL(*this,"load_lens_distance",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_distance,0));
160};
161
163{
164 return m_distance;
165};
166
168{
169 return m_loadDistortion->GetValue();
170};
171
173{
174 return m_loadVignetting->GetValue();
175};
176
177// utility functions
178bool str2double(wxWindow* parent, wxString s, double & d)
179{
180 if (!hugin_utils::stringToDouble(std::string(s.mb_str(wxConvLocal)), d))
181 {
182 hugin_utils::HuginMessageBox(wxString::Format(_("The input \"%s\" is not a valid number."), s), _("Hugin"), wxOK | wxICON_ERROR, parent);
183 return false;
184 }
185 return true;
186}
187
188void LoadLensDBDialog::OnOk(wxCommandEvent & e)
189{
190 if(!m_loadDistortion->GetValue() && !m_loadVignetting->GetValue())
191 {
192 return;
193 };
194 if(m_lenslist->GetSelection()==wxNOT_FOUND)
195 {
196 wxBell();
197 return;
198 };
199 if(!str2double(this,XRCCTRL(*this,"load_lens_focallength",wxTextCtrl)->GetValue(),m_focal))
200 {
201 return;
202 };
203 if(m_loadVignetting->GetValue())
204 {
205 wxString val = XRCCTRL(*this, "load_lens_aperture", wxTextCtrl)->GetValue().Trim();
206 if (val.empty())
207 {
208 m_aperture = 0;
209 }
210 else
211 {
212 if (!str2double(this, val, m_aperture))
213 {
214 return;
215 };
216 };
217 val = XRCCTRL(*this, "load_lens_distance", wxTextCtrl)->GetValue().Trim();
218 if (val.empty())
219 {
220 m_distance = 0;
221 }
222 else
223 {
224 if (!str2double(this, val, m_distance))
225 {
226 return;
227 };
228 };
229 };
230 //store selected options
231 hugin_utils::StoreFramePosition(this, "LoadLensDialog", true);
232 wxConfigBase * config = wxConfigBase::Get();
233 config->Write("/LoadLensDialog/loadDistortion",m_loadDistortion->GetValue());
234 config->Write("/LoadLensDialog/loadVignetting",m_loadVignetting->GetValue());
235 config->Flush();
236 e.Skip();
237};
238
239void LoadLensDBDialog::OnCheckChanged(wxCommandEvent & e)
240{
241 const int sel = m_lenslist->GetSelection();
242 XRCCTRL(*this,"wxID_OK",wxButton)->Enable(sel!=wxNOT_FOUND && (m_loadDistortion->GetValue() || m_loadVignetting->GetValue()));
243};
244
246{
248 const HuginBase::SrcPanoImage & img=pano->getImage(*images.begin());
249 dlg.SetLensName(img.getDBLensName());
250 dlg.SetFocalLength(img.getExifFocalLength());
251 dlg.SetAperture(img.getExifAperture());
252 dlg.SetSubjectDistance(img.getExifDistance());
253 if(dlg.ShowModal()==wxID_OK)
254 {
256 const double focal=dlg.GetFocalLength();
257 const std::string lensname = dlg.GetLensName();
258 std::vector<PanoCommand::PanoCommand*> cmds;
260 if(lensDB.GetProjection(lensname, proj))
261 {
262 cmds.push_back(new PanoCommand::ChangeImageProjectionCmd(*pano,images,proj));
263 };
264 vigra::Rect2D cropRect;
265 if(lensDB.GetCrop(lensname, focal, img.getSize(), cropRect))
266 {
267 cmds.push_back(new PanoCommand::ChangeImageCropModeCmd(*pano, images, img.isCircularCrop() ? HuginBase::BaseSrcPanoImage::CROP_CIRCLE : HuginBase::BaseSrcPanoImage::CROP_RECTANGLE));
268 cmds.push_back(new PanoCommand::ChangeImageCropRectCmd(*pano, images, cropRect));
269 };
270 //load lens distortion from database
271 if(dlg.GetLoadDistortion())
272 {
273 double hfov;
274 if (lensDB.GetFov(lensname, focal, hfov))
275 {
276 // calculate FOV for given image, take different aspect ratios into account
277 const double newFocal = HuginBase::SrcPanoImage::calcFocalLength(img.getProjection(), hfov, img.getCropFactor(), vigra::Size2D(3000, 2000));
278 const double newFov = HuginBase::SrcPanoImage::calcHFOV(img.getProjection(), newFocal, img.getCropFactor(), img.getSize());
279 std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> linkedVariables;
280 linkedVariables.insert(HuginBase::ImageVariableGroup::IVE_HFOV);
283 cmds.push_back(new PanoCommand::ChangeImageHFOVCmd(*pano, images, newFov));
284 };
285 std::vector<double> dist;
286 if(lensDB.GetDistortion(lensname, focal, dist))
287 {
288 if (dist.size() == 3)
289 {
290 dist.push_back(1.0 - dist[0] - dist[1] - dist[2]);
291 std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> linkedVariables;
292 linkedVariables.insert(HuginBase::ImageVariableGroup::IVE_RadialDistortion);
295 cmds.push_back(new PanoCommand::ChangeImageRadialDistortionCmd(*pano, images, dist));
296 };
297 };
298 };
299 if(dlg.GetLoadVignetting())
300 {
301 std::vector<double> vig;
302 if (lensDB.GetVignetting(lensname, focal, dlg.GetAperture(), dlg.GetSubjectDistance(), vig))
303 {
304 if (vig.size() == 4)
305 {
306 std::set<HuginBase::ImageVariableGroup::ImageVariableEnum> linkedVariables;
307 linkedVariables.insert(HuginBase::ImageVariableGroup::IVE_RadialVigCorrCoeff);
310 cmds.push_back(new PanoCommand::ChangeImageRadialVigCorrCoeffCmd(*pano, images, vig));
311 };
312 };
313 };
315 return true;
316 };
317 return false;
318};
319
321class SaveLensDBDialog : public wxDialog
322{
323public:
325 explicit SaveLensDBDialog(wxWindow *parent);
326 void SetCameraMaker(std::string maker);
327 std::string GetCameraMaker() const;
328 void SetCameraModel(std::string model);
329 std::string GetCameraModel() const;
330 void SetLensName(std::string lensname);
331 std::string GetLensName() const;
332 std::string GetLensMaker() const;
333 void SetFocalLength(double focal);
334 double GetFocalLength() const;
335 void SetAperture(double aperture);
336 double GetAperture() const;
337 void SetSubjectDistance(double distance);
338 double GetSubjectDistance() const;
339 bool GetSaveDistortion() const;
340 bool GetSaveVignetting() const;
342
343protected:
345 void OnOk(wxCommandEvent & e);
346 void OnCheckChanged(wxCommandEvent & e);
347
348private:
351 double m_focal { 0 };
352 double m_aperture{ 0 };
353 double m_distance{ 0 };
354};
355
357{
358 // load our children. some children might need special
359 // initialization. this will be done later.
360 wxXmlResource::Get()->LoadDialog(this, parent, "save_lens_dlg");
361
362 //set parameters
363 wxConfigBase * config = wxConfigBase::Get();
364 hugin_utils::RestoreFramePosition(this, "SaveLensDialog", true);
365 bool b;
366 config->Read("/SaveLensDialog/saveDistortion",&b,true);
367 m_saveDistortion=XRCCTRL(*this,"save_lens_distortion",wxCheckBox);
368 m_saveDistortion->SetValue(b);
370 config->Read("/SaveLensDialog/saveVignetting",&b,true);
371 m_saveVignetting=XRCCTRL(*this,"save_lens_vignetting",wxCheckBox);
372 m_saveVignetting->SetValue(b);
375};
376
378{
379 if(!maker.empty())
380 {
381 XRCCTRL(*this,"save_lens_camera_maker",wxTextCtrl)->SetValue(wxString(maker.c_str(), wxConvLocal));
382 };
383};
384
386{
387 return std::string(XRCCTRL(*this,"save_lens_camera_maker",wxTextCtrl)->GetValue().Trim().mb_str(wxConvLocal));
388};
389
391{
392 if(!model.empty())
393 {
394 XRCCTRL(*this,"save_lens_camera_model",wxTextCtrl)->SetValue(wxString(model.c_str(), wxConvLocal));
395 };
396};
397
399{
400 return std::string(XRCCTRL(*this,"save_lens_camera_model",wxTextCtrl)->GetValue().Trim().mb_str(wxConvLocal));
401};
402
404{
405 if(!lensname.empty())
406 {
407 XRCCTRL(*this,"save_lens_name",wxTextCtrl)->SetValue(wxString(lensname.c_str(), wxConvLocal));
408 };
409};
410
412{
413 return std::string(XRCCTRL(*this,"save_lens_name",wxTextCtrl)->GetValue().Trim().mb_str(wxConvLocal));
414};
415
417{
418 return std::string(XRCCTRL(*this,"save_lens_maker",wxTextCtrl)->GetValue().Trim().mb_str(wxConvLocal));
419};
420
422{
424 XRCCTRL(*this,"save_lens_focallength",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_focal,1));
425};
426
428{
429 return m_focal;
430};
431
432void SaveLensDBDialog::SetAperture(double aperture)
433{
434 m_aperture=aperture;
435 XRCCTRL(*this,"save_lens_aperture",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_aperture,1));
436};
437
439{
440 return m_aperture;
441};
442
444{
445 m_distance=distance;
446 XRCCTRL(*this,"save_lens_distance",wxTextCtrl)->SetValue(hugin_utils::doubleTowxString(m_distance,0));
447};
448
450{
451 return m_distance;
452};
453
455{
456 return m_saveDistortion->GetValue();
457};
458
460{
461 return m_saveVignetting->GetValue();
462};
463
465{
466 m_saveVignetting->SetValue(false);
467 m_saveVignetting->Disable();
468};
469
470void SaveLensDBDialog::OnOk(wxCommandEvent & e)
471{
472 if(!m_saveDistortion->GetValue() && !m_saveVignetting->GetValue())
473 {
474 return;
475 };
477 {
478 hugin_utils::HuginMessageBox(_("There is too little information for saving data into database. Please check your input!"), _("Hugin"), wxOK | wxICON_ERROR, this);
479 return;
480 };
481 if(!str2double(this,XRCCTRL(*this,"save_lens_focallength",wxTextCtrl)->GetValue(),m_focal))
482 {
483 return;
484 };
485 if(m_saveVignetting->GetValue())
486 {
487 wxString val = XRCCTRL(*this, "save_lens_aperture", wxTextCtrl)->GetValue().Trim();
488 if (val.empty())
489 {
490 m_aperture = 0;
491 }
492 else
493 {
494 if (!str2double(this, val, m_aperture))
495 {
496 return;
497 };
498 };
499 val = XRCCTRL(*this, "save_lens_distance", wxTextCtrl)->GetValue().Trim();
500 if (val.empty())
501 {
502 m_distance = 0;
503 }
504 else
505 {
506 if (!str2double(this, val, m_distance))
507 {
508 return;
509 };
510 };
511 };
512 //store selected options
513 hugin_utils::StoreFramePosition(this, "SaveLensDialog", true);
514 wxConfigBase * config = wxConfigBase::Get();
515 config->Write("/SaveLensDialog/saveDistortion",m_saveDistortion->GetValue());
516 if(m_saveVignetting->IsEnabled())
517 {
518 config->Write("/SaveLensDialog/saveVignetting",m_saveVignetting->GetValue());
519 };
520 config->Flush();
521 e.Skip();
522};
523
524void SaveLensDBDialog::OnCheckChanged(wxCommandEvent & e)
525{
526 XRCCTRL(*this,"wxID_OK",wxButton)->Enable(m_saveDistortion->GetValue() || m_saveVignetting->GetValue());
527};
528
530{
532 // show dialog
534 lensDlg.SetCameraMaker(img.getExifMake());
535 lensDlg.SetCameraModel(img.getExifModel());
536 lensDlg.SetLensName(img.getDBLensName());
537 lensDlg.SetFocalLength(img.getExifFocalLength());
538 lensDlg.SetAperture(img.getExifAperture());
539 lensDlg.SetSubjectDistance(img.getExifDistance());
541 {
542 lensDlg.DeactivateSaveVignetting();
543 };
544 if (lensDlg.ShowModal() != wxID_OK)
545 {
546 return false;
547 };
548 const std::string camMaker = lensDlg.GetCameraMaker();
549 const std::string camModel = lensDlg.GetCameraModel();
550 std::string lensname = lensDlg.GetLensName();
551 const double focal = lensDlg.GetFocalLength();
552 if (lensname.empty())
553 {
554 //empty lensname, assuming it is a compact camera
555 lensname = camMaker + "|" + camModel;
556 };
557 // unknown crop factor, remember it
558 if (img.getExifCropFactor() < 0.1 && !camMaker.empty() && !camModel.empty())
559 {
560 lensDB.SaveCameraCrop(camMaker, camModel, img.getCropFactor());
561 };
562 if (lensDlg.GetSaveDistortion())
563 {
564 const double newFocallength = HuginBase::SrcPanoImage::calcFocalLength(img.getProjection(), img.getHFOV(), img.getCropFactor(), img.getSize());
565 const double newHFOV = HuginBase::SrcPanoImage::calcHFOV(img.getProjection(), newFocallength, img.getCropFactor(), vigra::Size2D(3000, 2000));
566 // save information with higher weight
567 if (!lensDB.SaveLensFov(lensname, lensDlg.GetFocalLength(), newHFOV, 75))
568 {
569 hugin_utils::HuginMessageBox(_("Could not save information into database."), _("Hugin"), wxOK | wxICON_ERROR, parent);
570 return false;
571 };
572 if (!lensDB.SaveDistortion(lensname, focal, img.getRadialDistortion(), 75))
573 {
574 hugin_utils::HuginMessageBox(_("Could not save information into database."), _("Hugin"), wxOK | wxICON_ERROR, parent);
575 return false;
576 };
577 };
578 if(lensDlg.GetSaveVignetting())
579 {
580 if (!lensDB.SaveVignetting(lensname, focal, lensDlg.GetAperture(), lensDlg.GetSubjectDistance(), img.getRadialVigCorrCoeff(), 75))
581 {
582 hugin_utils::HuginMessageBox(_("Could not save information into database."), _("Hugin"), wxOK | wxICON_ERROR, parent);
583 return false;
584 };
585 };
586 return true;
587};
588
Declare the ImageVariableGroup and ImageVariableGroupObserver classes.
Convenience functions for SrcPanoImage to use on the image variables.
class to access Hugins camera and lens database
static const std::set< ConstImageVariableGroup::ImageVariableEnum > & getLensVariables()
Get the set of lens image variables.
main database class
Definition LensDB.h:45
static LensDB & GetSingleton()
returns the static LensDB instance
Definition LensDB.cpp:2001
Model for a panorama.
Definition Panorama.h:153
const SrcPanoImage & getImage(std::size_t nr) const
get a panorama image, counting starts with 0
Definition Panorama.h:211
All variables of a source image.
static double calcFocalLength(SrcPanoImage::Projection proj, double hfov, double crop, vigra::Size2D imageSize)
calcualte focal length, given crop factor and hfov
std::string getDBLensName() const
constructs the lens name for the database it is the lensname if known, for compact cameras it is cons...
bool isCircularCrop() const
returns true, if projection requires cicular crop
static double calcHFOV(SrcPanoImage::Projection proj, double fl, double crop, vigra::Size2D imageSize)
calculate hfov of an image given focal length, image size and crop factor
dialog for loading lens parameter from lens database
Definition wxLensDB.cpp:40
void SetSubjectDistance(double distance)
Definition wxLensDB.cpp:156
double GetSubjectDistance() const
Definition wxLensDB.cpp:162
wxChoice * m_lenslist
Definition wxLensDB.cpp:62
void FillLensList()
Definition wxLensDB.cpp:96
wxCheckBox * m_loadDistortion
Definition wxLensDB.cpp:63
std::string GetLensName() const
Definition wxLensDB.cpp:129
void SetFocalLength(double focal)
Definition wxLensDB.cpp:134
wxCheckBox * m_loadVignetting
Definition wxLensDB.cpp:64
bool GetLoadVignetting() const
Definition wxLensDB.cpp:172
void SetLensName(std::string lensname)
Definition wxLensDB.cpp:115
HuginBase::LensDB::LensList m_lensNames
Definition wxLensDB.cpp:68
double GetFocalLength() const
Definition wxLensDB.cpp:140
double GetAperture() const
Definition wxLensDB.cpp:151
void OnOk(wxCommandEvent &e)
Saves current state of all checkboxes when closing dialog with Ok.
Definition wxLensDB.cpp:188
bool GetLoadDistortion() const
Definition wxLensDB.cpp:167
void OnCheckChanged(wxCommandEvent &e)
Definition wxLensDB.cpp:239
void SetAperture(double aperture)
Definition wxLensDB.cpp:145
LoadLensDBDialog(wxWindow *parent)
Constructor, read from xrc ressource; restore last uses settings, size and position.
Definition wxLensDB.cpp:71
Change the linking of some variables across parts of an ImageVariableGroup containing some specified ...
PanoCommand to combine other PanoCommands.
Definition PanoCommand.h:40
Base class for all panorama commands.
Definition Command.h:39
dialog for saving lens parameter into lens database
Definition wxLensDB.cpp:322
void SetSubjectDistance(double distance)
Definition wxLensDB.cpp:443
bool GetSaveDistortion() const
Definition wxLensDB.cpp:454
void DeactivateSaveVignetting()
Definition wxLensDB.cpp:464
void SetFocalLength(double focal)
Definition wxLensDB.cpp:421
void SetLensName(std::string lensname)
Definition wxLensDB.cpp:403
void OnOk(wxCommandEvent &e)
Saves current state of all checkboxes when closing dialog with Ok.
Definition wxLensDB.cpp:470
double GetAperture() const
Definition wxLensDB.cpp:438
std::string GetCameraMaker() const
Definition wxLensDB.cpp:385
void SetCameraMaker(std::string maker)
Definition wxLensDB.cpp:377
std::string GetLensName() const
Definition wxLensDB.cpp:411
std::string GetCameraModel() const
Definition wxLensDB.cpp:398
double GetSubjectDistance() const
Definition wxLensDB.cpp:449
SaveLensDBDialog(wxWindow *parent)
Constructor, read from xrc ressource; restore last uses settings, size and position.
Definition wxLensDB.cpp:356
double GetFocalLength() const
Definition wxLensDB.cpp:427
bool GetSaveVignetting() const
Definition wxLensDB.cpp:459
wxCheckBox * m_saveDistortion
Definition wxLensDB.cpp:349
std::string GetLensMaker() const
Definition wxLensDB.cpp:416
wxCheckBox * m_saveVignetting
Definition wxLensDB.cpp:350
void SetCameraModel(std::string model)
Definition wxLensDB.cpp:390
void OnCheckChanged(wxCommandEvent &e)
Definition wxLensDB.cpp:524
void SetAperture(double aperture)
Definition wxLensDB.cpp:432
platform/compiler specific stuff.
std::vector< std::string > LensList
vector storing a list of lens names
Definition LensDB.h:41
std::set< unsigned int > UIntSet
wxString doubleTowxString(double d, int digits)
int HuginMessageBox(const wxString &message, const wxString &caption, int style, wxWindow *parent)
Definition wxutils.cpp:176
bool stringToDouble(const STR &str_, double &dest)
convert a string to a double, ignore localisation.
Definition utils.h:114
void StoreFramePosition(wxTopLevelWindow *frame, const wxString &basename, const bool ignoreMaximize)
Definition wxutils.cpp:106
void RestoreFramePosition(wxTopLevelWindow *frame, const wxString &basename, const bool ignoreMaximize)
Definition wxutils.cpp:67
include file for the hugin project
include file for the hugin project
std::vector< deghosting::BImagePtr > threshold(const std::vector< deghosting::FImagePtr > &inputImages, const double threshold, const uint16_t flags)
Threshold function used for creating alpha masks for images.
Definition threshold.h:41
bool ApplyLensDBParameters(wxWindow *parent, HuginBase::Panorama *pano, HuginBase::UIntSet images, PanoCommand::PanoCommand *&cmd)
loads the lens parameters from lens database and create approbiate PanoCommand::PanoCommand to apply ...
Definition wxLensDB.cpp:245
bool str2double(wxWindow *parent, wxString s, double &d)
Definition wxLensDB.cpp:178
bool SaveLensParameters(wxWindow *parent, const HuginBase::SrcPanoImage &img, bool includeVignetting)
saves the lensparameter of the given HuginBase::SrcPanoImage into the lens database
Definition wxLensDB.cpp:529
dialogs for loading and saving information from/to lens database
platform/compiler specific stuff.