X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fviews.cpp;h=c20009dbf38813fec99bc18711f64237e2527678;hb=1a7c2cc82f5a0c04bec766776e57c563378dc611;hp=306ce5b8c2405d4659409e429911a7e3ecb7aeaf;hpb=50fd2b2fb2ff63871986e6853dbebad0ecd00698;p=ctsim.git diff --git a/src/views.cpp b/src/views.cpp index 306ce5b..c20009d 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: views.cpp,v 1.105 2001/02/16 02:36:18 kevin Exp $ +** $Id: views.cpp,v 1.111 2001/02/22 00:56:50 kevin Exp $ ** ** This program is free software; you can redistribute it and/or modify ** it under the terms of the GNU General Public License (version 2) as @@ -863,14 +863,14 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) filter_menu->Append (IFMENU_FILTER_EXP, "&Exp"); filter_menu->AppendSeparator(); #ifdef HAVE_FFT - filter_menu->Append (IFMENU_FILTER_FFT, "2D &FFT"); - filter_menu->Append (IFMENU_FILTER_IFFT, "2D &IFFT"); + filter_menu->Append (IFMENU_FILTER_FFT, "2-D &FFT"); + filter_menu->Append (IFMENU_FILTER_IFFT, "2-D &IFFT"); filter_menu->Append (IFMENU_FILTER_FFT_ROWS, "FFT Rows"); filter_menu->Append (IFMENU_FILTER_IFFT_ROWS, "IFFT Rows"); filter_menu->Append (IFMENU_FILTER_FFT_COLS, "FFT Columns"); filter_menu->Append (IFMENU_FILTER_IFFT_COLS, "IFFT Columns"); - filter_menu->Append (IFMENU_FILTER_FOURIER, "F&ourier"); - filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "Inverse Fo&urier"); + filter_menu->Append (IFMENU_FILTER_FOURIER, "2-D F&ourier"); + filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "2-D Inverse Fo&urier"); #else filter_menu->Append (IFMENU_FILTER_FOURIER, "&Fourier"); filter_menu->Append (IFMENU_FILTER_INVERSE_FOURIER, "&Inverse Fourier"); @@ -911,6 +911,8 @@ ImageFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -1824,8 +1826,8 @@ PhantomFileView::PhantomFileView() m_iDefaultNDet = 367; m_iDefaultNView = 320; #endif - m_iDefaultNSample = 1; - m_dDefaultRotation = 2; + m_iDefaultNSample = 2; + m_dDefaultRotation = 1; m_dDefaultFocalLength = 2; m_dDefaultViewRatio = 1; m_dDefaultScanRatio = 1; @@ -1900,7 +1902,7 @@ PhantomFileView::OnProjections (wxCommandEvent& event) return; } pProj->initFromScanner (theScanner); - m_dDefaultRotation /= PI; // convert back to PI units + m_dDefaultRotation /= TWOPI; // convert back to fraction of a circle Timer timer; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { @@ -2083,6 +2085,8 @@ PhantomFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -2279,21 +2283,26 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event) m_iDefaultPolarNX = dialogPolar.getXSize(); m_iDefaultPolarNY = dialogPolar.getYSize(); ImageFileDocument* pPolarDoc = theApp->newImageDoc(); - ImageFile& rIF = pPolarDoc->getImageFile(); + ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); + m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); + if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) { + delete pIF; + *theApp->getLog() << "Error converting to Polar\n"; + return; + } + pPolarDoc = theApp->newImageDoc (); if (! pPolarDoc) { sys_error (ERR_SEVERE, "Unable to create image file"); return; } - rIF.setArraySize (m_iDefaultPolarNX, m_iDefaultPolarNY); - m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); - rProj.convertPolar (rIF, m_iDefaultPolarInterpolation); - rIF.labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + pPolarDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); std::ostringstream os; os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to polar image: xSize=" << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" << strInterpolation.c_str(); *theApp->getLog() << os.str().c_str() << "\n"; - rIF.labelAdd (os.str().c_str()); + pIF->labelAdd (os.str().c_str()); if (theApp->getAskDeleteNewDocs()) pPolarDoc->Modify (true); pPolarDoc->UpdateAllViews (); @@ -2313,22 +2322,27 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event) m_iDefaultPolarNX = dialogPolar.getXSize(); m_iDefaultPolarNY = dialogPolar.getYSize(); m_iDefaultPolarZeropad = dialogPolar.getZeropad(); + ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); + + m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); + if (! rProj.convertFFTPolar (*pIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad)) { + delete pIF; + *theApp->getLog() << "Error converting to polar\n"; + return; + } ImageFileDocument* pPolarDoc = theApp->newImageDoc(); - ImageFile& rIF = pPolarDoc->getImageFile(); if (! pPolarDoc) { sys_error (ERR_SEVERE, "Unable to create image file"); return; } - rIF.setArraySize (m_iDefaultPolarNX, m_iDefaultPolarNY); - m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); - rProj.convertFFTPolar (rIF, m_iDefaultPolarInterpolation, m_iDefaultPolarZeropad); - rIF.labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); + pPolarDoc->setImageFile (pIF); + pIF->labelAdd (rProj.getLabel().getLabelString().c_str(), rProj.calcTime()); std::ostringstream os; os << "Convert projection file " << GetFrame()->GetTitle().c_str() << " to FFT polar image: xSize=" << m_iDefaultPolarNX << ", ySize=" << m_iDefaultPolarNY << ", interpolation=" << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad; *theApp->getLog() << os.str().c_str() << "\n"; - rIF.labelAdd (os.str().c_str()); + pIF->labelAdd (os.str().c_str()); if (theApp->getAskDeleteNewDocs()) pPolarDoc->Modify (true); pPolarDoc->UpdateAllViews (); @@ -2369,26 +2383,29 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) wxString optBackprojectName = dialogReconstruction.getBackprojectName(); m_iDefaultBackprojector = Backprojector::convertBackprojectNameToID (optBackprojectName.c_str()); m_iDefaultTrace = dialogReconstruction.getTrace(); + if (m_iDefaultNX > 0 && m_iDefaultNY > 0) { const Projections& rProj = GetDocument()->getProjections(); - ImageFile* pImageFile = new ImageFile; pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY); - Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace); + Reconstructor* pReconstructor = new Reconstructor (rProj, *pImageFile, optFilterName.c_str(), + m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), + optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace); Timer timerRecon; if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstructor, rProj, *pImageFile, m_iDefaultTrace, getFrameForChild()); for (int iView = 0; iView < rProj.nView(); iView++) { ::wxYield(); - if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView)) { + if (pDlgReconstruct->isCancelled() || ! pDlgReconstruct->reconstructView (iView, true)) { delete pDlgReconstruct; delete pReconstructor; delete pImageFile; return; } ::wxYield(); + ::wxYield(); while (pDlgReconstruct->isPaused()) { ::wxYield(); ::wxUsleep(50); @@ -2397,9 +2414,9 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event) delete pDlgReconstruct; } else { wxProgressDialog dlgProgress (wxString("Reconstruction"), wxString("Reconstruction Progress"), rProj.nView() + 1, getFrameForChild(), wxPD_CAN_ABORT); - for (int i = 0; i < rProj.nView(); i++) { - pReconstructor->reconstructView (i, 1); - if (! dlgProgress.Update (i + 1)) { + for (int iView = 0; iView < rProj.nView(); iView++) { + pReconstructor->reconstructView (iView, 1); + if (! dlgProgress.Update (iView + 1)) { delete pReconstructor; delete pImageFile; return; @@ -2496,6 +2513,8 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -2815,6 +2834,8 @@ PlotFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar; @@ -3060,6 +3081,8 @@ TextFileView::CreateChildFrame (wxDocument *doc, wxView *view) wxMenu *help_menu = new wxMenu; help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1"); + help_menu->Append (MAINMENU_HELP_TIPS, "&Tips"); + help_menu->Append (IDH_QUICKSTART, "&Quick Start"); help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); wxMenuBar *menu_bar = new wxMenuBar;