X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fdlgreconstruct.cpp;h=9dc63929363d804bf1ea90b2e4c6f2d566c80814;hp=3dcd74a11065501eb2ee59716bb9e6daab837b4e;hb=8a7697ce57b56cdc43698cd1241ad98d49f9b5ac;hpb=97806f8d59c470140da6ce75359d3219c05d9fd4 diff --git a/src/dlgreconstruct.cpp b/src/dlgreconstruct.cpp index 3dcd74a..9dc6392 100644 --- a/src/dlgreconstruct.cpp +++ b/src/dlgreconstruct.cpp @@ -7,9 +7,9 @@ ** 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.12 2000/12/18 12:29:41 kevin Exp $ +** $Id$ ** ** 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 @@ -25,17 +25,8 @@ ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ -#ifdef __GNUG__ -#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" @@ -55,13 +46,13 @@ static const int LAYOUT_X_MARGIN = 4; static const int LAYOUT_Y_MARGIN = 4; - - -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; - + + +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) @@ -74,8 +65,11 @@ 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) +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; @@ -118,32 +112,32 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project 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); - - if ( m_parentTop ) - m_parentTop->Enable(FALSE); - - Show(TRUE); - Enable(TRUE); // enable this window - + 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 (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_pDC = dynamic_cast (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 @@ -152,11 +146,11 @@ ReconstructDialog::ReconstructDialog (Reconstructor& rReconstruct, const Project void ReconstructDialog::showView (int iViewNumber, bool bBackprojectView) -{ +{ if ( iViewNumber < m_rProjections.nView() ) { m_iLastView = iViewNumber; - ::wxYield(); // update the display - m_pSGP->eraseWindow(); + ::wxYield(); // update the display + m_pSGP->eraseWindow(); m_btnPause->Refresh(); m_btnStep->Refresh(); m_btnAbort->Refresh(); @@ -166,15 +160,21 @@ ReconstructDialog::showView (int iViewNumber, bool bBackprojectView) 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(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; @@ -202,12 +202,14 @@ ReconstructDialog::showView (int iViewNumber, bool bBackprojectView) int baseAddr = ((m_nyImage - 1 - iy) * m_nxImage + ix2) * 3; imageData[baseAddr] = imageData[baseAddr+1] = imageData[baseAddr+2] = intensity; } - } + } wxImage image (m_nxImage, m_nyImage, imageData, true); - wxBitmap bitmap = image.ConvertToBitmap(); + wxBitmap bitmap (image); m_pSGP->getDriver().idWX()->DrawBitmap(bitmap, xBase, yBase, false); delete imageData; } + + ::wxYield(); } bool @@ -259,15 +261,15 @@ ReconstructDialog::OnPause (wxCommandEvent& event) // 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, false); + } 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); - m_memoryDC.SelectObject(wxNullBitmap); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); } else if (m_state == Paused) { m_state = Continue; m_btnPause->SetLabel (wxString("Pause")); @@ -280,24 +282,24 @@ ReconstructDialog::OnStep (wxCommandEvent& event) { if ( m_state == Finished ) { 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, false); + } 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); - m_memoryDC.SelectObject(wxNullBitmap); - Refresh(); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + Refresh(); } else if (m_state == Paused) { - m_memoryDC.SelectObject (m_bitmap); // in memoryDC - m_pSGP->setDC (&m_memoryDC); - m_memoryDC.SetFont (*wxSWISS_FONT); + 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); - m_memoryDC.SelectObject(wxNullBitmap); - Refresh(); + m_pSGP->setDC (m_pDC); + m_memoryDC.SelectObject(wxNullBitmap); + Refresh(); } } @@ -313,11 +315,11 @@ void ReconstructDialog::OnClose(wxCloseEvent& event) void ReconstructDialog::OnPaint (wxPaintEvent& event) -{ - wxPaintDC paintDC (this); +{ + wxPaintDC paintDC (this); if (m_state == Paused) { - paintDC.DrawBitmap (m_bitmap, 0, 0, false); - } + paintDC.DrawBitmap (m_bitmap, 0, 0, false); + } }