X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fviews.cpp;h=4cb6f694fe54de5e67e97cbe5d85573c49d57396;hp=87e9e932135af1083e1f0cd4792ea9d63caf1011;hb=a5139613f6b92aeb8db9daa87f021c78d17d82a5;hpb=08a5cd04c3994d5ea24713b9b000791bd2e406fe diff --git a/src/views.cpp b/src/views.cpp index 87e9e93..4cb6f69 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: views.cpp,v 1.10 2000/07/29 19:50:08 kevin Exp $ +** $Id: views.cpp,v 1.15 2000/08/22 16:49:56 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 @@ -405,7 +405,20 @@ PhantomView::OnProjections (wxCommandEvent& event) Projections& rProj = pProjectionDoc->getProjections(); Scanner theScanner (rPhantom, sGeometry.c_str(), nDet, nView, nSamples, dRotAngle); rProj.initFromScanner (theScanner); - theScanner.collectProjections (rProj, rPhantom, 0, TRACE_NONE); + +#if 1 + wxFrame frame (m_frame, -1, "", wxDefaultPosition, wxSize(500,500)); + frame.Show(); + wxClientDC dc (&frame); + int x, y; + frame.GetClientSize(&x, &y); + SGPDriver driver (dynamic_cast(&dc), x, y); + SGP sgp (driver); + theScanner.collectProjections (rProj, rPhantom, 0, TRACE_PHM, &sgp); +#else + theScanner.collectProjections (rProj, rPhantom); +#endif + pProjectionDoc->Modify(true); pProjectionDoc->UpdateAllViews(this); ostringstream os; @@ -559,11 +572,11 @@ PhantomView::OnDraw (wxDC* dc) { int xsize, ysize; m_canvas->GetClientSize (&xsize, &ysize); - SGPDriver driver (dc, "", xsize, ysize); + SGPDriver driver (dc, xsize, ysize); SGP sgp (driver); const Phantom& rPhantom = GetDocument()->getPhantom(); sgp.setColor (C_RED); - rPhantom.draw (sgp); + rPhantom.show (sgp); } // ProjectionCanvas @@ -612,7 +625,11 @@ ProjectionFileView::OnProperties (wxCommandEvent& event) void ProjectionFileView::OnReconstruct (wxCommandEvent& event) { - DialogGetReconstructionParameters dialogReconstruction (m_frame, 256, 256, SignalFilter::FILTER_ABS_BANDLIMIT, 1., SignalFilter::FILTER_METHOD_CONVOLUTION, 3, Backprojector::INTERP_LINEAR, 1, Backprojector::BPROJ_IDIFF3); +#if HAVE_FFTW + DialogGetReconstructionParameters dialogReconstruction (m_frame, 256, 256, SignalFilter::FILTER_ABS_BANDLIMIT, 1., ProcessSignal::FILTER_METHOD_RFFTW, ProcessSignal::FILTER_GENERATION_INVERSE_FOURIER, 1, Backprojector::INTERP_LINEAR, 1, Backprojector::BPROJ_IDIFF3); +#else + DialogGetReconstructionParameters dialogReconstruction (m_frame, 256, 256, SignalFilter::FILTER_ABS_BANDLIMIT, 1., ProcessSignal::FILTER_METHOD_CONVOLUTION, ProcessSignal::FILTER_GENERATION_DIRECT, 1, Backprojector::INTERP_LINEAR, 1, Backprojector::BPROJ_IDIFF3); +#endif int retVal = dialogReconstruction.ShowModal(); if (retVal == wxID_OK) { int xSize = dialogReconstruction.getXSize(); @@ -621,6 +638,7 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event) double optFilterParam = dialogReconstruction.getFilterParam(); wxString optFilterMethodName = dialogReconstruction.getFilterMethodName(); int optZeropad = dialogReconstruction.getZeropad(); + wxString optFilterGenerationName = dialogReconstruction.getFilterGenerationName(); wxString optInterpName = dialogReconstruction.getInterpName(); int optInterpParam = dialogReconstruction.getInterpParam(); wxString optBackprojectName = dialogReconstruction.getBackprojectName(); @@ -629,11 +647,11 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event) ImageFile& imageFile = pReconDoc->getImageFile(); const Projections& rProj = GetDocument()->getProjections(); imageFile.setArraySize (xSize, ySize); - rProj.reconstruct (imageFile, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeropad, optInterpName.c_str(), optInterpParam, optBackprojectName.c_str(), TRACE_NONE); + rProj.reconstruct (imageFile, optFilterName.c_str(), optFilterParam, optFilterMethodName.c_str(), optZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), optInterpParam, optBackprojectName.c_str(), TRACE_NONE); pReconDoc->Modify(true); pReconDoc->UpdateAllViews(this); ostringstream os; - os << "Reconstruct " << rProj.getFilename() << ": xSize=" << xSize << ", ySize=" << ySize << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << optFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", Zeropad=" << optZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << optInterpParam << ", Backprojection=" << optBackprojectName.c_str() << "\n"; + os << "Reconstruct " << rProj.getFilename() << ": xSize=" << xSize << ", ySize=" << ySize << ", Filter=" << optFilterName.c_str() << ", FilterParam=" << optFilterParam << ", FilterMethod=" << optFilterMethodName.c_str() << ", FilterGeneration=" << optFilterGenerationName.c_str() << ", Zeropad=" << optZeropad << ", Interpolation=" << optInterpName.c_str() << ", InterpolationParam=" << optInterpParam << ", Backprojection=" << optBackprojectName.c_str() << "\n"; *theApp->getLog() << os.str().c_str(); } }