r570: no message
[ctsim.git] / src / views.cpp
index 8721cd4cd886b0f854dc22454cccd424261949cc..c20009dbf38813fec99bc18711f64237e2527678 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.107 2001/02/19 20:23:17 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
@@ -911,6 +911,7 @@ 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");
   
@@ -1825,7 +1826,7 @@ PhantomFileView::PhantomFileView()
   m_iDefaultNDet = 367;
   m_iDefaultNView = 320;
 #endif
-  m_iDefaultNSample = 1;
+  m_iDefaultNSample = 2;
   m_dDefaultRotation = 1;
   m_dDefaultFocalLength = 2;
   m_dDefaultViewRatio = 1;
@@ -1901,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) {
@@ -2084,6 +2085,7 @@ 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");
   
@@ -2281,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 ();
@@ -2315,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 ();
@@ -2371,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);
@@ -2399,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;
@@ -2498,6 +2513,7 @@ 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");
   
@@ -2818,6 +2834,7 @@ 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");
   
@@ -3064,6 +3081,7 @@ 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");