- if (retVal == wxID_OK) {
- m_iDefaultRasterNX = dialogRaster.getXSize();
- m_iDefaultRasterNY = dialogRaster.getYSize();
- m_iDefaultRasterNSamples = dialogRaster.getNSamples();
- m_dDefaultRasterViewRatio = dialogRaster.getViewRatio();
- if (m_iDefaultRasterNSamples < 1)
- m_iDefaultRasterNSamples = 1;
- if (m_dDefaultRasterViewRatio < 0)
- m_dDefaultRasterViewRatio = 0;
- if (m_iDefaultRasterNX > 0 && m_iDefaultRasterNY > 0) {
- const Phantom& rPhantom = GetDocument()->getPhantom();
-
- ImageFile* pImageFile = new ImageFile;
-
- pImageFile->setArraySize (m_iDefaultRasterNX, m_iDefaultRasterNY);
- wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"),
- pImageFile->nx() + 1, getFrameForChild(), wxPD_CAN_ABORT );
- Timer timer;
- for (unsigned int i = 0; i < pImageFile->nx(); i++) {
- rPhantom.convertToImagefile (*pImageFile, m_dDefaultRasterViewRatio, m_iDefaultRasterNSamples,
- Trace::TRACE_NONE, i, 1, true);
- if (! dlgProgress.Update (i+1)) {
- delete pImageFile;
- return;
- }
- }
-
- ImageFileDocument* pRasterDoc = theApp->newImageDoc();
- if (! pRasterDoc) {
- sys_error (ERR_SEVERE, "Unable to create image file");
+ if (retVal != wxID_OK)
+ return;
+
+ m_iDefaultRasterNX = dialogRaster.getXSize();
+ m_iDefaultRasterNY = dialogRaster.getYSize();
+ m_iDefaultRasterNSamples = dialogRaster.getNSamples();
+ m_dDefaultRasterViewRatio = dialogRaster.getViewRatio();
+ if (m_iDefaultRasterNSamples < 1)
+ m_iDefaultRasterNSamples = 1;
+ if (m_dDefaultRasterViewRatio < 0)
+ m_dDefaultRasterViewRatio = 0;
+ if (m_iDefaultRasterNX <= 0 || m_iDefaultRasterNY <= 0)
+ return;
+
+ const Phantom& rPhantom = GetDocument()->getPhantom();
+ std::ostringstream os;
+ os << "Rasterize Phantom " << rPhantom.name() << ": XSize=" << m_iDefaultRasterNX << ", YSize="
+ << m_iDefaultRasterNY << ", ViewRatio=" << m_dDefaultRasterViewRatio << ", nSamples="
+ << m_iDefaultRasterNSamples;;
+
+#if HAVE_WXTHREADS
+ if (theApp->getUseBackgroundTasks()) {
+ RasterizerSupervisorThread* pThread = new RasterizerSupervisorThread (this, m_iDefaultRasterNX, m_iDefaultRasterNY,
+ m_iDefaultRasterNSamples, m_dDefaultRasterViewRatio, os.str().c_str());
+ if (pThread->Create() != wxTHREAD_NO_ERROR) {
+ *theApp->getLog() << "Error creating rasterizer thread\n";
+ return;
+ }
+ pThread->SetPriority (60);
+ pThread->Run();
+ } else
+#endif
+ {
+ ImageFile* pImageFile = new ImageFile (m_iDefaultRasterNX, m_iDefaultRasterNY);
+ wxProgressDialog dlgProgress (wxString("Rasterize"), wxString("Rasterization Progress"),
+ pImageFile->nx() + 1, getFrameForChild(), wxPD_CAN_ABORT );
+ Timer timer;
+ for (unsigned int i = 0; i < pImageFile->nx(); i++) {
+ rPhantom.convertToImagefile (*pImageFile, m_dDefaultRasterViewRatio, m_iDefaultRasterNSamples, Trace::TRACE_NONE, i, 1, true);
+ if (! dlgProgress.Update (i+1)) {
+ delete pImageFile;