-\r
-void\r
-ImageFileView::OnCompare (wxCommandEvent& event)\r
-{\r
- std::vector<ImageFileDocument*> vecIF;\r
- theApp->getCompatibleImages (GetDocument(), vecIF);\r
- \r
- if (vecIF.size() == 0) {\r
- wxMessageBox("There are no compatible image files open for comparision", "No comparison images");\r
- } else {\r
- DialogGetComparisonImage dialogGetCompare(m_frame, "Get Comparison Image", vecIF, true);\r
- \r
- if (dialogGetCompare.ShowModal() == wxID_OK) {\r
- const ImageFile& rIF = GetDocument()->getImageFile();\r
- ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();\r
- const ImageFile& rCompareIF = pCompareDoc->getImageFile();\r
- std::ostringstream os;\r
- double min, max, mean, mode, median, stddev;\r
- rIF.statistics (min, max, mean, mode, median, stddev);\r
- os << rIF.getFilename() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";\r
- rCompareIF.statistics (min, max, mean, mode, median, stddev);\r
- os << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";\r
- os << "\n";\r
- double d, r, e;\r
- rIF.comparativeStatistics (rCompareIF, d, r, e);\r
- os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n";\r
- *theApp->getLog() << os.str().c_str();\r
- if (dialogGetCompare.getMakeDifferenceImage()) {\r
- ImageFileDocument* pDifferenceDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
- if (! pDifferenceDoc) {\r
- sys_error (ERR_SEVERE, "Unable to create image file");\r
- return;\r
- }\r
- ImageFile& differenceImage = pDifferenceDoc->getImageFile();\r
- \r
- differenceImage.setArraySize (rIF.nx(), rIF.ny());\r
- if (! rIF.subtractImages (rCompareIF, differenceImage)) {\r
- pDifferenceDoc->DeleteAllViews();\r
- return;\r
- }\r
- \r
- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- differenceImage.labelsCopy (rIF, s.c_str());\r
- s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- differenceImage.labelsCopy (rCompareIF, s.c_str());\r
- std::ostringstream osLabel;\r
- osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() \r
- << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "\r
- << os.str().c_str();\r
- differenceImage.labelAdd (os.str().c_str());\r
- if (theApp->getSetModifyNewDocs())\r
- pDifferenceDoc->Modify(true);\r
- pDifferenceDoc->UpdateAllViews(this);\r
- pDifferenceDoc->GetFirstView()->OnUpdate (this, NULL);\r
- }\r
- wxMessageBox(os.str().c_str(), "Image Comparison");\r
- }\r
- }\r
-}
-
-void\r
-ImageFileView::OnInvertValues (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- rIF.invertPixelValues (rIF);\r
- rIF.labelAdd ("Invert Pixel Values");\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnSquare (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- rIF.square (rIF);\r
- rIF.labelAdd ("Square Pixel Values");\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnSquareRoot (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- rIF.sqrt (rIF);\r
- rIF.labelAdd ("Square-root Pixel Values");\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnLog (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- rIF.log (rIF);\r
- rIF.labelAdd ("Logrithm base-e Pixel Values");\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnExp (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- rIF.exp (rIF);\r
- rIF.labelAdd ("Exponent base-e Pixel Values");\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnAdd (wxCommandEvent& event)\r
-{\r
- std::vector<ImageFileDocument*> vecIF;\r
- theApp->getCompatibleImages (GetDocument(), vecIF);\r
- \r
- if (vecIF.size() == 0) {\r
- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");\r
- } else {\r
- DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Add", vecIF, false);\r
- \r
- if (dialogGetCompare.ShowModal() == wxID_OK) {\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
- const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
- ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
- if (! pNewDoc) {\r
- sys_error (ERR_SEVERE, "Unable to create image file");\r
- return;\r
- }\r
- ImageFile& newImage = pNewDoc->getImageFile(); \r
- newImage.setArraySize (rIF.nx(), rIF.ny());\r
- rIF.addImages (rRHSIF, newImage);\r
- std::ostringstream os;\r
- os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rIF, s.c_str());\r
- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rRHSIF, s.c_str());\r
- newImage.labelAdd (os.str().c_str());\r
- *theApp->getLog() << os.str().c_str() << "\n";\r
- if (theApp->getSetModifyNewDocs())\r
- pNewDoc->Modify(TRUE);\r
- pNewDoc->UpdateAllViews(this);\r
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
- }\r
- }\r
-}\r
-\r
-void\r
-ImageFileView::OnSubtract (wxCommandEvent& event)\r
-{\r
- std::vector<ImageFileDocument*> vecIF;\r
- theApp->getCompatibleImages (GetDocument(), vecIF);\r
- \r
- if (vecIF.size() == 0) {\r
- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");\r
- } else {\r
- DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Subtract", vecIF, false);\r
- \r
- if (dialogGetCompare.ShowModal() == wxID_OK) {\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
- const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
- ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
- if (! pNewDoc) {\r
- sys_error (ERR_SEVERE, "Unable to create image file");\r
- return;\r
- }\r
- ImageFile& newImage = pNewDoc->getImageFile(); \r
- newImage.setArraySize (rIF.nx(), rIF.ny());\r
- rIF.subtractImages (rRHSIF, newImage);\r
- std::ostringstream os;\r
- os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rIF, s.c_str());\r
- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rRHSIF, s.c_str());\r
- newImage.labelAdd (os.str().c_str());\r
- *theApp->getLog() << os.str().c_str() << "\n";\r
- if (theApp->getSetModifyNewDocs())\r
- pNewDoc->Modify(TRUE);\r
- pNewDoc->UpdateAllViews(this);\r
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
- }\r
- }\r
-}\r
-\r
-void\r
-ImageFileView::OnMultiply (wxCommandEvent& event)\r
-{\r
- std::vector<ImageFileDocument*> vecIF;\r
- theApp->getCompatibleImages (GetDocument(), vecIF);\r
- \r
- if (vecIF.size() == 0) {\r
- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");\r
- } else {\r
- DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Multiply", vecIF, false);\r
- \r
- if (dialogGetCompare.ShowModal() == wxID_OK) {\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
- const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
- ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
- if (! pNewDoc) {\r
- sys_error (ERR_SEVERE, "Unable to create image file");\r
- return;\r
- }\r
- ImageFile& newImage = pNewDoc->getImageFile(); \r
- newImage.setArraySize (rIF.nx(), rIF.ny());\r
- rIF.multiplyImages (rRHSIF, newImage);\r
- std::ostringstream os;\r
- os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and " \r
- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rIF, s.c_str());\r
- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rRHSIF, s.c_str());\r
- newImage.labelAdd (os.str().c_str());\r
- *theApp->getLog() << os.str().c_str() << "\n";\r
- if (theApp->getSetModifyNewDocs())\r
- pNewDoc->Modify(TRUE);\r
- pNewDoc->UpdateAllViews(this);\r
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
- }\r
- }\r
-}\r
-\r
-void\r
-ImageFileView::OnDivide (wxCommandEvent& event)\r
-{\r
- std::vector<ImageFileDocument*> vecIF;\r
- theApp->getCompatibleImages (GetDocument(), vecIF);\r
- \r
- if (vecIF.size() == 0) {\r
- wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");\r
- } else {\r
- DialogGetComparisonImage dialogGetCompare (m_frame, "Get Image to Divide", vecIF, false);\r
- \r
- if (dialogGetCompare.ShowModal() == wxID_OK) {\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();\r
- const ImageFile& rRHSIF = pRHSDoc->getImageFile();\r
- ImageFileDocument* pNewDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
- if (! pNewDoc) {\r
- sys_error (ERR_SEVERE, "Unable to create image file");\r
- return;\r
- }\r
- ImageFile& newImage = pNewDoc->getImageFile(); \r
- newImage.setArraySize (rIF.nx(), rIF.ny());\r
- rIF.divideImages (rRHSIF, newImage);\r
- std::ostringstream os;\r
- os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by " \r
- << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();\r
- wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rIF, s.c_str());\r
- s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";\r
- newImage.labelsCopy (rRHSIF, s.c_str());\r
- newImage.labelAdd (os.str().c_str());\r
- *theApp->getLog() << os.str().c_str() << "\n";\r
- if (theApp->getSetModifyNewDocs())\r
- pNewDoc->Modify(TRUE);\r
- pNewDoc->UpdateAllViews(this);\r
- pNewDoc->GetFirstView()->OnUpdate (this, NULL);\r
- }\r
- }\r
-}\r
-\r
-\r
-#ifdef HAVE_FFTW\r
-void\r
-ImageFileView::OnFFT (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- wxProgressDialog dlgProgress (wxString("FFT"), wxString("FFT Progress"), 1, m_frame, wxPD_APP_MODAL);\r
- rIF.fft (rIF);\r
- rIF.labelAdd ("FFT Image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnIFFT (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- wxProgressDialog dlgProgress (wxString("IFFT"), wxString("IFFT Progress"), 1, m_frame, wxPD_APP_MODAL);\r
- rIF.ifft (rIF);\r
- rIF.labelAdd ("IFFT Image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-#endif\r
-\r
-void\r
-ImageFileView::OnFourier (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, m_frame, wxPD_APP_MODAL);\r
- rIF.fourier (rIF);\r
- rIF.labelAdd ("Fourier Image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-void\r
-ImageFileView::OnInverseFourier (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, m_frame, wxPD_APP_MODAL);\r
- rIF.inverseFourier (rIF);\r
- rIF.labelAdd ("Inverse Fourier Image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnShuffleNaturalToFourierOrder (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- Fourier::shuffleNaturalToFourierOrder (rIF);\r
- rIF.labelAdd ("Shuffle Natural To Fourier Order");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnShuffleFourierToNaturalOrder (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- Fourier::shuffleFourierToNaturalOrder (rIF);\r
- rIF.labelAdd ("Shuffle Fourier To Natural Order");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
-}\r
-\r
-void\r
-ImageFileView::OnMagnitude (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- if (rIF.isComplex()) {\r
- rIF.magnitude (rIF);\r
- rIF.labelAdd ("Magnitude of complex-image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
- }\r
-}\r
-\r
-void\r
-ImageFileView::OnPhase (wxCommandEvent& event)\r
-{\r
- ImageFile& rIF = GetDocument()->getImageFile();\r
- if (rIF.isComplex()) {\r
- rIF.phase (rIF);\r
- rIF.labelAdd ("Phase of complex-image");\r
- m_bMinSpecified = false;\r
- m_bMaxSpecified = false;\r
- if (theApp->getSetModifyNewDocs())\r
- GetDocument()->Modify(TRUE);\r
- GetDocument()->UpdateAllViews(this);\r
- }\r
-}\r
-\r
-\r
+
+void
+ImageFileView::OnScaleFull (wxCommandEvent& event)
+{
+ if (m_bMinSpecified || m_bMaxSpecified) {
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ OnUpdate (this, NULL);
+ }
+}
+
+void
+ImageFileView::OnCompare (wxCommandEvent& event)
+{
+ std::vector<ImageFileDocument*> vecIF;
+ theApp->getCompatibleImages (GetDocument(), vecIF);
+
+ if (vecIF.size() == 0) {
+ wxMessageBox("There are no compatible image files open for comparision", "No comparison images");
+ } else {
+ DialogGetComparisonImage dialogGetCompare(getFrameForChild(), "Get Comparison Image", vecIF, true);
+
+ if (dialogGetCompare.ShowModal() == wxID_OK) {
+ const ImageFile& rIF = GetDocument()->getImageFile();
+ ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();
+ const ImageFile& rCompareIF = pCompareDoc->getImageFile();
+ std::ostringstream os;
+ double min, max, mean, mode, median, stddev;
+ rIF.statistics (min, max, mean, mode, median, stddev);
+ os << GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
+ rCompareIF.statistics (min, max, mean, mode, median, stddev);
+ os << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": minimum=" << min << ", maximum=" << max << ", mean=" << mean << ", mode=" << mode << ", median=" << median << ", stddev=" << stddev << "\n";
+ os << "\n";
+ double d, r, e;
+ rIF.comparativeStatistics (rCompareIF, d, r, e);
+ os << "Comparative Statistics: d=" << d << ", r=" << r << ", e=" << e << "\n";
+ *theApp->getLog() << os.str().c_str();
+ if (dialogGetCompare.getMakeDifferenceImage()) {
+ ImageFileDocument* pDifferenceDoc = theApp->newImageDoc();
+ if (! pDifferenceDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ ImageFile& differenceImage = pDifferenceDoc->getImageFile();
+
+ differenceImage.setArraySize (rIF.nx(), rIF.ny());
+ if (! rIF.subtractImages (rCompareIF, differenceImage)) {
+ pDifferenceDoc->getView()->getFrame()->Close(true);
+ return;
+ }
+
+ wxString s = GetFrame()->GetTitle() + ": ";
+ differenceImage.labelsCopy (rIF, s.c_str());
+ s = pCompareDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ differenceImage.labelsCopy (rCompareIF, s.c_str());
+ std::ostringstream osLabel;
+ osLabel << "Compare image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str()
+ << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "
+ << os.str().c_str();
+ differenceImage.labelAdd (os.str().c_str());
+ if (theApp->getSetModifyNewDocs())
+ pDifferenceDoc->Modify(true);
+ pDifferenceDoc->UpdateAllViews(this);
+ pDifferenceDoc->getView()->OnUpdate (this, NULL);
+ pDifferenceDoc->getView()->getFrame()->Show(true);
+ }
+ wxMessageBox(os.str().c_str(), "Image Comparison");
+ }
+ }
+}
+
+void
+ImageFileView::OnInvertValues (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.invertPixelValues (rIF);
+ rIF.labelAdd ("Invert Pixel Values");
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnSquare (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.square (rIF);
+ rIF.labelAdd ("Square Pixel Values");
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnSquareRoot (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.sqrt (rIF);
+ rIF.labelAdd ("Square-root Pixel Values");
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnLog (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.log (rIF);
+ rIF.labelAdd ("Logrithm base-e Pixel Values");
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnExp (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.exp (rIF);
+ rIF.labelAdd ("Exponent base-e Pixel Values");
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnAdd (wxCommandEvent& event)
+{
+ std::vector<ImageFileDocument*> vecIF;
+ theApp->getCompatibleImages (GetDocument(), vecIF);
+
+ if (vecIF.size() == 0) {
+ wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
+ } else {
+ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Add", vecIF, false);
+
+ if (dialogGetCompare.ShowModal() == wxID_OK) {
+ ImageFile& rIF = GetDocument()->getImageFile();
+ ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
+ const ImageFile& rRHSIF = pRHSDoc->getImageFile();
+ ImageFileDocument* pNewDoc = theApp->newImageDoc();
+ if (! pNewDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ ImageFile& newImage = pNewDoc->getImageFile();
+ newImage.setArraySize (rIF.nx(), rIF.ny());
+ rIF.addImages (rRHSIF, newImage);
+ std::ostringstream os;
+ os << "Add image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+ << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+ wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rIF, s.c_str());
+ s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rRHSIF, s.c_str());
+ newImage.labelAdd (os.str().c_str());
+ *theApp->getLog() << os.str().c_str() << "\n";
+ if (theApp->getSetModifyNewDocs())
+ pNewDoc->Modify(TRUE);
+ pNewDoc->UpdateAllViews(this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
+ }
+ }
+}
+
+void
+ImageFileView::OnSubtract (wxCommandEvent& event)
+{
+ std::vector<ImageFileDocument*> vecIF;
+ theApp->getCompatibleImages (GetDocument(), vecIF);
+
+ if (vecIF.size() == 0) {
+ wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
+ } else {
+ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Subtract", vecIF, false);
+
+ if (dialogGetCompare.ShowModal() == wxID_OK) {
+ ImageFile& rIF = GetDocument()->getImageFile();
+ ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
+ const ImageFile& rRHSIF = pRHSDoc->getImageFile();
+ ImageFileDocument* pNewDoc = theApp->newImageDoc();
+ if (! pNewDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ ImageFile& newImage = pNewDoc->getImageFile();
+ newImage.setArraySize (rIF.nx(), rIF.ny());
+ rIF.subtractImages (rRHSIF, newImage);
+ std::ostringstream os;
+ os << "Subtract image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+ << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+ wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rIF, s.c_str());
+ s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rRHSIF, s.c_str());
+ newImage.labelAdd (os.str().c_str());
+ *theApp->getLog() << os.str().c_str() << "\n";
+ if (theApp->getSetModifyNewDocs())
+ pNewDoc->Modify(TRUE);
+ pNewDoc->UpdateAllViews(this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
+ }
+ }
+}
+
+void
+ImageFileView::OnMultiply (wxCommandEvent& event)
+{
+ std::vector<ImageFileDocument*> vecIF;
+ theApp->getCompatibleImages (GetDocument(), vecIF);
+
+ if (vecIF.size() == 0) {
+ wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
+ } else {
+ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Multiply", vecIF, false);
+
+ if (dialogGetCompare.ShowModal() == wxID_OK) {
+ ImageFile& rIF = GetDocument()->getImageFile();
+ ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
+ const ImageFile& rRHSIF = pRHSDoc->getImageFile();
+ ImageFileDocument* pNewDoc = theApp->newImageDoc();
+ if (! pNewDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ ImageFile& newImage = pNewDoc->getImageFile();
+ newImage.setArraySize (rIF.nx(), rIF.ny());
+ rIF.multiplyImages (rRHSIF, newImage);
+ std::ostringstream os;
+ os << "Multiply image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " and "
+ << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+ wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rIF, s.c_str());
+ s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rRHSIF, s.c_str());
+ newImage.labelAdd (os.str().c_str());
+ *theApp->getLog() << os.str().c_str() << "\n";
+ if (theApp->getSetModifyNewDocs())
+ pNewDoc->Modify(TRUE);
+ pNewDoc->UpdateAllViews(this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
+ }
+ }
+}
+
+void
+ImageFileView::OnDivide (wxCommandEvent& event)
+{
+ std::vector<ImageFileDocument*> vecIF;
+ theApp->getCompatibleImages (GetDocument(), vecIF);
+
+ if (vecIF.size() == 0) {
+ wxMessageBox ("There are no compatible image files open for comparision", "No comparison images");
+ } else {
+ DialogGetComparisonImage dialogGetCompare (getFrameForChild(), "Get Image to Divide", vecIF, false);
+
+ if (dialogGetCompare.ShowModal() == wxID_OK) {
+ ImageFile& rIF = GetDocument()->getImageFile();
+ ImageFileDocument* pRHSDoc = dialogGetCompare.getImageFileDocument();
+ const ImageFile& rRHSIF = pRHSDoc->getImageFile();
+ ImageFileDocument* pNewDoc = theApp->newImageDoc();
+ if (! pNewDoc) {
+ sys_error (ERR_SEVERE, "Unable to create image file");
+ return;
+ }
+ ImageFile& newImage = pNewDoc->getImageFile();
+ newImage.setArraySize (rIF.nx(), rIF.ny());
+ rIF.divideImages (rRHSIF, newImage);
+ std::ostringstream os;
+ os << "Divide image " << GetDocument()->GetFirstView()->GetFrame()->GetTitle().c_str() << " by "
+ << pRHSDoc->GetFirstView()->GetFrame()->GetTitle().c_str();
+ wxString s = GetDocument()->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rIF, s.c_str());
+ s = pRHSDoc->GetFirstView()->GetFrame()->GetTitle() + ": ";
+ newImage.labelsCopy (rRHSIF, s.c_str());
+ newImage.labelAdd (os.str().c_str());
+ *theApp->getLog() << os.str().c_str() << "\n";
+ if (theApp->getSetModifyNewDocs())
+ pNewDoc->Modify(TRUE);
+ pNewDoc->UpdateAllViews(this);
+ pNewDoc->getView()->OnUpdate (this, NULL);
+ pNewDoc->getView()->getFrame()->Show(true);
+ }
+ }
+}
+
+
+#ifdef HAVE_FFT
+void
+ImageFileView::OnFFT (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.fft (rIF);
+ rIF.labelAdd ("FFT Image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnIFFT (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.ifft (rIF);
+ rIF.labelAdd ("IFFT Image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnFFTRows (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.fftRows (rIF);
+ rIF.labelAdd ("FFT Rows");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnIFFTRows (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.ifftRows (rIF);
+ rIF.labelAdd ("IFFT Rows");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnFFTCols (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.fftCols (rIF);
+ rIF.labelAdd ("FFT Columns");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnIFFTCols (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ rIF.ifftCols (rIF);
+ rIF.labelAdd ("IFFT Columns");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+#endif
+
+void
+ImageFileView::OnFourier (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ wxProgressDialog dlgProgress (wxString("Fourier"), wxString("Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+ rIF.fourier (rIF);
+ rIF.labelAdd ("Fourier Image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnInverseFourier (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ wxProgressDialog dlgProgress (wxString("Inverse Fourier"), wxString("Inverse Fourier Progress"), 1, getFrameForChild(), wxPD_APP_MODAL);
+ rIF.inverseFourier (rIF);
+ rIF.labelAdd ("Inverse Fourier Image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnShuffleNaturalToFourierOrder (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ Fourier::shuffleNaturalToFourierOrder (rIF);
+ rIF.labelAdd ("Shuffle Natural To Fourier Order");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnShuffleFourierToNaturalOrder (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ Fourier::shuffleFourierToNaturalOrder (rIF);
+ rIF.labelAdd ("Shuffle Fourier To Natural Order");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+}
+
+void
+ImageFileView::OnMagnitude (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ if (rIF.isComplex()) {
+ rIF.magnitude (rIF);
+ rIF.labelAdd ("Magnitude of complex-image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+ }
+}
+
+void
+ImageFileView::OnPhase (wxCommandEvent& event)
+{
+ ImageFile& rIF = GetDocument()->getImageFile();
+ if (rIF.isComplex()) {
+ rIF.phase (rIF);
+ rIF.labelAdd ("Phase of complex-image");
+ m_bMinSpecified = false;
+ m_bMaxSpecified = false;
+ if (theApp->getSetModifyNewDocs())
+ GetDocument()->Modify(TRUE);
+ GetDocument()->UpdateAllViews(this);
+ }
+}
+
+