From: Kevin M. Rosenberg Date: Thu, 7 Sep 2000 01:28:33 +0000 (+0000) Subject: r191: *** empty log message *** X-Git-Tag: debian-4.5.3-3~826 X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=commitdiff_plain;h=98f894fe74f1a532f5e6d69cca0404d9a58893e7 r191: *** empty log message *** --- diff --git a/ChangeLog b/ChangeLog index 9cf582f..f40f2a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2.0.0 - 9/7/00 + Version 2.0.0 released! + ctsim: Added Window menu to Main frame + ctsim: Disabled not support reconstruction method + 2.0.0-b12 - 9/4/00 ctsim: Added animation of reconstruction ctsim: Added saving of dialog parameters for Projection & Reconstruction diff --git a/NEWS b/NEWS index 8baa493..1938d04 100644 --- a/NEWS +++ b/NEWS @@ -1,4 +1,4 @@ -Version 2.0 of CTSim is near completion! +Version 2.0 of CTSim has been released! New Features of CTSim version 2.0: diff --git a/TODO b/TODO index 80db119..ad50170 100644 --- a/TODO +++ b/TODO @@ -1,6 +1,4 @@ Convert pol to C++ object. -Add divergent filtering to frequency/direct filtering - FFT filtering requires FFTW library. Add a basic FFT routine. diff --git a/configure b/configure index 7ff20cb..9decb9b 100755 --- a/configure +++ b/configure @@ -715,7 +715,7 @@ fi PACKAGE=ctsim -VERSION=2.0.0b12 +VERSION=2.0.0 if test "`cd $srcdir && pwd`" != "`pwd`" && test -f $srcdir/config.status; then { echo "configure: error: source directory already configured; run "make distclean" there first" 1>&2; exit 1; } diff --git a/configure.in b/configure.in index f010b6f..78a6713 100644 --- a/configure.in +++ b/configure.in @@ -4,7 +4,7 @@ dnl Must reset CDPATH so that bash's cd does not print to stdout dnl CDPATH= AC_INIT(src/ctsim.cpp) -AM_INIT_AUTOMAKE(ctsim,2.0.0b12) +AM_INIT_AUTOMAKE(ctsim,2.0.0) AM_CONFIG_HEADER(config.h) dnl Checks for programs. diff --git a/src/ctsim.cpp b/src/ctsim.cpp index a3aefb5..cdb4caf 100644 --- a/src/ctsim.cpp +++ b/src/ctsim.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ctsim.cpp,v 1.11 2000/09/02 16:40:36 kevin Exp $ +** $Id: ctsim.cpp,v 1.12 2000/09/07 01:28:33 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 @@ -53,7 +53,7 @@ #include #endif -static const char* rcsindent = "$Id: ctsim.cpp,v 1.11 2000/09/02 16:40:36 kevin Exp $"; +static const char* rcsindent = "$Id: ctsim.cpp,v 1.12 2000/09/07 01:28:33 kevin Exp $"; class CTSimApp* theApp = NULL; @@ -66,7 +66,7 @@ struct option CTSimApp::ctsimOptions[] = IMPLEMENT_APP(CTSimApp) -CTSimApp::CTSimApp(void) +CTSimApp::CTSimApp() : m_docManager(NULL), m_pFrame(NULL) { theApp = this; @@ -81,7 +81,7 @@ CTSimApp::CTSimApp(void) #endif bool -CTSimApp::OnInit(void) +CTSimApp::OnInit() { #ifdef HAVE_SETPRIORITY setpriority (PRIO_PROCESS, 0, 15); // set to low scheduling priority @@ -109,39 +109,15 @@ CTSimApp::OnInit(void) m_docManager = new wxDocManager; - (void) new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile doc", "ImageFile View", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); + new wxDocTemplate (m_docManager, "ImageFile", "*.if", "", "if", "ImageFile doc", "ImageFile View", CLASSINFO(ImageFileDocument), CLASSINFO(ImageFileView)); - (void) new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile doc", "ProjectionFile View", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); + new wxDocTemplate (m_docManager, "ProjectionFile", "*.pj", "", "pj", "ProjectionFile doc", "ProjectionFile View", CLASSINFO(ProjectionFileDocument), CLASSINFO(ProjectionFileView)); - (void) new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "Phantom doc", "Phantom View", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView)); + new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "Phantom doc", "Phantom View", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView)); //// Create the main frame window m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE); - //// Make a menubar - wxMenu *file_menu = new wxMenu; - - file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom..."); - file_menu->Append(wxID_OPEN, "&Open..."); - - file_menu->AppendSeparator(); - file_menu->Append(MAINMENU_FILE_EXIT, "E&xit"); - - // A nice touch: a history of files visited. Use this menu. - m_docManager->FileHistoryUseMenu(file_menu); - - wxMenu *help_menu = new wxMenu; - help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents"); - help_menu->AppendSeparator(); - help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); - - wxMenuBar *menu_bar = new wxMenuBar; - - menu_bar->Append(file_menu, "&File"); - menu_bar->Append(help_menu, "&Help"); - - m_pFrame->SetMenuBar(menu_bar); - SetTopWindow (m_pFrame); m_pFrame->Centre(wxBOTH); @@ -166,7 +142,7 @@ CTSimApp::usage(const char* program) } int -CTSimApp::OnExit(void) +CTSimApp::OnExit() { delete m_docManager; #ifdef HAVE_DMALLOC @@ -176,7 +152,7 @@ CTSimApp::OnExit(void) } wxString -CTSimApp::getUntitledFilename(void) +CTSimApp::getUntitledFilename() { static int untitledNumber = 1; @@ -196,22 +172,78 @@ BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame) EVT_MENU(MAINMENU_HELP_CONTENTS, MainFrame::OnHelpContents) EVT_MENU(MAINMENU_FILE_CREATE_PHANTOM, MainFrame::OnCreatePhantom) EVT_MENU(MAINMENU_FILE_EXIT, MainFrame::OnExit) + EVT_MENU(MAINMENU_WINDOW_BASE, MainFrame::OnWindowMenu0) + EVT_MENU(MAINMENU_WINDOW_BASE+1, MainFrame::OnWindowMenu1) + EVT_MENU(MAINMENU_WINDOW_BASE+2, MainFrame::OnWindowMenu2) + EVT_MENU(MAINMENU_WINDOW_BASE+3, MainFrame::OnWindowMenu3) + EVT_MENU(MAINMENU_WINDOW_BASE+4, MainFrame::OnWindowMenu4) + EVT_MENU(MAINMENU_WINDOW_BASE+5, MainFrame::OnWindowMenu5) + EVT_MENU(MAINMENU_WINDOW_BASE+6, MainFrame::OnWindowMenu6) + EVT_MENU(MAINMENU_WINDOW_BASE+7, MainFrame::OnWindowMenu7) + EVT_MENU(MAINMENU_WINDOW_BASE+8, MainFrame::OnWindowMenu8) + EVT_MENU(MAINMENU_WINDOW_BASE+9, MainFrame::OnWindowMenu9) + EVT_MENU(MAINMENU_WINDOW_BASE+10, MainFrame::OnWindowMenu10) + EVT_MENU(MAINMENU_WINDOW_BASE+11, MainFrame::OnWindowMenu11) + EVT_MENU(MAINMENU_WINDOW_BASE+12, MainFrame::OnWindowMenu12) + EVT_MENU(MAINMENU_WINDOW_BASE+13, MainFrame::OnWindowMenu13) + EVT_MENU(MAINMENU_WINDOW_BASE+14, MainFrame::OnWindowMenu14) + EVT_MENU(MAINMENU_WINDOW_BASE+15, MainFrame::OnWindowMenu15) + EVT_MENU(MAINMENU_WINDOW_BASE+16, MainFrame::OnWindowMenu16) + EVT_MENU(MAINMENU_WINDOW_BASE+17, MainFrame::OnWindowMenu17) + EVT_MENU(MAINMENU_WINDOW_BASE+18, MainFrame::OnWindowMenu18) + EVT_MENU(MAINMENU_WINDOW_BASE+19, MainFrame::OnWindowMenu19) + EVT_UPDATE_UI_RANGE(MAINMENU_WINDOW_BASE, MAINMENU_WINDOW_BASE+20, MainFrame::OnUpdateUI) END_EVENT_TABLE() + MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type) : wxDocParentFrame(manager, frame, id, title, pos, size, type), m_pLog(NULL) { - CreateStatusBar(); m_pLog = new wxTextCtrl (this, -1, "Log Window\n", wxPoint(0, 250), wxSize(100,50), wxTE_MULTILINE | wxTE_READONLY); wxLog::SetActiveTarget(new wxLogTextCtrl(m_pLog)); + CreateStatusBar(); SetStatusText ("Welcome to CTSim"); + + //// Make a menubar + wxMenu *file_menu = new wxMenu; + + file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom..."); + file_menu->Append(wxID_OPEN, "&Open..."); + + file_menu->AppendSeparator(); + file_menu->Append(MAINMENU_FILE_EXIT, "E&xit"); + + // history of files visited + m_docManager->FileHistoryUseMenu(file_menu); + + m_pWindowMenu = new wxMenu; + m_pWindowMenu->UpdateUI (this); + + wxMenu* help_menu = new wxMenu; + help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents"); + help_menu->AppendSeparator(); + help_menu->Append(MAINMENU_HELP_ABOUT, "&About"); + + wxMenuBar* menu_bar = new wxMenuBar; + + menu_bar->Append(file_menu, "&File"); + menu_bar->Append(m_pWindowMenu, "&Window"); + menu_bar->Append(help_menu, "&Help"); + + SetMenuBar(menu_bar); + + for (int i = 0; i < MAX_WINDOW_MENUITEMS; i++) { + m_apWindowMenuItems[i] = new wxMenuItem (m_pWindowMenu, MAINMENU_WINDOW_BASE+i, wxString("")); + m_pWindowMenu->Append (m_apWindowMenuItems[i]); + m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false); + } } void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) { - wxMessageBox("CTSim\nAuthor: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]", "About CTSim", wxOK | wxICON_INFORMATION, this); + wxMessageBox("CTSim\nThe Open Source Computed Tomography Simulator\nAuthor: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]", "About CTSim", wxOK | wxICON_INFORMATION, this); } void @@ -240,3 +272,101 @@ MainFrame::OnExit (wxCommandEvent& WXUNUSED(event) ) Close(true); } +void +MainFrame::OnUpdateUI (wxUpdateUIEvent& rEvent) +{ + int iPos = 0; + wxList& rListDocs = m_docManager->GetDocuments(); + wxNode* pNode = rListDocs.GetFirst(); + while (iPos < MAX_WINDOW_MENUITEMS && pNode != NULL) { + wxDocument* pDoc = static_cast(pNode->GetData()); + wxString strFilename = pDoc->GetFilename(); + m_apWindowMenuItems[iPos]->SetName (strFilename); + m_apWindowMenuData[iPos] = pDoc; + m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+iPos, true); + iPos++; + pNode = pNode->GetNext(); + } + for (int i = iPos; i < MAX_WINDOW_MENUITEMS; i++) { + m_pWindowMenu->Enable (MAINMENU_WINDOW_BASE+i, false); + m_apWindowMenuItems[i]->SetName (wxString("")); + m_apWindowMenuData[i] = NULL; + } + +} + +void +MainFrame::DoWindowMenu (int iMenuPosition, wxCommandEvent& event) +{ + if (wxDocument* pDoc = m_apWindowMenuData [iMenuPosition]) { + wxString strFilename = pDoc->GetFilename(); + const wxView* pView = pDoc->GetFirstView(); + if (pView) { + wxFrame* pFrame = pView->GetFrame(); + pFrame->SetFocus(); + pFrame->Raise(); + } + } +} + +void MainFrame::OnWindowMenu0 (wxCommandEvent& event) +{ DoWindowMenu (0, event); } + +void MainFrame::OnWindowMenu1 (wxCommandEvent& event) +{ DoWindowMenu (1, event); } + +void MainFrame::OnWindowMenu2 (wxCommandEvent& event) +{ DoWindowMenu (2, event); } + +void MainFrame::OnWindowMenu3 (wxCommandEvent& event) +{ DoWindowMenu (3, event); } + +void MainFrame::OnWindowMenu4 (wxCommandEvent& event) +{ DoWindowMenu (4, event); } + +void MainFrame::OnWindowMenu5 (wxCommandEvent& event) +{ DoWindowMenu (5, event); } + +void MainFrame::OnWindowMenu6 (wxCommandEvent& event) +{ DoWindowMenu (6, event); } + +void MainFrame::OnWindowMenu7 (wxCommandEvent& event) +{ DoWindowMenu (7, event); } + +void MainFrame::OnWindowMenu8 (wxCommandEvent& event) +{ DoWindowMenu (8, event); } + +void MainFrame::OnWindowMenu9 (wxCommandEvent& event) +{ DoWindowMenu (9, event); } + +void MainFrame::OnWindowMenu10 (wxCommandEvent& event) +{ DoWindowMenu (10, event); } + +void MainFrame::OnWindowMenu11 (wxCommandEvent& event) +{ DoWindowMenu (11, event); } + +void MainFrame::OnWindowMenu12 (wxCommandEvent& event) +{ DoWindowMenu (12, event); } + +void MainFrame::OnWindowMenu13 (wxCommandEvent& event) +{ DoWindowMenu (13, event); } + +void MainFrame::OnWindowMenu14 (wxCommandEvent& event) +{ DoWindowMenu (14, event); } + +void MainFrame::OnWindowMenu15 (wxCommandEvent& event) +{ DoWindowMenu (15, event); } + +void MainFrame::OnWindowMenu16 (wxCommandEvent& event) +{ DoWindowMenu (16, event); } + +void MainFrame::OnWindowMenu17 (wxCommandEvent& event) +{ DoWindowMenu (17, event); } + +void MainFrame::OnWindowMenu18 (wxCommandEvent& event) +{ DoWindowMenu (18, event); } + +void MainFrame::OnWindowMenu19 (wxCommandEvent& event) +{ DoWindowMenu (19, event); } + + diff --git a/src/ctsim.h b/src/ctsim.h index 6185d86..8367f21 100644 --- a/src/ctsim.h +++ b/src/ctsim.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: ctsim.h,v 1.5 2000/08/25 15:59:13 kevin Exp $ +** $Id: ctsim.h,v 1.6 2000/09/07 01:28:33 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 @@ -36,12 +36,20 @@ #include #endif -// Define a new frame +class wxMenu; +class wxDocument; + +// Define a new frame for main window class MainFrame: public wxDocParentFrame { DECLARE_CLASS(MainFrame) private: wxTextCtrl* m_pLog; + wxMenu* m_pWindowMenu; + + static const int MAX_WINDOW_MENUITEMS = 20; + wxMenuItem* m_apWindowMenuItems[MAX_WINDOW_MENUITEMS]; + wxDocument* m_apWindowMenuData[MAX_WINDOW_MENUITEMS]; public: MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const wxString& title, const wxPoint& pos, const wxSize& size, const long type); @@ -51,27 +59,53 @@ public: void OnCreatePhantom (wxCommandEvent& event); void OnExit (wxCommandEvent& event); + void OnUpdateUI (wxUpdateUIEvent& event); + wxTextCtrl* getLog() { return m_pLog; } + void OnWindowMenu0 (wxCommandEvent& event); + void OnWindowMenu1 (wxCommandEvent& event); + void OnWindowMenu2 (wxCommandEvent& event); + void OnWindowMenu3 (wxCommandEvent& event); + void OnWindowMenu4 (wxCommandEvent& event); + void OnWindowMenu5 (wxCommandEvent& event); + void OnWindowMenu6 (wxCommandEvent& event); + void OnWindowMenu7 (wxCommandEvent& event); + void OnWindowMenu8 (wxCommandEvent& event); + void OnWindowMenu9 (wxCommandEvent& event); + void OnWindowMenu10 (wxCommandEvent& event); + void OnWindowMenu11 (wxCommandEvent& event); + void OnWindowMenu12 (wxCommandEvent& event); + void OnWindowMenu13 (wxCommandEvent& event); + void OnWindowMenu14 (wxCommandEvent& event); + void OnWindowMenu15 (wxCommandEvent& event); + void OnWindowMenu16 (wxCommandEvent& event); + void OnWindowMenu17 (wxCommandEvent& event); + void OnWindowMenu18 (wxCommandEvent& event); + void OnWindowMenu19 (wxCommandEvent& event); + + void DoWindowMenu (int iMenuPosition, wxCommandEvent& event); + DECLARE_EVENT_TABLE() }; + class wxDocManager; class CTSimApp: public wxApp { public: - CTSimApp(void); - bool OnInit(void); - int OnExit(void); - MainFrame* getMainFrame(void) const + CTSimApp(); + bool OnInit(); + int OnExit(); + MainFrame* getMainFrame() const { return m_pFrame; } - wxTextCtrl* getLog(void) + wxTextCtrl* getLog() { return m_pFrame->getLog(); } wxDocManager* getDocManager() { return m_docManager; } - wxString getUntitledFilename(void); + wxString getUntitledFilename(); private: wxDocManager* m_docManager; @@ -102,6 +136,7 @@ enum { IFMENU_VIEW_SCALE_MINMAX, PHMMENU_PROCESS_RASTERIZE, PHMMENU_PROCESS_PROJECTIONS, + MAINMENU_WINDOW_BASE, }; #endif diff --git a/src/docs.cpp b/src/docs.cpp index c39b72b..6722ef5 100644 --- a/src/docs.cpp +++ b/src/docs.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: docs.cpp,v 1.2 2000/07/15 08:36:13 kevin Exp $ +** $Id: docs.cpp,v 1.3 2000/09/07 01:28:33 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 @@ -95,6 +95,12 @@ void ImageFileDocument::Modify(bool mod) wxDocument::Modify(mod); } +bool ImageFileDocument::OnCloseDocument () +{ + bool bReturn = wxDocument::OnCloseDocument(); + return bReturn; +} + // ProjectionFileDocument IMPLEMENT_DYNAMIC_CLASS(ProjectionFileDocument, wxDocument) @@ -139,6 +145,12 @@ void ProjectionFileDocument::Modify(bool mod) } +bool ProjectionFileDocument::OnCloseDocument () +{ + bool bReturn = wxDocument::OnCloseDocument(); + return bReturn; +} + // PhantomDocument IMPLEMENT_DYNAMIC_CLASS(PhantomDocument, wxDocument) @@ -148,6 +160,7 @@ bool PhantomDocument::OnOpenDocument(const wxString& filename) wxString myFilename = filename; if (wxFile::Exists (myFilename)) { m_phantom.createFromFile (myFilename); + *theApp->getLog() << "Read phantom file " << filename << "\n"; } else { myFilename.Replace (".phm", ""); m_phantom.createFromPhantom (myFilename); @@ -164,6 +177,12 @@ bool PhantomDocument::OnOpenDocument(const wxString& filename) return true; } +bool PhantomDocument::OnCloseDocument () +{ + bool bReturn = wxDocument::OnCloseDocument(); + return bReturn; +} + bool PhantomDocument::IsModified(void) const { return wxDocument::IsModified(); diff --git a/src/docs.h b/src/docs.h index d9997c8..e19f962 100644 --- a/src/docs.h +++ b/src/docs.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: docs.h,v 1.4 2000/07/22 15:45:33 kevin Exp $ +** $Id: docs.h,v 1.5 2000/09/07 01:28:33 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 @@ -49,6 +49,7 @@ public: virtual bool OnSaveDocument (const wxString& filename); virtual bool OnOpenDocument (const wxString& filename); virtual bool IsModified (void) const; + virtual bool OnCloseDocument (); virtual void Modify (bool mod); ImageFileDocument (void) {} @@ -72,6 +73,7 @@ public: virtual bool OnSaveDocument (const wxString& filename); virtual bool OnOpenDocument (const wxString& filename); virtual bool IsModified (void) const; + virtual bool OnCloseDocument (); virtual void Modify (bool mod); ProjectionFileDocument (void) {} @@ -115,6 +117,7 @@ public: { return m_phantom; } virtual bool OnOpenDocument (const wxString& filename); + virtual bool OnCloseDocument (); virtual bool IsModified (void) const; virtual void Modify (bool mod); }; diff --git a/src/views.cpp b/src/views.cpp index c17d50c..2edb737 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.21 2000/09/04 09:06:46 kevin Exp $ +** $Id: views.cpp,v 1.22 2000/09/07 01:28:33 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 @@ -467,16 +467,18 @@ PhantomView::OnProjections (wxCommandEvent& event) rProj.setRemark (os.str()); *theApp->getLog() << os.str().c_str(); + m_frame->Lower(); ::wxYield(); - pProjectionDoc->Modify(true); - pProjectionDoc->UpdateAllViews(this); - ::wxYield(); - if (wxView* pView = pProjectionDoc->GetFirstView()) + if (wxView* pView = pProjectionDoc->GetFirstView()) { if (wxFrame* pFrame = pView->GetFrame()) { pFrame->SetFocus(); pFrame->Raise(); } - m_frame->Lower(); + theApp->getDocManager()->ActivateView (pView, true, false); + } + ::wxYield(); + pProjectionDoc->Modify(true); + pProjectionDoc->UpdateAllViews(this); } } } @@ -731,7 +733,28 @@ ProjectionFileView::OnReconstruct (wxCommandEvent& event) imageFile.setArraySize (m_iDefaultNX, m_iDefaultNY); Timer timerRecon; + if (m_iDefaultFilterMethod != ProcessSignal::FILTER_METHOD_CONVOLUTION && m_iDefaultFilterGeneration == ProcessSignal::FILTER_GENERATION_DIRECT && rProj.geometry() != Scanner::GEOMETRY_PARALLEL) { + wxMessageBox ("Sorry!\nCurrently, frequency-based filtering with direct filter generation is not support for geometries other than parallel.\nAborting command.", "Not Supported", wxOK | wxICON_WARNING, m_frame); + return; + } +#if 0 + SGPDriver* pSGPDriver = NULL; + SGP* pSGP = NULL; + wxMemoryDC* pDCPlot = NULL; + wxBitmap bitmap; + if (m_iDefaultTrace >= Trace::TRACE_PLOT) { + bitmap.Create (500, 500); + pDCPlot = new wxMemoryDC; + pDCPlot->SelectObject (bitmap); + pSGPDriver = new SGPDriver (dynamic_castpDCPlot, 500, 500); + pSGP = new SGP (*pSGPDriver); + } + Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace, pSGP); + delete pSGP; +#else Reconstructor* pReconstruct = new Reconstructor (rProj, imageFile, optFilterName.c_str(), m_dDefaultFilterParam, optFilterMethodName.c_str(), m_iDefaultZeropad, optFilterGenerationName.c_str(), optInterpName.c_str(), m_iDefaultInterpParam, optBackprojectName.c_str(), m_iDefaultTrace); +#endif + if (m_iDefaultTrace > Trace::TRACE_CONSOLE) { ReconstructDialog* pDlgReconstruct = new ReconstructDialog (*pReconstruct, rProj, imageFile, m_iDefaultTrace, m_frame); for (int iView = 0; iView < rProj.nView(); iView++) {