** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.114 2001/02/23 02:06:02 kevin Exp $
+** $Id: views.cpp,v 1.118 2001/02/25 10:52:55 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
{
if (! m_pView)
return;
+
wxClientDC dc(this);
PrepareDC(dc);
double scaleWidth = m_dMaxPixel - m_dMinPixel;
unsigned char* imageData = new unsigned char [nx * ny * 3];
+ if (! imageData) {
+ sys_error (ERR_SEVERE, "Unable to allocate memory for Image display");
+ return;
+ }
for (int ix = 0; ix < nx; ix++) {
for (int iy = 0; iy < ny; iy++) {
double scaleValue = ((v[ix][iy] - m_dMinPixel) / scaleWidth) * 255;
wxMessageBox (msg, "Error");
return;
}
+ std::ostringstream os;
+ os << "Projections for " << rPhantom.name() << ": nDet=" << m_iDefaultNDet
+ << ", nView=" << m_iDefaultNView << ", nSamples=" << m_iDefaultNSample
+ << ", RotAngle=" << m_dDefaultRotation << ", FocalLengthRatio=" << m_dDefaultFocalLength
+ << ", ViewRatio=" << m_dDefaultViewRatio << ", ScanRatio=" << m_dDefaultScanRatio
+ << ", Geometry=" << sGeometry.c_str() << ", FanBeamAngle=" <<
+ convertRadiansToDegrees (theScanner.fanBeamAngle());
pProj->initFromScanner (theScanner);
m_dDefaultRotation /= TWOPI; // convert back to fraction of a circle
}
}
- std::ostringstream os;
- os << "Projections for " << rPhantom.name() << ": nDet=" << m_iDefaultNDet
- << ", nView=" << m_iDefaultNView << ", nSamples=" << m_iDefaultNSample
- << ", RotAngle=" << m_dDefaultRotation << ", FocalLengthRatio=" << m_dDefaultFocalLength
- << ", ViewRatio=" << m_dDefaultViewRatio << ", ScanRatio=" << m_dDefaultScanRatio
- << ", Geometry=" << sGeometry.c_str() << ", FanBeamAngle=" <<
- convertRadiansToDegrees (theScanner.fanBeamAngle());
- pProj->setCalcTime (timer.timerEnd());
pProj->setRemark (os.str());
+ pProj->setCalcTime (timer.timerEnd());
*theApp->getLog() << os.str().c_str() << "\n";
::wxYield();
} else {
if (theApp->getUseBackgroundTasks() || theApp->getNumberCPU() > 1) {
- ThreadedReconstructor* pReconstructor = new ThreadedReconstructor (this,
+ ReconstructorSupervisorThread* pReconstructor = new ReconstructorSupervisorThread (this,
m_iDefaultNX, m_iDefaultNY, optFilterName.c_str(),
m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(),
optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), os.str().c_str());
- if (! pReconstructor->start()) {
+ if (pReconstructor->Create() != wxTHREAD_NO_ERROR) {
+ sys_error (ERR_SEVERE, "Error creating reconstructor thread");
delete pReconstructor;
return;
}
- // delete pReconstructor; // reconstructor is still running
+// pReconstructor->SetPriority (60);
+ pReconstructor->Run();
} else {
ImageFile* pImageFile = new ImageFile;
pImageFile->setArraySize (m_iDefaultNX, m_iDefaultNY);
}
unsigned char* imageData = new unsigned char [nDet * nView * 3];
+ if (! imageData) {
+ sys_error (ERR_SEVERE, "Unable to allocate memory for image display");
+ return;
+ }
double scale = (max - min) / 255;
for (int iy2 = 0; iy2 < nView; iy2++) {
const DetectorArray& detarray = rProj.getDetectorArray (iy2);