+\r
+void\r
+ImageFileView::OnExport (wxCommandEvent& event)\r
+{\r
+ ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();\r
+ ImageFileArrayConst v = rIF.getArray();\r
+ int nx = rIF.nx();\r
+ int ny = rIF.ny();\r
+ if (v != NULL && nx != 0 && ny != 0) {\r
+ if (! m_bMinSpecified || ! m_bMaxSpecified) {\r
+ double min, max;\r
+ rIF.getMinMax (min, max);\r
+ if (! m_bMinSpecified)\r
+ m_dMinPixel = min;\r
+ if (! m_bMaxSpecified)\r
+ m_dMaxPixel = max;\r
+ }\r
+\r
+ DialogExportParameters dialogExport (m_frame, m_iDefaultExportFormatID);\r
+ if (dialogExport.ShowModal() == wxID_OK) {\r
+ wxString strFormatName (dialogExport.getFormatName ());\r
+ m_iDefaultExportFormatID = ImageFile::convertFormatNameToID (strFormatName.c_str());\r
+\r
+ wxString strExt;\r
+ wxString strWildcard;\r
+ if (m_iDefaultExportFormatID == ImageFile::FORMAT_PGM || m_iDefaultExportFormatID == ImageFile::FORMAT_PGMASCII) {\r
+ strExt = ".pgm";\r
+ strWildcard = "PGM Files (*.pgm)|*.pgm";\r
+ }\r
+#ifdef HAVE_PNG\r
+ else if (m_iDefaultExportFormatID == ImageFile::FORMAT_PNG || m_iDefaultExportFormatID == ImageFile::FORMAT_PNG16) {\r
+ strExt = ".png";\r
+ strWildcard = "PNG Files (*.png)|*.png";\r
+ }\r
+#endif\r
+\r
+ const wxString& strFilename = wxFileSelector (wxString("Export Filename"), wxString(""), \r
+ wxString(""), strExt, strWildcard, wxOVERWRITE_PROMPT | wxHIDE_READONLY | wxSAVE);\r
+ if (strFilename) {\r
+ rIF.exportImage (strFormatName.c_str(), strFilename.c_str(), 1, 1, m_dMinPixel, m_dMaxPixel);\r
+ *theApp->getLog() << "Exported file " << strFilename << "\n";\r
+ }\r
+ }\r
+ }\r
+}\r
+\r
+void\r
+ImageFileView::OnScaleSize (wxCommandEvent& event)\r
+{\r
+ ImageFile& rIF = GetDocument()->getImageFile();\r
+ unsigned int iOldNX = rIF.nx();\r
+ unsigned int iOldNY = rIF.ny();\r
+\r
+ DialogGetXYSize dialogGetXYSize (m_frame, "Set New X & Y Dimensions", iOldNX, iOldNY);\r
+ if (dialogGetXYSize.ShowModal() == wxID_OK) {\r
+ unsigned int iNewNX = dialogGetXYSize.getXSize();\r
+ unsigned int iNewNY = dialogGetXYSize.getYSize();\r
+ std::ostringstream os;\r
+ os << "Scale Size from (" << iOldNX << "," << iOldNY << ") to (" << iNewNX << "," << iNewNY << ")";\r
+ ImageFileDocument* pScaledDoc = dynamic_cast<ImageFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.if", wxDOC_SILENT));\r
+ if (! pScaledDoc) {\r
+ sys_error (ERR_SEVERE, "Unable to create image file");\r
+ return;\r
+ }\r
+ ImageFile& rScaledIF = pScaledDoc->getImageFile();\r
+ rScaledIF.setArraySize (iNewNX, iNewNY);\r
+ rScaledIF.labelAdd (os.str().c_str());\r
+ rIF.scaleImage (rScaledIF);\r
+ *theApp->getLog() << os.str().c_str() << "\n";\r
+ if (theApp->getSetModifyNewDocs())\r
+ pScaledDoc->Modify(TRUE);\r
+ pScaledDoc->UpdateAllViews (this);\r
+ pScaledDoc->GetFirstView()->OnUpdate (this, NULL);\r
+ }\r
+}\r
+\r
+void\r
+ImageFileView::OnPlotRow (wxCommandEvent& event)\r
+{\r
+ int xCursor, yCursor;\r
+ if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {\r
+ wxMessageBox ("No row selected. Please use left mouse button on image to select column","Error");\r
+ return;\r
+ }\r
+ \r
+ const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();\r
+ ImageFileArrayConst v = rIF.getArray();\r
+ int nx = rIF.nx();\r
+ int ny = rIF.ny();\r
+ \r
+ if (v != NULL && yCursor < ny) {\r
+ double* pX = new double [nx];\r
+ double* pY = new double [nx];\r
+ for (int i = 0; i < nx; i++) {\r
+ pX[i] = i;\r
+ pY[i] = v[i][yCursor];\r
+ }\r
+ PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));\r
+ if (! pPlotDoc) {\r
+ sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");\r
+ } else {\r
+ PlotFile& rPlotFile = pPlotDoc->getPlotFile();\r
+ std::ostringstream os;\r
+ os << "Row " << yCursor;\r
+ std::string title("title ");\r
+ title += os.str();\r
+ rPlotFile.addEzsetCommand (title.c_str());\r
+ rPlotFile.addEzsetCommand ("xlabel Column");\r
+ rPlotFile.addEzsetCommand ("ylabel Pixel Value");\r
+ rPlotFile.addEzsetCommand ("lxfrac 0");\r
+ rPlotFile.addEzsetCommand ("box");\r
+ rPlotFile.addEzsetCommand ("grid");\r
+ rPlotFile.setCurveSize (2, nx);\r
+ rPlotFile.addColumn (0, pX);\r
+ rPlotFile.addColumn (1, pY);\r
+ }\r
+ delete pX;\r
+ delete pY;\r
+ if (theApp->getSetModifyNewDocs())\r
+ pPlotDoc->Modify(true);\r
+ pPlotDoc->UpdateAllViews();\r
+ }\r
+}\r
+
+void\r
+ImageFileView::OnPlotCol (wxCommandEvent& event)\r
+{\r
+ int xCursor, yCursor;\r
+ if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {\r
+ wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");\r
+ return;\r
+ }\r
+ \r
+ const ImageFile& rIF = dynamic_cast<ImageFileDocument*>(GetDocument())->getImageFile();\r
+ ImageFileArrayConst v = rIF.getArray();\r
+ int nx = rIF.nx();\r
+ int ny = rIF.ny();\r
+ \r
+ if (v != NULL && xCursor < nx) {\r
+ double* pX = new double [ny];\r
+ double* pY = new double [ny];\r
+ for (int i = 0; i < ny; i++) {\r
+ pX[i] = i;\r
+ pY[i] = v[xCursor][i];\r
+ }\r
+ PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));\r
+ if (! pPlotDoc) {\r
+ sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");\r
+ } else {\r
+ PlotFile& rPlotFile = pPlotDoc->getPlotFile();\r
+ std::ostringstream os;\r
+ os << "Column " << xCursor;\r
+ std::string title("title ");\r
+ title += os.str();\r
+ rPlotFile.addEzsetCommand (title.c_str());\r
+ rPlotFile.addEzsetCommand ("xlabel Row");\r
+ rPlotFile.addEzsetCommand ("ylabel Pixel Value");\r
+ rPlotFile.addEzsetCommand ("lxfrac 0");\r
+ rPlotFile.addEzsetCommand ("box");\r
+ rPlotFile.addEzsetCommand ("grid");\r
+ rPlotFile.setCurveSize (2, nx);\r
+ rPlotFile.addColumn (0, pX);\r
+ rPlotFile.addColumn (1, pY);\r
+ }\r
+ delete pX;\r
+ delete pY;\r
+ if (theApp->getSetModifyNewDocs())\r
+ pPlotDoc->Modify(true);\r
+ pPlotDoc->UpdateAllViews();\r
+ }\r
+}\r
+\r
+void\r
+ImageFileView::OnCompareCol (wxCommandEvent& event)\r
+{\r
+ int xCursor, yCursor;\r
+ if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {\r
+ wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");\r
+ return;\r
+ }\r
+ \r
+ std::vector<ImageFileDocument*> vecIFDoc;\r
+ theApp->getCompatibleImages (GetDocument(), vecIFDoc);\r
+ if (vecIFDoc.size() == 0) {\r
+ wxMessageBox ("No compatible images for Column Comparison", "Error");\r
+ return;\r
+ }\r
+ DialogGetComparisonImage dialogGetCompare (m_frame, "Get Comparison Image", vecIFDoc, false);\r
+ \r
+ if (dialogGetCompare.ShowModal() == wxID_OK) {\r
+ ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();\r
+ const ImageFile& rIF = GetDocument()->getImageFile();\r
+ const ImageFile& rCompareIF = pCompareDoc->getImageFile();\r
+ \r
+ ImageFileArrayConst v1 = rIF.getArray();\r
+ ImageFileArrayConst v2 = rCompareIF.getArray();\r
+ int nx = rIF.nx();\r
+ int ny = rIF.ny();\r
+ \r
+ if (v1 != NULL && xCursor < nx) {\r
+ double* pX = new double [ny];\r
+ double* pY1 = new double [ny];\r
+ double* pY2 = new double [ny];\r
+ for (int i = 0; i < ny; i++) {\r
+ pX[i] = i;\r
+ pY1[i] = v1[xCursor][i];\r
+ pY2[i] = v2[xCursor][i];\r
+ }\r
+ PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));\r
+ if (! pPlotDoc) {\r
+ sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");\r
+ } else {\r
+ PlotFile& rPlotFile = pPlotDoc->getPlotFile();\r
+ std::ostringstream os;\r
+ os << "Column " << xCursor << " Comparison";\r
+ std::string title("title ");\r
+ title += os.str();\r
+ rPlotFile.addEzsetCommand (title.c_str());\r
+ rPlotFile.addEzsetCommand ("xlabel Row");\r
+ rPlotFile.addEzsetCommand ("ylabel Pixel Value");\r
+ rPlotFile.addEzsetCommand ("lxfrac 0");\r
+ rPlotFile.addEzsetCommand ("curve 1");\r
+ rPlotFile.addEzsetCommand ("color 2");\r
+ rPlotFile.addEzsetCommand ("curve 2");\r
+ rPlotFile.addEzsetCommand ("color 4");\r
+ rPlotFile.addEzsetCommand ("dash 5");\r
+ rPlotFile.addEzsetCommand ("box");\r
+ rPlotFile.addEzsetCommand ("grid");\r
+ rPlotFile.setCurveSize (3, nx);\r
+ rPlotFile.addColumn (0, pX);\r
+ rPlotFile.addColumn (1, pY1);\r
+ rPlotFile.addColumn (2, pY2);\r
+ }\r
+ delete pX;\r
+ delete pY1;\r
+ delete pY2;\r
+ if (theApp->getSetModifyNewDocs())\r
+ pPlotDoc->Modify(true);\r
+ pPlotDoc->UpdateAllViews();\r
+ }\r
+ }\r
+}\r
+
+void\r
+ImageFileView::OnCompareRow (wxCommandEvent& event)\r
+{\r
+ int xCursor, yCursor;\r
+ if (! m_canvas->GetCurrentCursor (xCursor, yCursor)) {\r
+ wxMessageBox ("No column selected. Please use left mouse button on image to select column","Error");\r
+ return;\r
+ }\r
+ \r
+ std::vector<ImageFileDocument*> vecIFDoc;\r
+ theApp->getCompatibleImages (GetDocument(), vecIFDoc);\r
+ \r
+ if (vecIFDoc.size() == 0) {\r
+ wxMessageBox ("No compatible images for Row Comparison", "Error");\r
+ return;\r
+ }\r
+ \r
+ DialogGetComparisonImage dialogGetCompare (m_frame, "Get Comparison Image", vecIFDoc, false);\r
+ \r
+ if (dialogGetCompare.ShowModal() == wxID_OK) {\r
+ ImageFileDocument* pCompareDoc = dialogGetCompare.getImageFileDocument();\r
+ const ImageFile& rIF = GetDocument()->getImageFile();\r
+ const ImageFile& rCompareIF = pCompareDoc->getImageFile();\r
+ \r
+ ImageFileArrayConst v1 = rIF.getArray();\r
+ ImageFileArrayConst v2 = rCompareIF.getArray();\r
+ int nx = rIF.nx();\r
+ int ny = rIF.ny();\r
+ \r
+ if (v1 != NULL && yCursor < ny) {\r
+ double* pX = new double [nx];\r
+ double* pY1 = new double [nx];\r
+ double* pY2 = new double [nx];\r
+ for (int i = 0; i < nx; i++) {\r
+ pX[i] = i;\r
+ pY1[i] = v1[i][yCursor];\r
+ pY2[i] = v2[i][yCursor];\r
+ }\r
+ PlotFileDocument* pPlotDoc = dynamic_cast<PlotFileDocument*>(theApp->getDocManager()->CreateDocument("untitled.plt", wxDOC_SILENT));\r
+ if (! pPlotDoc) {\r
+ sys_error (ERR_SEVERE, "Internal error: unable to create Plot file");\r
+ } else {\r
+ PlotFile& rPlotFile = pPlotDoc->getPlotFile();\r
+ std::ostringstream os;\r
+ os << "Row " << yCursor << " Comparison";\r
+ std::string title("title ");\r
+ title += os.str();\r
+ rPlotFile.addEzsetCommand (title.c_str());\r
+ rPlotFile.addEzsetCommand ("xlabel Column");\r
+ rPlotFile.addEzsetCommand ("ylabel Pixel Value");\r
+ rPlotFile.addEzsetCommand ("lxfrac 0");\r
+ rPlotFile.addEzsetCommand ("curve 1");\r
+ rPlotFile.addEzsetCommand ("color 2");\r
+ rPlotFile.addEzsetCommand ("curve 2");\r
+ rPlotFile.addEzsetCommand ("color 4");\r
+ rPlotFile.addEzsetCommand ("dash 5");\r
+ rPlotFile.addEzsetCommand ("box");\r
+ rPlotFile.addEzsetCommand ("grid");\r
+ rPlotFile.setCurveSize (3, ny);\r
+ rPlotFile.addColumn (0, pX);\r
+ rPlotFile.addColumn (1, pY1);\r
+ rPlotFile.addColumn (2, pY2);\r
+ }\r
+ delete pX;\r
+ delete pY1;\r
+ delete pY2;\r
+ if (theApp->getSetModifyNewDocs())\r
+ pPlotDoc->Modify(true);\r
+ pPlotDoc->UpdateAllViews();\r
+ }\r
+ }\r
+}\r
+\r
+\r