r295: *** empty log message ***
authorKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 18 Dec 2000 05:40:30 +0000 (05:40 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Mon, 18 Dec 2000 05:40:30 +0000 (05:40 +0000)
ChangeLog
configure.in
libctgraphics/ezplot.cpp
libctgraphics/sgp.cpp
msvc/ctsim/ctsim.plg
src/dlgprojections.cpp
src/dlgreconstruct.cpp
src/dlgreconstruct.h

index 0f2442dddebcd6c1d40b48621b25a70a5e8b97d5..0e5355b70094e7e236dca0839ea66400db6a9822 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,15 +1,17 @@
-2.1.0 - 12/18/00 
+2.5.0 - 12/18/00 
+   First Microsoft Windows GUI version
+   Modifications for Microsoft Visual C++ compilation.
    Improved pjinfo to output binary headers and view data, useful
        when manually compiling phantoms that vary during projection
        process. Thanks to Ian Kay for idea and code submission.
    Improved pjinfo to output binary headers and view data, useful
        when manually compiling phantoms that vary during projection
        process. Thanks to Ian Kay for idea and code submission.
-   Modifications for Microsoft Visual C++ compilation.
-   First Microsoft Windows GUI version
    Improved sorting to find median in ImageFile::statistics
    Fixed core-dump bug in Array2dFile::labelsCopy() function (Ian Kay) 
    Improved sorting to find median in ImageFile::statistics
    Fixed core-dump bug in Array2dFile::labelsCopy() function (Ian Kay) 
+   Changed reconstruction dialog to fix onto smaller screens
+   Fixed display of plotting in Projection views
+   Improved animation displays for Projections and Reconstructions
    Changed code to explicitly use std:: namespace rather than 
        "namespace using std" statements
    Changed code to explicitly use std:: namespace rather than 
        "namespace using std" statements
-   Changed reconstruction dialog to fix onto smaller screens
-   Renamed if2img to ifexport
+   Renamed if2img to ifexport, if-1 to if1, if-2 to if2
        
 2.0.6 - 12/03/00
    Fixed minor compilation problem with procsignal.h
        
 2.0.6 - 12/03/00
    Fixed minor compilation problem with procsignal.h
index 95cfd99cc3c7254bd8d089a0e04389348ea3f071..403e5ef4831e49eaac7c7c4094d14609d5d06324 100644 (file)
@@ -4,7 +4,7 @@ dnl Must reset CDPATH so that bash's cd does not print to stdout
 dnl CDPATH=
 
 AC_INIT(src/ctsim.cpp)
 dnl CDPATH=
 
 AC_INIT(src/ctsim.cpp)
-AM_INIT_AUTOMAKE(ctsim,2.1.0)
+AM_INIT_AUTOMAKE(ctsim,2.5.0)
 AM_CONFIG_HEADER(config.h)
 
 dnl Checks for programs.
 AM_CONFIG_HEADER(config.h)
 
 dnl Checks for programs.
index 14c0a5b29f86aea97db1da7653c3c1b9a36d4e0e..3ea5ce1fe2c383c0e59b6975fb1d30c369d20f07 100644 (file)
@@ -6,7 +6,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ezplot.cpp,v 1.17 2000/12/16 06:12:47 kevin Exp $
+**  $Id: ezplot.cpp,v 1.18 2000/12/18 05:40:30 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
 **
 **  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
@@ -32,8 +32,6 @@ int snprintf (char *, size_t, const char*, ...);
 // Defaults
 static const double TICKRATIO = 0.4;   // ratio of minor to major tick lengths
 static const int MAXNUMFMT = 15;       // maximum length of a numeric format 
 // Defaults
 static const double TICKRATIO = 0.4;   // ratio of minor to major tick lengths
 static const int MAXNUMFMT = 15;       // maximum length of a numeric format 
-static const double DEF_CHARHEIGHT = (1./43.); //size of characters in NDC 
-static const double DEF_CHARWIDTH = (1./80.); // size of characters in NDC 
 static const int DEF_CURVE_CLR = C_RED;
 
 
 static const int DEF_CURVE_CLR = C_RED;
 
 
@@ -149,8 +147,8 @@ EZPlot::EZPlot (SGP& sgp)
 void
 EZPlot::initPlotSettings ()
 {
 void
 EZPlot::initPlotSettings ()
 {
-  charheight = DEF_CHARHEIGHT;
-  charwidth = DEF_CHARWIDTH;
+  charheight = rSGP.getCharHeight();
+  charwidth = rSGP.getCharWidth();
 
   c_xlabel = "";
   c_ylabel =  "";
 
   c_xlabel = "";
   c_ylabel =  "";
index f22dd378300339355e4757e1b88a93d6222a269d..14cfd63e500a9f40d3dc4a94f03588017d4d68c3 100644 (file)
@@ -7,7 +7,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: sgp.cpp,v 1.19 2000/12/18 02:23:43 kevin Exp $
+**  $Id: sgp.cpp,v 1.20 2000/12/18 05:40:30 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
 **
 **  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
@@ -99,12 +99,14 @@ SGP::SGP (const SGPDriver& driver)
     static const double dScreenDPI = 82;
     static const double dPointsPerInch = 72.;
     m_dPointsPerPixel = dPointsPerInch / dScreenDPI;
     static const double dScreenDPI = 82;
     static const double dPointsPerInch = 72.;
     m_dPointsPerPixel = dPointsPerInch / dScreenDPI;
-    const int iTestPointSize = 72;
+    const int iTestPointSize = 12;
     m_font.SetPointSize (iTestPointSize);
     m_driver.idWX()->SetFont(m_font);
     double dTestCharHeight = m_driver.idWX()->GetCharHeight();
     m_dPointsPerPixel = iTestPointSize / dTestCharHeight;\r
     m_font.SetPointSize (iTestPointSize);
     m_driver.idWX()->SetFont(m_font);
     double dTestCharHeight = m_driver.idWX()->GetCharHeight();
     m_dPointsPerPixel = iTestPointSize / dTestCharHeight;\r
-       m_driver.idWX()->SetBrush (*wxWHITE_BRUSH);
+//     wxWHITE_BRUSH->SetColour (255, 255, 255);\r
+//     wxWHITE_BRUSH->SetStyle (wxSOLID);\r
+       m_driver.idWX()->SetBackground (*wxWHITE_BRUSH);
   }
 #endif
 
   }
 #endif
 
@@ -163,8 +165,13 @@ SGP::eraseWindow ()
     g2_clear (m_driver.idG2());
 #endif
 #if HAVE_WXWINDOWS
     g2_clear (m_driver.idG2());
 #endif
 #if HAVE_WXWINDOWS
-  if (m_driver.isWX())
-    m_driver.idWX()->Clear();
+  if (m_driver.isWX()) {
+    wxBrush brushWhite;\r
+       brushWhite.SetColour(255,255,255);\r
+       m_driver.idWX()->SetBackground(brushWhite);\r
+       m_driver.idWX()->Clear();\r
+       m_driver.idWX()->SetBackground(wxNullBrush);\r
+  }
 #endif
 }
 
 #endif
 }
 
@@ -420,7 +427,7 @@ SGP::moveRel (double x, double y)
 void
 SGP::setTextSize (double height)
 {
 void
 SGP::setTextSize (double height)
 {
-    height /= (xw_max - xw_min);
+    height /= (yw_max - yw_min);  // convert to NDC
 #if HAVE_G2_H
   if (m_driver.isG2())
     g2_set_font_size(m_driver.idG2(), (height * m_iPhysicalYSize));
 #if HAVE_G2_H
   if (m_driver.isG2())
     g2_set_font_size(m_driver.idG2(), (height * m_iPhysicalYSize));
index 2ab3ea809089315dddf1f7cbaf88207cec9521b1..cf2bd492e20c45b479ea2d81518eaa38048b87a2 100644 (file)
@@ -6,13 +6,13 @@
 --------------------Configuration: ctsim - Win32 Debug--------------------\r
 </h3>\r
 <h3>Command Lines</h3>\r
 --------------------Configuration: ctsim - Win32 Debug--------------------\r
 </h3>\r
 <h3>Command Lines</h3>\r
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP219.tmp" with contents\r
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP20.tmp" with contents\r
 [\r
 /nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "\wx2\include" /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"2.1.0\" /D "_DEBUG" /D "__WXMSW__" /D "HAVE_SGP" /D VERSION="2.1.0" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c \r
 [\r
 /nologo /G6 /MTd /W3 /Gm /GR /GX /ZI /Od /I "\wx2\include" /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"2.1.0\" /D "_DEBUG" /D "__WXMSW__" /D "HAVE_SGP" /D VERSION="2.1.0" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c \r
-"C:\ctsim-2.0.6\src\dlgprojections.cpp"\r
+"C:\ctsim-2.0.6\src\dlgreconstruct.cpp"\r
 ]\r
 ]\r
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP219.tmp" \r
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP21A.tmp" with contents\r
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP20.tmp" \r
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP21.tmp" with contents\r
 [\r
 comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\lpng108\msvc\win32\libpng\lib_dbg\libpng.lib ..\..\..\lpng108\msvc\win32\zlib\lib_dbg\zlib.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib ../../../wx2/lib/wxd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrtd.lib" /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" \r
 ".\Debug\ctsim.obj"\r
 [\r
 comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ..\..\..\lpng108\msvc\win32\libpng\lib_dbg\libpng.lib ..\..\..\lpng108\msvc\win32\zlib\lib_dbg\zlib.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib ../../../wx2/lib/wxd.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /nodefaultlib:"libcd.lib" /nodefaultlib:"libcid.lib" /nodefaultlib:"msvcrtd.lib" /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" \r
 ".\Debug\ctsim.obj"\r
@@ -27,11 +27,13 @@ comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib w
 "\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib"\r
 "\wx2\lib\wxd.lib"\r
 ]\r
 "\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib"\r
 "\wx2\lib\wxd.lib"\r
 ]\r
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP21A.tmp"\r
+Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP21.tmp"\r
 <h3>Output Window</h3>\r
 Compiling...\r
 <h3>Output Window</h3>\r
 Compiling...\r
-dlgprojections.cpp\r
-Linking...\r
+dlgreconstruct.cpp\r
+C:\ctsim-2.0.6\src\dlgreconstruct.cpp(147) : error C2039: 'setDC' : is not a member of 'wxDC'\r
+        c:\wx2\include\wx\msw\dc.h(74) : see declaration of 'wxDC'\r
+Error executing cl.exe.\r
 Creating command line "bscmake.exe /nologo /o"Debug/ctsim.bsc"  ".\Debug\ctsim.sbr" ".\Debug\dialogs.sbr" ".\Debug\dlgprojections.sbr" ".\Debug\dlgreconstruct.sbr" ".\Debug\docs.sbr" ".\Debug\views.sbr""\r
 Creating browse info file...\r
 <h3>Output Window</h3>\r
 Creating command line "bscmake.exe /nologo /o"Debug/ctsim.bsc"  ".\Debug\ctsim.sbr" ".\Debug\dialogs.sbr" ".\Debug\dlgprojections.sbr" ".\Debug\dlgreconstruct.sbr" ".\Debug\docs.sbr" ".\Debug\views.sbr""\r
 Creating browse info file...\r
 <h3>Output Window</h3>\r
@@ -39,7 +41,7 @@ Creating browse info file...
 \r
 \r
 <h3>Results</h3>\r
 \r
 \r
 <h3>Results</h3>\r
-ctsim.exe - 0 error(s), 0 warning(s)\r
+ctsim.exe - 1 error(s), 0 warning(s)\r
 </pre>\r
 </body>\r
 </html>\r
 </pre>\r
 </body>\r
 </html>\r
index 6ac73fdcac33456145aa4120180e2f7fb94b08c3..cc5b246f85c2e39972518b8f0e626b190c9cfc54 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: dlgprojections.cpp,v 1.9 2000/12/18 02:23:43 kevin Exp $
+**  $Id: dlgprojections.cpp,v 1.10 2000/12/18 05:40:30 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
 **
 **  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
 ******************************************************************************/
 
 #ifdef __GNUG__
 ******************************************************************************/
 
 #ifdef __GNUG__
-  #pragma implementation "dlgprojections.h"
+#pragma implementation "dlgprojections.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-    #pragma hdrstop
+#pragma hdrstop
 #endif
 
 #ifndef WX_PRECOMP
 #endif
 
 #ifndef WX_PRECOMP
-    #include "wx/utils.h"
-    #include "wx/frame.h"
-    #include "wx/button.h"
-    #include "wx/stattext.h"
-    #include "wx/layout.h"
-    #include "wx/event.h"
-    #include "wx/intl.h"
-    #include "wx/settings.h"
-    #include "wx/dcclient.h"
-    #include "wx/timer.h"
+#include "wx/utils.h"
+#include "wx/frame.h"
+#include "wx/button.h"
+#include "wx/stattext.h"
+#include "wx/layout.h"
+#include "wx/event.h"
+#include "wx/intl.h"
+#include "wx/settings.h"
+#include "wx/dcclient.h"
+#include "wx/timer.h"
 #endif
 
 #include "dlgprojections.h"
 #endif
 
 #include "dlgprojections.h"
@@ -57,18 +57,18 @@ static const int LAYOUT_X_MARGIN = 4;
 static const int LAYOUT_Y_MARGIN = 4;
 
 BEGIN_EVENT_TABLE(ProjectionsDialog, wxDialog)
 static const int LAYOUT_Y_MARGIN = 4;
 
 BEGIN_EVENT_TABLE(ProjectionsDialog, wxDialog)
-   EVT_BUTTON(wxID_CANCEL, ProjectionsDialog::OnCancel)
-   EVT_BUTTON(ProjectionsDialog::ID_BTN_PAUSE, ProjectionsDialog::OnPause)
-   EVT_BUTTON(ProjectionsDialog::ID_BTN_STEP, ProjectionsDialog::OnStep)
-   EVT_CLOSE(ProjectionsDialog::OnClose)
-   EVT_PAINT(ProjectionsDialog::OnPaint)
+EVT_BUTTON(wxID_CANCEL, ProjectionsDialog::OnCancel)
+EVT_BUTTON(ProjectionsDialog::ID_BTN_PAUSE, ProjectionsDialog::OnPause)
+EVT_BUTTON(ProjectionsDialog::ID_BTN_STEP, ProjectionsDialog::OnStep)
+EVT_CLOSE(ProjectionsDialog::OnClose)
+EVT_PAINT(ProjectionsDialog::OnPaint)
 END_EVENT_TABLE()
 
 IMPLEMENT_CLASS(ProjectionsDialog, wxDialog)
 
 
 ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, const Phantom& rPhantom, const int iTrace, wxWindow *parent)
 END_EVENT_TABLE()
 
 IMPLEMENT_CLASS(ProjectionsDialog, wxDialog)
 
 
 ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, const Phantom& rPhantom, const int iTrace, wxWindow *parent)
-    : wxDialog(parent, -1, "Collect Projections", wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom), m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
+: wxDialog(parent, -1, "Collect Projections", wxDefaultPosition), m_rScanner(rScanner), m_rProjections(rProj), m_rPhantom(rPhantom), m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
 {
     m_state = Continue;
     m_iLastView = -1;
 {
     m_state = Continue;
     m_iLastView = -1;
@@ -80,13 +80,13 @@ ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, con
     wxLayoutConstraints* c = new wxLayoutConstraints;
     c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
     c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
     wxLayoutConstraints* c = new wxLayoutConstraints;
     c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
     c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
-
+       
     wxSize sizeBtn = wxButton::GetDefaultSize();
     c->width.Absolute(sizeBtn.x);
     c->height.Absolute(sizeBtn.y);
     wxSize sizeBtn = wxButton::GetDefaultSize();
     c->width.Absolute(sizeBtn.x);
     c->height.Absolute(sizeBtn.y);
-
+       
     m_btnAbort->SetConstraints(c);
     m_btnAbort->SetConstraints(c);
-
+       
     m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
     wxLayoutConstraints* cPause = new wxLayoutConstraints;
     cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
     m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
     wxLayoutConstraints* cPause = new wxLayoutConstraints;
     cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
@@ -94,7 +94,7 @@ ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, con
     cPause->width.Absolute(sizeBtn.x);
     cPause->height.Absolute(sizeBtn.y);
     m_btnPause->SetConstraints(cPause);
     cPause->width.Absolute(sizeBtn.x);
     cPause->height.Absolute(sizeBtn.y);
     m_btnPause->SetConstraints(cPause);
-
+       
     m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
     wxLayoutConstraints* cStep = new wxLayoutConstraints;
     cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
     m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
     wxLayoutConstraints* cStep = new wxLayoutConstraints;
     cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
@@ -102,39 +102,39 @@ ProjectionsDialog::ProjectionsDialog (Scanner& rScanner, Projections& rProj, con
     cStep->width.Absolute(sizeBtn.x);
     cStep->height.Absolute(sizeBtn.y);
     m_btnStep->SetConstraints(cStep);
     cStep->width.Absolute(sizeBtn.x);
     cStep->height.Absolute(sizeBtn.y);
     m_btnStep->SetConstraints(cStep);
-
+       
     SetAutoLayout(TRUE);
     Layout();
     SetAutoLayout(TRUE);
     Layout();
-
+       
     wxSize sizeDlg (500,500);
     if (sizeDlg.x != sizeDlg.y) {
     wxSize sizeDlg (500,500);
     if (sizeDlg.x != sizeDlg.y) {
-      sizeDlg.x = max(sizeDlg.x,sizeDlg.y);
-      sizeDlg.y = max(sizeDlg.x,sizeDlg.y);
+               sizeDlg.x = max(sizeDlg.x,sizeDlg.y);
+               sizeDlg.y = max(sizeDlg.x,sizeDlg.y);
     }
     if (m_iTrace >= Trace::TRACE_PLOT)
     }
     if (m_iTrace >= Trace::TRACE_PLOT)
-      sizeDlg.x += 250;
-
+               sizeDlg.x += 250;
+       
     m_iClientX = sizeDlg.x;
     m_iClientY = sizeDlg.y;
     SetClientSize(sizeDlg);
     m_iClientX = sizeDlg.x;
     m_iClientY = sizeDlg.y;
     SetClientSize(sizeDlg);
-
+       
     Centre(wxCENTER_FRAME | wxBOTH);
     Centre(wxCENTER_FRAME | wxBOTH);
-
+       
     if ( m_parentTop )
     if ( m_parentTop )
-      m_parentTop->Enable(FALSE);
-
+               m_parentTop->Enable(FALSE);
+       
     Show(TRUE);
     Enable(TRUE); // enable this window
     Show(TRUE);
     Enable(TRUE); // enable this window
-
+       
     m_bitmap.Create (m_iClientX, m_iClientY); // save a copy of screen\r
     m_pDC = dynamic_cast<wxDC*> (new wxClientDC (this));
     int x, y;
     this->GetClientSize(&x, &y);
     m_pSGPDriver = new SGPDriver (m_pDC, x, y);
     m_pSGP = new SGP (*m_pSGPDriver);
     m_bitmap.Create (m_iClientX, m_iClientY); // save a copy of screen\r
     m_pDC = dynamic_cast<wxDC*> (new wxClientDC (this));
     int x, y;
     this->GetClientSize(&x, &y);
     m_pSGPDriver = new SGPDriver (m_pDC, x, y);
     m_pSGP = new SGP (*m_pSGPDriver);
-
+       
     wxYield();     // Update the display
     wxYield();     // Update the display
-
+       
     m_pSGPDriver->idWX()->SetFont(*wxSWISS_FONT);
 #ifdef __WXMAC__
     MacUpdateImmediately();
     m_pSGPDriver->idWX()->SetFont(*wxSWISS_FONT);
 #ifdef __WXMAC__
     MacUpdateImmediately();
@@ -145,56 +145,55 @@ void
 ProjectionsDialog::showView (int iViewNumber)
 {
     if ( iViewNumber < m_rProjections.nView() ) {
 ProjectionsDialog::showView (int iViewNumber)
 {
     if ( iViewNumber < m_rProjections.nView() ) {
-       ::wxYield();        // update the display
-       m_iLastView = iViewNumber;
-       if (m_iTrace >= Trace::TRACE_PLOT)
-           m_pSGP->setViewport (0, 0, 0.66, 1);
-       ::wxYield();        // update the display\r
- //   m_pSGP->setTextSize (1/100.);\r
-       m_rScanner.collectProjections (m_rProjections, m_rPhantom, iViewNumber, 1, true, m_iTrace, m_pSGP);
-       ::wxYield();        // update the display
-       if (m_iTrace >= Trace::TRACE_PLOT) {
-           const DetectorArray& detArray = m_rProjections.getDetectorArray (iViewNumber);
-           const DetectorValue* detValues = detArray.detValues();
-           double* detPos = new double [detArray.nDet()];
-           for (int i = 0; i < detArray.nDet(); i++)
-               detPos[i] = i;
-           EZPlot ezplot (*m_pSGP);
-           ezplot.ezset("xporigin 0.66");
-           ezplot.ezset("yporigin 0.10");
-           ezplot.ezset("xlength  0.34");
-           ezplot.ezset("ylength  0.90");
-           ezplot.ezset("grid");
-           ezplot.ezset("box");
-           ezplot.addCurve (detValues, detPos, detArray.nDet());
-           ezplot.plot();\r
-               delete detPos;
-       }
+               m_iLastView = iViewNumber;\r
+               ::wxYield();        // update the display\r
+               m_pSGP->eraseWindow();\r
+               Refresh();\r
+
+               if (m_iTrace >= Trace::TRACE_PLOT)
+                       m_pSGP->setViewport (0, 0, 0.66, 1);
+               ::wxYield();        // update the display\r
+               m_rScanner.collectProjections (m_rProjections, m_rPhantom, iViewNumber, 1, true, m_iTrace, m_pSGP);
+               ::wxYield();        // update the display
+               if (m_iTrace >= Trace::TRACE_PLOT) {
+                       const DetectorArray& detArray = m_rProjections.getDetectorArray (iViewNumber);
+                       const DetectorValue* detValues = detArray.detValues();
+                       double* detPos = new double [detArray.nDet()];
+                       for (int i = 0; i < detArray.nDet(); i++)
+                               detPos[i] = i;
+                       EZPlot ezplot (*m_pSGP);
+                       ezplot.ezset("grid");
+                       ezplot.ezset("box");
+                       ezplot.addCurve (detValues, detPos, detArray.nDet());\r
+                       m_pSGP->setViewport (0.67, 0.1, 1., 1.);
+                       ezplot.plot();\r
+                       delete detPos;
+               }
     }
 }
 
 bool
 ProjectionsDialog::projectView (int iViewNumber)
 {
     }
 }
 
 bool
 ProjectionsDialog::projectView (int iViewNumber)
 {
-  if (iViewNumber <= m_iLastView)  // already done this view
-    return true;
-
-  if (iViewNumber < m_rProjections.nView()) {
-    showView (iViewNumber);
-    wxYield();        // update the display
-    if (m_iTrace >= Trace::TRACE_PLOT) {
-      ::wxUsleep(500);
-    }
-  } else {
-    m_state = Finished;    // so that we return TRUE below and 
-    // that [Cancel] handler knew what to do
-  }
+       if (iViewNumber <= m_iLastView)  // already done this view
+               return true;
+       
+       if (iViewNumber < m_rProjections.nView()) {
+               showView (iViewNumber);
+               wxYield();        // update the display
+               if (m_iTrace >= Trace::TRACE_PLOT) {
+                       ::wxUsleep(500);
+               }
+       } else {
+               m_state = Finished;    // so that we return TRUE below and 
+               // that [Cancel] handler knew what to do
+       }
     
 #ifdef __WXMAC__
     
 #ifdef __WXMAC__
-  MacUpdateImmediately();
+       MacUpdateImmediately();
 #endif
     
 #endif
     
-  return m_state != Cancelled;
+       return m_state != Cancelled;
 }
 
 
 }
 
 
@@ -202,86 +201,82 @@ ProjectionsDialog::projectView (int iViewNumber)
 
 void ProjectionsDialog::OnCancel (wxCommandEvent& event)
 {
 
 void ProjectionsDialog::OnCancel (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    // this means that the count down is already finished and we're being
-    // shown as a modal dialog - so just let the default handler do the job
-    event.Skip();
-  } else {
-    // request to cancel was received, the next time Update() is called we
-    // will handle it
-    m_state = Cancelled;
-
-    // update the button state immediately so that the user knows that the
-    // request has been noticed
-    m_btnAbort->Disable();
-  }
+       if ( m_state == Finished ) {
+               // this means that the count down is already finished and we're being
+               // shown as a modal dialog - so just let the default handler do the job
+               event.Skip();
+       } else {
+               // request to cancel was received, the next time Update() is called we
+               // will handle it
+               m_state = Cancelled;
+               
+               // update the button state immediately so that the user knows that the
+               // request has been noticed
+               m_btnAbort->Disable();
+       }
 }
 
 
 void 
 ProjectionsDialog::OnPause (wxCommandEvent& event)
 {
 }
 
 
 void 
 ProjectionsDialog::OnPause (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    // this means that the count down is already finished and we're being
-    // shown as a modal dialog - so just let the default handler do the job
-    event.Skip();
-  } else {
-      if (m_state == Continue) {
-         m_memoryDC.SelectObject (m_bitmap);       // in memoryDC
-         m_pSGP->setDC (&m_memoryDC);
-         m_memoryDC.SetFont (*wxSWISS_FONT);
-         showView (m_iLastView);
-         m_pSGP->setDC (m_pDC);
-         m_memoryDC.SelectObject(wxNullBitmap);
-         m_state = Paused;
-         m_btnPause->SetLabel (wxString("Resume"));
-      } else if (m_state == Paused) {
-         m_state = Continue;
-         m_btnPause->SetLabel (wxString("Pause"));
-      }
-  }
+       if ( m_state == Finished ) {
+               // this means that the count down is already finished and we're being
+               // shown as a modal dialog - so just let the default handler do the job
+               event.Skip();
+       } else if (m_state == Continue) {
+               m_memoryDC.SelectObject (m_bitmap);       // in memoryDC
+               m_pSGP->setDC (&m_memoryDC);
+               m_memoryDC.SetFont (*wxSWISS_FONT);
+               showView (m_iLastView);
+               m_state = Paused;
+               m_btnPause->SetLabel (wxString("Resume"));
+       } else if (m_state == Paused) {
+               m_pSGP->setDC (m_pDC);\r
+               m_memoryDC.SelectObject(wxNullBitmap);\r
+               m_state = Continue;
+               m_btnPause->SetLabel (wxString("Pause"));
+       }
 }
 
 void 
 ProjectionsDialog::OnStep (wxCommandEvent& event)
 {
 }
 
 void 
 ProjectionsDialog::OnStep (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    // this means that the count down is already finished and we're being
-    // shown as a modal dialog - so just let the default handler do the job
-    event.Skip();
-  } else {
-      if (m_state == Continue) {
-         m_memoryDC.SelectObject (m_bitmap);       // in memoryDC
-         m_pSGP->setDC (&m_memoryDC);
-         m_memoryDC.SetFont (*wxSWISS_FONT);
-         m_rScanner.collectProjections (m_rProjections, m_rPhantom, m_iLastView, 1, true, m_iTrace, m_pSGP);
-         m_pSGP->setDC (m_pDC);
-         m_memoryDC.SelectObject(wxNullBitmap);
-         m_state = Paused;
-         m_btnPause->SetLabel (wxString("Resume"));
-      } else if (m_state == Paused) {
-         projectView (m_iLastView + 1);
-      }
-  }
+       if ( m_state == Finished ) {
+               // this means that the count down is already finished and we're being
+               // shown as a modal dialog - so just let the default handler do the job
+               event.Skip();
+       } else if (m_state == Continue) {
+               m_memoryDC.SelectObject (m_bitmap);       // in memoryDC
+               m_pSGP->setDC (&m_memoryDC);
+               m_memoryDC.SetFont (*wxSWISS_FONT);
+               m_rScanner.collectProjections (m_rProjections, m_rPhantom, m_iLastView, 1, true, m_iTrace, m_pSGP);
+               m_state = Paused;
+               m_btnPause->SetLabel (wxString("Resume"));
+       } else if (m_state == Paused) {
+               m_pSGP->setDC (m_pDC);\r
+               m_memoryDC.SelectObject(wxNullBitmap);\r
+               projectView (m_iLastView + 1);
+       }
 }
 
 void ProjectionsDialog::OnClose(wxCloseEvent& event)
 {
     if ( m_state == Uncancellable )
 }
 
 void ProjectionsDialog::OnClose(wxCloseEvent& event)
 {
     if ( m_state == Uncancellable )
-      event.Veto(TRUE);    // can't close this dialog
+               event.Veto(TRUE);    // can't close this dialog
     else if ( m_state == Finished )
     else if ( m_state == Finished )
-      event.Skip(); // let the default handler close the window as we already terminated
+               event.Skip(); // let the default handler close the window as we already terminated
     else
     else
-      m_state = Cancelled;          // next Update() will notice it
+               m_state = Cancelled;          // next Update() will notice it
 }
 
 void
 ProjectionsDialog::OnPaint (wxPaintEvent& event)
 {
 }
 
 void
 ProjectionsDialog::OnPaint (wxPaintEvent& event)
 {
-  wxPaintDC paintDC (this);\r
-  if (m_state == Paused) {
-    paintDC.DrawBitmap(m_bitmap, 0, 0, false);
-  }
+       wxPaintDC paintDC (this);\r
+       if (m_state == Paused) {
+               paintDC.DrawBitmap(m_bitmap, 0, 0, false);
+       }
 }
 
 
 }
 
 
@@ -290,11 +285,11 @@ ProjectionsDialog::OnPaint (wxPaintEvent& event)
 
 ProjectionsDialog::~ProjectionsDialog()
 {
 
 ProjectionsDialog::~ProjectionsDialog()
 {
-  if ( m_parentTop )
-    m_parentTop->Enable(TRUE);
-
-  delete m_pSGP;
-  delete m_pSGPDriver;
-  delete m_pDC;
+       if ( m_parentTop )
+               m_parentTop->Enable(TRUE);
+       
+       delete m_pSGP;
+       delete m_pSGPDriver;
+       delete m_pDC;
 }
 
 }
 
index 35184ebec216a56adbe3fb4e395f28ee6c81e20d..640337a707069f771cd560c774b7c9003533249b 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: dlgreconstruct.cpp,v 1.9 2000/12/18 02:23:43 kevin Exp $
+**  $Id: dlgreconstruct.cpp,v 1.10 2000/12/18 05:40:30 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
 **
 **  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
 ******************************************************************************/
 
 #ifdef __GNUG__
 ******************************************************************************/
 
 #ifdef __GNUG__
-  #pragma implementation "dlgreconstruct.h"
+#pragma implementation "dlgreconstruct.h"
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
 #endif
 
 // For compilers that support precompilation, includes "wx.h".
 #include "wx/wxprec.h"
 
 #ifdef __BORLANDC__
-    #pragma hdrstop
+#pragma hdrstop
 #endif
 
 #endif
 
-    #include "wx/utils.h"
-    #include "wx/frame.h"
-    #include "wx/button.h"
-    #include "wx/stattext.h"
-    #include "wx/layout.h"
-    #include "wx/event.h"
-    #include "wx/intl.h"
-    #include "wx/settings.h"
-    #include "wx/dcclient.h"
-    #include "wx/timer.h"
-    #include "wx/image.h"
+#include "wx/utils.h"
+#include "wx/frame.h"
+#include "wx/button.h"
+#include "wx/stattext.h"
+#include "wx/layout.h"
+#include "wx/event.h"
+#include "wx/intl.h"
+#include "wx/settings.h"
+#include "wx/dcclient.h"
+#include "wx/timer.h"
+#include "wx/image.h"
 
 #include "dlgreconstruct.h"
 #include <algorithm>
 
 #include "dlgreconstruct.h"
 #include <algorithm>
@@ -64,18 +64,18 @@ const int ReconstructDialog::MAX_IMAGE_Y = 400;
 \r
 
 BEGIN_EVENT_TABLE(ReconstructDialog, wxDialog)
 \r
 
 BEGIN_EVENT_TABLE(ReconstructDialog, wxDialog)
-   EVT_BUTTON(wxID_CANCEL, ReconstructDialog::OnCancel)
-   EVT_BUTTON(ID_BTN_PAUSE, ReconstructDialog::OnPause)
-   EVT_BUTTON(ID_BTN_STEP, ReconstructDialog::OnStep)
-   EVT_CLOSE(ReconstructDialog::OnClose)
-   EVT_PAINT(ReconstructDialog::OnPaint)
+EVT_BUTTON(wxID_CANCEL, ReconstructDialog::OnCancel)
+EVT_BUTTON(ID_BTN_PAUSE, ReconstructDialog::OnPause)
+EVT_BUTTON(ID_BTN_STEP, ReconstructDialog::OnStep)
+EVT_CLOSE(ReconstructDialog::OnClose)
+EVT_PAINT(ReconstructDialog::OnPaint)
 END_EVENT_TABLE()
 
 IMPLEMENT_CLASS(ReconstructDialog, wxDialog)
 
 
 ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Projections& rProj, ImageFile& rIF, const int iTrace, wxWindow *parent)
 END_EVENT_TABLE()
 
 IMPLEMENT_CLASS(ReconstructDialog, wxDialog)
 
 
 ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Projections& rProj, ImageFile& rIF, const int iTrace, wxWindow *parent)
-    : wxDialog(parent, -1, "Reconstruction", wxDefaultPosition), m_rReconstructor(rReconstruct), m_rProjections(rProj), m_rImageFile(rIF), m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
+: wxDialog(parent, -1, "Reconstruction", wxDefaultPosition), m_rReconstructor(rReconstruct), m_rProjections(rProj), m_rImageFile(rIF), m_pSGPDriver(NULL), m_pSGP(NULL), m_iTrace(iTrace), m_pDC(NULL), m_btnAbort(0), m_btnPause(0), m_btnStep(0)
 {
     m_state = Continue;
     m_iLastView = -1;
 {
     m_state = Continue;
     m_iLastView = -1;
@@ -87,13 +87,13 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project
     wxLayoutConstraints* c = new wxLayoutConstraints;
     c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
     c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
     wxLayoutConstraints* c = new wxLayoutConstraints;
     c->right.SameAs(this, wxRight, 2*LAYOUT_X_MARGIN);
     c->bottom.SameAs(this, wxBottom, 2*LAYOUT_Y_MARGIN);
-
+       
     wxSize sizeBtn = wxButton::GetDefaultSize();
     c->width.Absolute(sizeBtn.x);
     c->height.Absolute(sizeBtn.y);
     wxSize sizeBtn = wxButton::GetDefaultSize();
     c->width.Absolute(sizeBtn.x);
     c->height.Absolute(sizeBtn.y);
-
+       
     m_btnAbort->SetConstraints(c);
     m_btnAbort->SetConstraints(c);
-
+       
     m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
     wxLayoutConstraints* cPause = new wxLayoutConstraints;
     cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
     m_btnPause = new wxButton (this, ID_BTN_PAUSE, wxString("Pause"));
     wxLayoutConstraints* cPause = new wxLayoutConstraints;
     cPause->right.SameAs(this, wxRight, 3*LAYOUT_X_MARGIN + sizeBtn.x);
@@ -101,7 +101,7 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project
     cPause->width.Absolute(sizeBtn.x);
     cPause->height.Absolute(sizeBtn.y);
     m_btnPause->SetConstraints(cPause);
     cPause->width.Absolute(sizeBtn.x);
     cPause->height.Absolute(sizeBtn.y);
     m_btnPause->SetConstraints(cPause);
-
+       
     m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
     wxLayoutConstraints* cStep = new wxLayoutConstraints;
     cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
     m_btnStep = new wxButton (this, ID_BTN_STEP, wxString("Step"));
     wxLayoutConstraints* cStep = new wxLayoutConstraints;
     cStep->right.SameAs(this, wxRight, 5*LAYOUT_X_MARGIN + sizeBtn.x * 2);
@@ -109,50 +109,45 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project
     cStep->width.Absolute(sizeBtn.x);
     cStep->height.Absolute(sizeBtn.y);
     m_btnStep->SetConstraints(cStep);
     cStep->width.Absolute(sizeBtn.x);
     cStep->height.Absolute(sizeBtn.y);
     m_btnStep->SetConstraints(cStep);
-
+       
     SetAutoLayout(TRUE);
     Layout();
     SetAutoLayout(TRUE);
     Layout();
-
+       
     m_nxGraph = 500;
     m_nyGraph = 500;
     wxSize sizeDlg (m_nxGraph, m_nyGraph);
     m_nxImage = m_rImageFile.nx();
     if (m_nxImage > MAX_IMAGE_X)
     m_nxGraph = 500;
     m_nyGraph = 500;
     wxSize sizeDlg (m_nxGraph, m_nyGraph);
     m_nxImage = m_rImageFile.nx();
     if (m_nxImage > MAX_IMAGE_X)
-      m_nxImage = MAX_IMAGE_X;
+               m_nxImage = MAX_IMAGE_X;
     m_nyImage = m_rImageFile.ny();
     if (m_nyImage > MAX_IMAGE_Y)
     m_nyImage = m_rImageFile.ny();
     if (m_nyImage > MAX_IMAGE_Y)
-      m_nyImage = MAX_IMAGE_Y;
-
+               m_nyImage = MAX_IMAGE_Y;
+       
     sizeDlg.x += m_nxImage;
     sizeDlg.y = max (sizeDlg.y, m_nyImage);
     sizeDlg.x += m_nxImage;
     sizeDlg.y = max (sizeDlg.y, m_nyImage);
-
+       
     m_iClientX = sizeDlg.x;
     m_iClientY = sizeDlg.y;
     SetClientSize (sizeDlg);
     m_iClientX = sizeDlg.x;
     m_iClientY = sizeDlg.y;
     SetClientSize (sizeDlg);
-
+       
     Centre(wxCENTER_FRAME | wxBOTH);\r
     Centre(wxCENTER_FRAME | wxBOTH);\r
-\r
+       \r
     if ( m_parentTop )\r
     if ( m_parentTop )\r
-      m_parentTop->Enable(FALSE);\r
-\r
+               m_parentTop->Enable(FALSE);\r
+       \r
     Show(TRUE);\r
     Enable(TRUE); // enable this window\r
     Show(TRUE);\r
     Enable(TRUE); // enable this window\r
-\r
+       \r
     m_bitmap.Create (m_iClientX, m_iClientY); // save a copy of screen
     m_bitmap.Create (m_iClientX, m_iClientY); // save a copy of screen
+    m_pDC = dynamic_cast<wxDC*> (new wxClientDC (this));\r
     int x, y;\r
     this->GetClientSize(&x, &y);\r
     int x, y;\r
     this->GetClientSize(&x, &y);\r
-#if OLD\r
-    m_pDC = new wxMemoryDC;
-    m_pDC->SelectObject (m_bitmap);       // in memoryDC
-    m_pSGPDriver = new SGPDriver (dynamic_cast<wxDC*>(m_pDC), x, y);\r
-#else\r
-    m_pDC = dynamic_cast<wxDC*> (new wxClientDC (this));\r
     m_pSGPDriver = new SGPDriver (m_pDC, x, y);\r
     m_pSGPDriver = new SGPDriver (m_pDC, x, y);\r
-#endif\r
     m_pSGP = new SGP (*m_pSGPDriver);
     m_pSGP = new SGP (*m_pSGPDriver);
-
+       m_pSGP->getDriver().idWX()->setDC (&m_pDC);\r
+       
     wxYield();     // Update the display
     wxYield();     // Update the display
-
+       
     m_pSGPDriver->idWX()->SetFont(*wxSWISS_FONT);
 #ifdef __WXMAC__
     MacUpdateImmediately();
     m_pSGPDriver->idWX()->SetFont(*wxSWISS_FONT);
 #ifdef __WXMAC__
     MacUpdateImmediately();
@@ -161,85 +156,86 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project
 
 void
 ReconstructDialog::showView (int iViewNumber, bool bBackprojectView)
 
 void
 ReconstructDialog::showView (int iViewNumber, bool bBackprojectView)
-{
-  if ( iViewNumber < m_rProjections.nView() ) {
-    m_iLastView = iViewNumber;
-    m_pSGP->eraseWindow();
-
-    char szProgress [256];
-    snprintf (szProgress, sizeof(szProgress), "Reconstructing View %d (%.1f%%)", iViewNumber, 100 * iViewNumber / static_cast<double>(m_rProjections.nView()));
-    m_pSGP->setViewport (0, 0, 1, 1);
-    m_pSGP->setWindow (0, 0, 1, 1);
-    m_pSGP->setTextColor (C_LTRED, -1);
-    double dCharHeight = m_pSGP->getCharHeight();
-    m_pSGP->setTextSize (dCharHeight * 2);
-    m_pSGP->moveAbs(0., m_pSGP->getCharHeight());
-    m_pSGP->drawText (szProgress);
-    m_pSGP->setTextSize (dCharHeight);
-
-    m_pSGP->setViewport (0.0, 0.1, 0.66, 1.);
-    m_rReconstructor.reconstructView (iViewNumber, 1, m_pSGP, bBackprojectView);
-
-    ImageFileArrayConst v = m_rImageFile.getArray();
-    int xBase = m_nxGraph;
-    int yBase = 0;
-    if (m_nyGraph > m_nyImage)
-       yBase = (m_nyGraph - m_nyImage) / 2;
-    double minValue = v[0][0];
-    double maxValue = v[0][0];
-    for (int ix = 0; ix < m_nxImage; ix++) {
-       for (int iy = 0; iy < m_nyImage; iy++) {
-           double dPixel = v[ix][iy];
-           if (dPixel < minValue)
-               minValue = dPixel;
-           else if (dPixel > maxValue)
-               maxValue = dPixel;
-       }
-    }
-    unsigned char* imageData = new unsigned char [m_nxImage * m_nyImage * 3];
-    double dScale = 255 / (maxValue - minValue);
-    for (int ix2 = 0; ix2 < m_nxImage; ix2++) {
-       for (int iy = 0; iy < m_nyImage; iy++) {
-           double dPixel = v[ix2][iy];
-           dPixel = (dPixel - minValue) * dScale;
-           int intensity = nearest<int>(dPixel);
-           intensity = clamp (intensity, 0, 255);
-           int baseAddr = ((m_nyImage - 1 - iy) * m_nxImage + ix2) * 3;
-           imageData[baseAddr] = imageData[baseAddr+1] = imageData[baseAddr+2] = intensity;
+{\r
+       // m_pSGP->setTextSize(0.01);
+       if ( iViewNumber < m_rProjections.nView() ) {
+               m_iLastView = iViewNumber;
+               ::wxYield();        // update the display\r
+               m_pSGP->eraseWindow();\r
+               Refresh();\r
+               
+               char szProgress [256];
+               snprintf (szProgress, sizeof(szProgress), "Reconstructing View %d (%.1f%%)", iViewNumber, 100 * iViewNumber / static_cast<double>(m_rProjections.nView()));
+               m_pSGP->setViewport (0, 0, 1, 1);
+               m_pSGP->setWindow (0, 0, 1, 1);
+               m_pSGP->setTextColor (C_LTRED, -1);
+               double dCharHeight = m_pSGP->getCharHeight();
+               m_pSGP->setTextSize (dCharHeight * 2);
+               m_pSGP->moveAbs(0., m_pSGP->getCharHeight());
+               m_pSGP->drawText (szProgress);
+               m_pSGP->setTextSize (dCharHeight);
+               
+               m_pSGP->setViewport (0.0, 0.1, 0.66, 1.);
+               m_rReconstructor.reconstructView (iViewNumber, 1, m_pSGP, bBackprojectView);
+               
+               ImageFileArrayConst v = m_rImageFile.getArray();
+               int xBase = m_nxGraph;
+               int yBase = 0;
+               if (m_nyGraph > m_nyImage)
+                       yBase = (m_nyGraph - m_nyImage) / 2;
+               double minValue = v[0][0];
+               double maxValue = v[0][0];
+               for (int ix = 0; ix < m_nxImage; ix++) {
+                       for (int iy = 0; iy < m_nyImage; iy++) {
+                               double dPixel = v[ix][iy];
+                               if (dPixel < minValue)
+                                       minValue = dPixel;
+                               else if (dPixel > maxValue)
+                                       maxValue = dPixel;
+                       }
+               }
+               unsigned char* imageData = new unsigned char [m_nxImage * m_nyImage * 3];
+               double dScale = 255 / (maxValue - minValue);
+               for (int ix2 = 0; ix2 < m_nxImage; ix2++) {
+                       for (int iy = 0; iy < m_nyImage; iy++) {
+                               double dPixel = v[ix2][iy];
+                               dPixel = (dPixel - minValue) * dScale;
+                               int intensity = nearest<int>(dPixel);
+                               intensity = clamp (intensity, 0, 255);
+                               int baseAddr = ((m_nyImage - 1 - iy) * m_nxImage + ix2) * 3;
+                               imageData[baseAddr] = imageData[baseAddr+1] = imageData[baseAddr+2] = intensity;
+                       }
+               }\r
+               wxImage image (m_nxImage, m_nyImage, imageData, true);
+               wxBitmap bitmap = image.ConvertToBitmap();
+               m_pSGP->getDriver().idWX()->DrawBitmap(bitmap, xBase, yBase, false);
+               delete imageData;
        }
        }
-    }
-    wxImage image (m_nxImage, m_nyImage, imageData, true);
-    wxBitmap bitmap = image.ConvertToBitmap();
-    m_pSGP->getDriver().idWX()->DrawBitmap(bitmap, xBase, yBase, false);
-    delete imageData;
-
-    Refresh();
-  }
 }
 
 bool
 ReconstructDialog::reconstructView (int iViewNumber)
 {
 }
 
 bool
 ReconstructDialog::reconstructView (int iViewNumber)
 {
-  if (iViewNumber <= m_iLastView)  // have already done this view
-    return true;
-
-  if (iViewNumber < m_rProjections.nView()) {
-    ::wxYield();        // update the display
-    showView (iViewNumber, true);
-    ::wxYield();        // update the display
-    if (m_iTrace >= Trace::TRACE_PLOT) {
-      ::wxUsleep(250);
-    }
-  } else {
-    m_state = Finished;    // so that we return TRUE below and 
-  }                        // that [Cancel] handler knew what to do
-  
+       if (iViewNumber <= m_iLastView)  // have already done this view
+               return true;
+       
+       if (iViewNumber < m_rProjections.nView()) {
+               ::wxYield();        // update the display
+               showView (iViewNumber, true);
+               ::wxYield();        // update the display
+               if (m_iTrace >= Trace::TRACE_PLOT) {
+                       ::wxUsleep(250);
+               }
+       } else {
+               m_state = Finished;    // so that we return TRUE below and 
+       }                        // that [Cancel] handler knew what to do
+       
 #ifdef __WXMAC__
 #ifdef __WXMAC__
-  MacUpdateImmediately();
+       MacUpdateImmediately();
 #endif
 #endif
-
-  ::wxYield();        // update the display
-  return m_state != Cancelled;
+       
+       ::wxYield();        // update the display
+       return m_state != Cancelled;
 }
 
 
 }
 
 
@@ -247,88 +243,81 @@ ReconstructDialog::reconstructView (int iViewNumber)
 
 void ReconstructDialog::OnCancel (wxCommandEvent& event)
 {
 
 void ReconstructDialog::OnCancel (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    // this means that the count down is already finished and we're being
-    // shown as a modal dialog - so just let the default handler do the job
-    event.Skip();
-  } else {
-    // request to cancel was received, the next time Update() is called we
-    // will handle it
-    m_state = Cancelled;
-
-    // update the button state immediately so that the user knows that the
-    // request has been noticed
-    m_btnAbort->Disable();
-  }
+       if ( m_state == Finished ) {
+               // this means that the count down is already finished and we're being
+               // shown as a modal dialog - so just let the default handler do the job
+               event.Skip();
+       } else {
+               // request to cancel was received, the next time Update() is called we
+               // will handle it
+               m_state = Cancelled;
+               
+               // update the button state immediately so that the user knows that the
+               // request has been noticed
+               m_btnAbort->Disable();
+       }
 }
 
 
 void 
 ReconstructDialog::OnPause (wxCommandEvent& event)
 {
 }
 
 
 void 
 ReconstructDialog::OnPause (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    // this means that the count down is already finished and we're being
-    // shown as a modal dialog - so just let the default handler do the job
-    event.Skip();
-  } else {
-      if (m_state == Continue) {\r
-#ifndef OLD\r
-         m_memoryDC.SelectObject (m_bitmap);       // in memoryDC\r
-         m_pSGP->setDC (&m_memoryDC);\r
-         m_memoryDC.SetFont (*wxSWISS_FONT);\r
-         showView (m_iLastView, false);\r
-         m_pSGP->setDC (m_pDC);\r
-         m_memoryDC.SelectObject(wxNullBitmap);\r
-#endif
-       m_state = Paused;
-       m_btnPause->SetLabel (wxString("Resume"));
-      } else if (m_state == Paused) {
-       m_state = Continue;
-       m_btnPause->SetLabel (wxString("Pause"));
-      }
-  }
+       if ( m_state == Finished ) {
+               // this means that the count down is already finished and we're being
+               // shown as a modal dialog - so just let the default handler do the job
+               event.Skip();
+       } else if (m_state == Continue) {\r
+//             m_memoryDC.SelectObject (m_bitmap);       // in memoryDC\r
+//             m_pSGP->setDC (&m_memoryDC);\r
+//             m_memoryDC.SetFont (*wxSWISS_FONT);\r
+               showView (m_iLastView, false);\r
+               m_state = Paused;
+               m_btnPause->SetLabel (wxString("Resume"));
+       } else if (m_state == Paused) {
+//             m_pSGP->setDC (m_pDC);\r
+//             m_memoryDC.SelectObject(wxNullBitmap);\r
+               m_state = Continue;
+               m_btnPause->SetLabel (wxString("Pause"));
+       }
 }
 
 }
 
+
 void 
 ReconstructDialog::OnStep (wxCommandEvent& event)
 {
 void 
 ReconstructDialog::OnStep (wxCommandEvent& event)
 {
-  if ( m_state == Finished ) {
-    event.Skip();
-  } else {
-    if (m_state == Continue) {\r
-#ifndef OLD\r
-         m_memoryDC.SelectObject (m_bitmap);       // in memoryDC\r
-         m_pSGP->setDC (&m_memoryDC);\r
-         m_memoryDC.SetFont (*wxSWISS_FONT);\r
-      m_rReconstructor.reconstructView (m_iLastView, 1, m_pSGP, false);\r
-         m_pSGP->setDC (m_pDC);\r
-         m_memoryDC.SelectObject(wxNullBitmap);\r
-#endif
-      m_state = Paused;
-      m_btnPause->SetLabel (wxString("Resume"));
-    } else if (m_state == Paused) {
-      reconstructView (m_iLastView + 1);
-    }
-  }
+       if ( m_state == Finished ) {
+               event.Skip();
+       } else if (m_state == Continue) {\r
+//             m_memoryDC.SelectObject (m_bitmap);       // in memoryDC\r
+//             m_pSGP->setDC (&m_memoryDC);\r
+//             m_memoryDC.SetFont (*wxSWISS_FONT);\r
+               showView (m_iLastView, false);\r
+               m_state = Paused;
+               m_btnPause->SetLabel (wxString("Resume"));
+       } else if (m_state == Paused) {
+//             m_pSGP->setDC (m_pDC);\r
+//             m_memoryDC.SelectObject(wxNullBitmap);\r
+               reconstructView (m_iLastView + 1);
+       }
 }
 
 void ReconstructDialog::OnClose(wxCloseEvent& event)
 {
     if ( m_state == Uncancellable )
 }
 
 void ReconstructDialog::OnClose(wxCloseEvent& event)
 {
     if ( m_state == Uncancellable )
-      event.Veto(TRUE);    // can't close this dialog
+               event.Veto(TRUE);    // can't close this dialog
     else if ( m_state == Finished )
     else if ( m_state == Finished )
-      event.Skip(); // let the default handler close the window as we already terminated
+               event.Skip(); // let the default handler close the window as we already terminated
     else
     else
-      m_state = Cancelled;          // next Update() will notice it
+               m_state = Cancelled;          // next Update() will notice it
 }
 
 void
 ReconstructDialog::OnPaint (wxPaintEvent& event)
 {\r
 }
 
 void
 ReconstructDialog::OnPaint (wxPaintEvent& event)
 {\r
-  wxPaintDC paintDC (this);\r
-  if (m_state == Paused) {
-    paintDC.DrawBitmap(m_bitmap, 0, 0, false);\r
-  }\r
+       wxPaintDC paintDC (this);\r
+       if (m_state == Paused) {
+               paintDC.DrawBitmap(m_bitmap, 0, 0, false);\r
+       }\r
 }
 
 
 }
 
 
@@ -337,11 +326,11 @@ ReconstructDialog::OnPaint (wxPaintEvent& event)
 
 ReconstructDialog::~ReconstructDialog()
 {
 
 ReconstructDialog::~ReconstructDialog()
 {
-  if ( m_parentTop )
-    m_parentTop->Enable(TRUE);
-
-  delete m_pSGP;
-  delete m_pSGPDriver;
-  delete m_pDC;
+       if ( m_parentTop )
+               m_parentTop->Enable(TRUE);
+       
+       delete m_pSGP;
+       delete m_pSGPDriver;
+       delete m_pDC;
 }
 
 }
 
index 9e08e4a87b42c859a8dd450e2540af0ceb7fd437..a7abe8c29fbb102655235008134ac6cb70ac9422 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: dlgreconstruct.h,v 1.4 2000/12/17 22:30:34 kevin Exp $
+**  $Id: dlgreconstruct.h,v 1.5 2000/12/18 05:40:30 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
 **
 **  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
@@ -91,11 +91,7 @@ private:
    SGPDriver* m_pSGPDriver;
    SGP* m_pSGP;
    const int m_iTrace;
    SGPDriver* m_pSGPDriver;
    SGP* m_pSGP;
    const int m_iTrace;
-#if OLD\r
-   wxMemoryDC* m_pDC;
-#else\r
    wxDC* m_pDC;\r
    wxDC* m_pDC;\r
-#endif\r
 
    wxButton *m_btnAbort;    // the abort button (or NULL if none)
    wxButton *m_btnPause; 
 
    wxButton *m_btnAbort;    // the abort button (or NULL if none)
    wxButton *m_btnPause;