** Date Started: August 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: dlgreconstruct.cpp,v 1.11 2000/12/18 06:32:13 kevin Exp $
+** $Id: dlgreconstruct.cpp,v 1.19 2002/05/30 06:27:46 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
#pragma implementation "dlgreconstruct.h"
#endif
-// For compilers that support precompilation, includes "wx.h".
#include "wx/wxprec.h"
-#ifdef __BORLANDC__
-#pragma hdrstop
-#endif
-
#include "wx/utils.h"
#include "wx/frame.h"
#include "wx/button.h"
static const int LAYOUT_X_MARGIN = 4;
static const int LAYOUT_Y_MARGIN = 4;
-\r
-\r
-const int ReconstructDialog::ID_BTN_PAUSE = 19998;\r
-const int ReconstructDialog::ID_BTN_STEP = 19999;\r
-const int ReconstructDialog::MAX_IMAGE_X = 400;\r
-const int ReconstructDialog::MAX_IMAGE_Y = 400;\r
-\r
+
+
+const int ReconstructDialog::ID_BTN_PAUSE = 19998;
+const int ReconstructDialog::ID_BTN_STEP = 19999;
+const int ReconstructDialog::MAX_IMAGE_X = 400;
+const int ReconstructDialog::MAX_IMAGE_Y = 400;
+
BEGIN_EVENT_TABLE(ReconstructDialog, wxDialog)
EVT_BUTTON(wxID_CANCEL, ReconstructDialog::OnCancel)
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)
+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)
{
m_state = Continue;
m_iLastView = -1;
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 = MAX_IMAGE_Y;
+ m_nyImage = MAX_IMAGE_Y;
sizeDlg.x += m_nxImage;
- sizeDlg.y = max (sizeDlg.y, m_nyImage);
+ sizeDlg.y = imax (sizeDlg.y, m_nyImage);
m_iClientX = sizeDlg.x;
m_iClientY = sizeDlg.y;
SetClientSize (sizeDlg);
- Centre(wxCENTER_FRAME | wxBOTH);\r
- \r
- if ( m_parentTop )\r
- m_parentTop->Enable(FALSE);\r
- \r
- Show(TRUE);\r
- Enable(TRUE); // enable this window\r
- \r
+ Centre(wxCENTER_FRAME | wxBOTH);
+
+ if ( m_parentTop )
+ m_parentTop->Enable(FALSE);
+
+ Show(TRUE);
+ Enable(TRUE); // enable this window
+
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
- m_pSGPDriver = new SGPDriver (m_pDC, x, y);\r
- m_pSGP = new SGP (*m_pSGPDriver);\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
void
ReconstructDialog::showView (int iViewNumber, bool bBackprojectView)
-{\r
+{
if ( iViewNumber < m_rProjections.nView() ) {
m_iLastView = iViewNumber;
- ::wxYield(); // update the display\r
- m_pSGP->eraseWindow();\r
- Refresh();\r
-
+ ::wxYield(); // update the display
+ m_pSGP->eraseWindow();
+ m_btnPause->Refresh();
+ m_btnStep->Refresh();
+ m_btnAbort->Refresh();
+
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->setTextPointSize (20.);
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);
+ m_pSGP->setTextPointSize (10.);
+ int iXDialog, iYDialog;
+ GetClientSize (&iXDialog, &iYDialog);
+ double dGraphWidth = (iXDialog - m_nxImage) / static_cast<double>(iXDialog);
+
+ m_rReconstructor.reconstructView (iViewNumber, 1, m_pSGP, bBackprojectView, dGraphWidth);
+ ::wxYield();
+::wxYield();
+::wxYield();
+::wxYield();
+
ImageFileArrayConst v = m_rImageFile.getArray();
int xBase = m_nxGraph;
int yBase = 0;
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;
}
+
+ ::wxYield();
}
bool
// 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
+ } 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, false);
m_state = Paused;
m_btnPause->SetLabel (wxString("Resume"));
- m_pSGP->setDC (m_pDC);\r
- m_memoryDC.SelectObject(wxNullBitmap);\r
+ m_pSGP->setDC (m_pDC);
+ m_memoryDC.SelectObject(wxNullBitmap);
} else if (m_state == Paused) {
m_state = Continue;
m_btnPause->SetLabel (wxString("Pause"));
{
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
+ } 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, false);
m_state = Paused;
m_btnPause->SetLabel (wxString("Resume"));
- m_pSGP->setDC (m_pDC);\r
- m_memoryDC.SelectObject(wxNullBitmap);\r
- Refresh();\r
+ m_pSGP->setDC (m_pDC);
+ m_memoryDC.SelectObject(wxNullBitmap);
+ Refresh();
} else if (m_state == Paused) {
- m_memoryDC.SelectObject (m_bitmap); // in memoryDC\r
- m_pSGP->setDC (&m_memoryDC);\r
- m_memoryDC.SetFont (*wxSWISS_FONT);\r
+ m_memoryDC.SelectObject (m_bitmap); // in memoryDC
+ m_pSGP->setDC (&m_memoryDC);
+ m_memoryDC.SetFont (*wxSWISS_FONT);
reconstructView (m_iLastView + 1);
- m_pSGP->setDC (m_pDC);\r
- m_memoryDC.SelectObject(wxNullBitmap);\r
- Refresh();\r
+ m_pSGP->setDC (m_pDC);
+ m_memoryDC.SelectObject(wxNullBitmap);
+ Refresh();
}
}
void
ReconstructDialog::OnPaint (wxPaintEvent& event)
-{\r
- wxPaintDC paintDC (this);\r
+{
+ wxPaintDC paintDC (this);
if (m_state == Paused) {
- paintDC.DrawBitmap (m_bitmap, 0, 0, false);\r
- }\r
+ paintDC.DrawBitmap (m_bitmap, 0, 0, false);
+ }
}