X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fthreadrecon.cpp;h=8c5cb0574bb95303874236030868877a639b0332;hp=2fde6279e7c0deca3f2b64856eea5b29e5841746;hb=f7ee98f7d964ed361068179f0e7ea4475ed1abdf;hpb=4433641931aa27fd6a2b5ecd0102e6c5bbbccc46 diff --git a/src/threadrecon.cpp b/src/threadrecon.cpp index 2fde627..8c5cb05 100644 --- a/src/threadrecon.cpp +++ b/src/threadrecon.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2001 Kevin Rosenberg ** -** $Id: threadrecon.cpp,v 1.25 2001/03/13 08:24: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 @@ -51,13 +51,13 @@ // ///////////////////////////////////////////////////////////////////// -ReconstructorSupervisorThread::ReconstructorSupervisorThread (ProjectionFileView* pProjView, int iNX, int iNY, - const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad, - const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, - const char* pszBackprojectName, const char* const pszLabel, ReconstructionROI* pROI, bool bRebinToParallel) -: SupervisorThread(), m_pProjView(pProjView), m_iNX(iNX), m_iNY(iNY), m_strFilterName(pszFilterName), m_dFilterParam(dFilterParam), - m_strFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_strFilterGenerationName(pszFilterGenerationName), - m_strInterpName(pszInterpName), m_iInterpParam(iInterpParam), m_strBackprojectName(pszBackprojectName), +ReconstructorSupervisorThread::ReconstructorSupervisorThread (ProjectionFileView* pProjView, int iNX, int iNY, + const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad, + const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, + const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pROI, bool bRebinToParallel) +: SupervisorThread(), m_pProjView(pProjView), m_iNX(iNX), m_iNY(iNY), m_strFilterName(pszFilterName), m_dFilterParam(dFilterParam), + m_strFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_strFilterGenerationName(pszFilterGenerationName), + m_strInterpName(pszInterpName), m_iInterpParam(iInterpParam), m_strBackprojectName(pszBackprojectName), m_strLabel(pszLabel), m_reconROI(*pROI), m_bRebinToParallel(bRebinToParallel) { } @@ -70,9 +70,9 @@ ReconstructorSupervisorThread::Entry() if (m_bRebinToParallel) pProj = pProj->interpolateToParallel(); - ReconstructorSupervisor reconSupervisor (this, pProj, m_pProjView, m_iNX, m_iNY, - m_strFilterName.c_str(), m_dFilterParam, m_strFilterMethod.c_str(), m_iZeropad, m_strFilterGenerationName.c_str(), - m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel.c_str(), &m_reconROI); + ReconstructorSupervisor reconSupervisor (this, pProj, m_pProjView, m_iNX, m_iNY, + m_strFilterName.c_str(), m_dFilterParam, m_strFilterMethod.c_str(), m_iZeropad, m_strFilterGenerationName.c_str(), + m_strInterpName.c_str(), m_iInterpParam, m_strBackprojectName.c_str(), m_strLabel, &m_reconROI); reconSupervisor.start(); while (! reconSupervisor.workersDone() && ! reconSupervisor.fail() && ! reconSupervisor.cancelled()) { @@ -80,15 +80,15 @@ ReconstructorSupervisorThread::Entry() } if (reconSupervisor.fail()) { - wxString msg ("Error starting reconstructor supervisor: "); - msg += reconSupervisor.getFailMessage().c_str(); - msg += "\n"; + wxString msg (_T("Error starting reconstructor supervisor: ")); + msg += reconSupervisor.getFailMessage(); + msg += _T("\n"); wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); eventLog.SetString( msg ); wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event } if (! reconSupervisor.cancelled()) - reconSupervisor.onDone(); + reconSupervisor.onDone(); reconSupervisor.deleteWorkers(); if (m_bRebinToParallel) @@ -110,21 +110,23 @@ ReconstructorSupervisorThread::OnExit() ///////////////////////////////////////////////////////////////////// ReconstructorSupervisor::ReconstructorSupervisor (SupervisorThread* pThread, Projections* pProj, - ProjectionFileView* pProjView, int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam, - const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName, - const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, const char* const pszLabel, + ProjectionFileView* pProjView, int iImageNX, int iImageNY, const char* pszFilterName, double dFilterParam, + const char* pszFilterMethod, int iZeropad, const char* pszFilterGenerationName, + const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, wxChar const* pszLabel, ReconstructionROI* pROI) - : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), "Reconstructing", pProjView->GetDocument()->getProjections().nView()), - m_pProj(pProj), m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()), - m_iImageNX(iImageNX), m_iImageNY(iImageNY), + : BackgroundSupervisor (pThread, pProjView->GetFrame(), pProjView->GetDocument(), + _T("Reconstructing"), + pProjView->GetDocument()->getProjections().nView()), + m_pProj(pProj), m_pProjView(pProjView), m_pProjDoc(pProjView->GetDocument()), + m_iImageNX(iImageNX), m_iImageNY(iImageNY), m_pszFilterName(pszFilterName), m_dFilterParam(dFilterParam), m_pszFilterMethod(pszFilterMethod), m_iZeropad(iZeropad), m_pszFilterGenerationName(pszFilterGenerationName), m_pszInterpName(pszInterpName), - m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_pszLabel(pszLabel), + m_iInterpParam(iInterpParam), m_pszBackprojectName(pszBackprojectName), m_strLabel(pszLabel), m_pReconROI(pROI) { m_vecpChildImageFile.reserve (getNumWorkers()); for (int iThread = 0; iThread < getNumWorkers(); iThread++) { - m_vecpChildImageFile[iThread] = new ImageFile (m_iImageNX, m_iImageNY); + m_vecpChildImageFile[iThread] = new ImageFile (m_iImageNX, m_iImageNY); } } @@ -141,7 +143,7 @@ BackgroundWorkerThread* ReconstructorSupervisor::createWorker (int iThread, int iStartUnit, int iNumUnits) { ReconstructorWorker* pThread = new ReconstructorWorker (this, iThread, iStartUnit, iNumUnits); - pThread->SetParameters (m_pProj, m_pProjView, m_vecpChildImageFile[iThread], m_pszFilterName, + pThread->SetParameters (m_pProj, m_pProjView, m_vecpChildImageFile[iThread], m_pszFilterName, m_dFilterParam, m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName, m_iInterpParam, m_pszBackprojectName, m_pReconROI); @@ -156,11 +158,11 @@ ReconstructorSupervisor::onDone() ImageFile* pImageFile = getImageFile(); pImageFile->labelAdd (m_pProj->getLabel()); - pImageFile->labelAdd (m_pszLabel, getTimerEnd()); + pImageFile->labelAdd (m_strLabel.mb_str(wxConvUTF8), getTimerEnd()); wxCommandEvent eventLog (wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); - wxString msg (m_pszLabel); - msg += "\n"; + wxString msg (m_strLabel); + msg += _T("\n"); eventLog.SetString( msg ); wxPostEvent( theApp->getMainFrame(), eventLog ); // send log event @@ -178,7 +180,7 @@ ReconstructorSupervisor::getImageFile() ImageFile* pImageFile = new ImageFile (m_iImageNX, m_iImageNY); pImageFile->arrayDataClear(); ImageFileArray pArray = pImageFile->getArray(); - + int i; for (i = 0; i < getNumWorkers(); i++) { ImageFileArrayConst pChildArray = m_vecpChildImageFile[i]->getArray(); @@ -186,7 +188,7 @@ ReconstructorSupervisor::getImageFile() for (int iy = 0; iy < m_iImageNY; iy++) pArray[ix][iy] += pChildArray[ix][iy]; } - + return (pImageFile); } @@ -198,16 +200,16 @@ ReconstructorSupervisor::getImageFile() ///////////////////////////////////////////////////////////////////// void -ReconstructorWorker::SetParameters (const Projections* pProj, ProjectionFileView* pProjView, ImageFile* pImageFile, +ReconstructorWorker::SetParameters (const Projections* pProj, ProjectionFileView* pProjView, ImageFile* pImageFile, const char* pszFilterName, double dFilterParam, const char* pszFilterMethod, int iZeropad, - const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, + const char* pszFilterGenerationName, const char* pszInterpName, int iInterpParam, const char* pszBackprojectName, ReconstructionROI* pROI) { m_pProj = pProj; m_pProjView = pProjView; m_pImageFile = pImageFile; m_pszFilterName = pszFilterName; - m_dFilterParam = dFilterParam; + m_dFilterParam = dFilterParam; m_pszFilterMethod = pszFilterMethod; m_iZeropad = iZeropad; m_pszFilterGenerationName = pszFilterGenerationName; @@ -220,17 +222,17 @@ ReconstructorWorker::SetParameters (const Projections* pProj, ProjectionFileView wxThread::ExitCode ReconstructorWorker::Entry () { - Reconstructor* pReconstructor = new Reconstructor (*m_pProj, *m_pImageFile, m_pszFilterName, - m_dFilterParam, m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName, + Reconstructor* pReconstructor = new Reconstructor (*m_pProj, *m_pImageFile, m_pszFilterName, + m_dFilterParam, m_pszFilterMethod, m_iZeropad, m_pszFilterGenerationName, m_pszInterpName, m_iInterpParam, m_pszBackprojectName, Trace::TRACE_NONE, m_pReconROI, false); bool bFail = pReconstructor->fail(); - std::string failMsg; + wxString failMsg; if (bFail) { - failMsg = "Unable to make reconstructor: "; - failMsg += pReconstructor->failMessage().c_str(); + failMsg = _T("Unable to make reconstructor: "); + failMsg += wxConvUTF8.cMB2WX(pReconstructor->failMessage().c_str()); wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); - event.SetString( failMsg.c_str() ); + event.SetString( failMsg ); wxPostEvent( theApp->getMainFrame(), event ); } else @@ -241,10 +243,10 @@ ReconstructorWorker::Entry () #ifdef DEBUG if (theApp->getVerboseLogging()) { wxString msg; - msg.Printf("Worker thread: Received destroy message at work unit #%d\n", iUnit); + msg.Printf(_T("Worker thread: Received destroy message at work unit #%d\n"), iUnit); wxCommandEvent event( wxEVT_COMMAND_MENU_SELECTED, MAINMENU_LOG_EVENT ); event.SetString( msg ); - wxPostEvent( theApp->getMainFrame(), event ); + wxPostEvent( theApp->getMainFrame(), event ); } #endif break; @@ -257,9 +259,9 @@ ReconstructorWorker::Entry () delete pReconstructor; if (bFail) { - m_pSupervisor->onWorkerFail (m_iThread, failMsg); + m_pSupervisor->onWorkerFail (m_iThread, failMsg); } else { - m_pSupervisor->onWorkerDone (m_iThread); + m_pSupervisor->onWorkerDone (m_iThread); } while (! TestDestroy())