X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=src%2Fctsim.cpp;h=172cda95bc88c9bb6a14a556570a2a5dbe5e51fd;hp=2d094d383e52e6e1198f82d9e204648f0e67a1bb;hb=7ec2cd66921180a624813dff9f8bac76c6b268cc;hpb=43259365c0fa2788f15e1100491271dd910f5a6f diff --git a/src/ctsim.cpp b/src/ctsim.cpp index 2d094d3..172cda9 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.13 2000/09/07 14:29:05 kevin Exp $ +** $Id: ctsim.cpp,v 1.23 2001/01/01 10:14:34 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 @@ -24,36 +24,44 @@ ** along with this program; if not, write to the Free Software ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ******************************************************************************/ - -// For compilers that support precompilation, includes "wx/wx.h". -#include "wx/wxprec.h" - -#ifdef __BORLANDC__ -#pragma hdrstop -#endif - -#ifndef WX_PRECOMP -#include "wx/wx.h" -#endif - -#if !wxUSE_DOC_VIEW_ARCHITECTURE -#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! -#endif - -#include "wx/docview.h" + + +// For compilers that support precompilation, includes "wx/wx.h". +#include "wx/wxprec.h" + +#ifdef __BORLANDC__ +#pragma hdrstop +#endif + +#ifndef WX_PRECOMP +#include "wx/wx.h" +#endif + +#if !wxUSE_DOC_VIEW_ARCHITECTURE +#error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h! +#endif + +#include "ct.h" #include "ctsim.h" #include "docs.h" #include "views.h" #include "dialogs.h" -#include "ctsupport.h" + #if defined(HAVE_CONFIG_H) #include "config.h" -#endif +#endif + #if defined(HAVE_GETOPT_H) || defined(HAVE_GETOPT_LONG) -#include +#ifdef MSVC +#define __STDC__ 1 +#endif +#include "getopt.h" +#ifdef MSVC +#undef __STDC__ #endif - -static const char* rcsindent = "$Id: ctsim.cpp,v 1.13 2000/09/07 14:29:05 kevin Exp $"; +#endif + +static const char* rcsindent = "$Id: ctsim.cpp,v 1.23 2001/01/01 10:14:34 kevin Exp $"; class CTSimApp* theApp = NULL; @@ -95,7 +103,12 @@ CTSimApp::OnInit() switch (c) { case O_VERSION: - cout << rcsindent << endl; + std::cout << rcsindent << std::endl; +#ifdef CTSIMVERSION + std::cout << "Version: CTSIMVERSION" << std::endl; +#elif defined(VERSION) + std::cout << "Version: VERSION" << std::endl; +#endif exit(0); case O_HELP: case '?': @@ -115,6 +128,8 @@ CTSimApp::OnInit() new wxDocTemplate (m_docManager, "PhantomFile", "*.phm", "", "phm", "Phantom doc", "Phantom View", CLASSINFO(PhantomDocument), CLASSINFO(PhantomView)); + new wxDocTemplate (m_docManager, "PlotFile", "*.plt", "", "plt", "Plot doc", "Plot View", CLASSINFO(PlotFileDocument), CLASSINFO(PlotFileView)); + //// Create the main frame window m_pFrame = new MainFrame(m_docManager, (wxFrame *) NULL, -1, "CTSim", wxPoint(0, 0), wxSize(500, 400), wxDEFAULT_FRAME_STYLE); @@ -134,11 +149,11 @@ CTSimApp::OnInit() void CTSimApp::usage(const char* program) { - cout << "usage: " << fileBasename(program) << " [files-to-open...] [OPTIONS]\n"; - cout << "Computed Tomography Simulator (Graphical Shell)\n"; - cout << "\n"; - cout << " --version Display version\n"; - cout << " --help Display this help message\n"; + std::cout << "usage: " << fileBasename(program) << " [files-to-open...] [OPTIONS]\n"; + std::cout << "Computed Tomography Simulator (Graphical Shell)\n"; + std::cout << "\n"; + std::cout << " --version Display version\n"; + std::cout << " --help Display this help message\n"; } int @@ -170,7 +185,8 @@ IMPLEMENT_CLASS(MainFrame, wxDocParentFrame) BEGIN_EVENT_TABLE(MainFrame, wxDocParentFrame) EVT_MENU(MAINMENU_HELP_ABOUT, MainFrame::OnAbout) EVT_MENU(MAINMENU_HELP_CONTENTS, MainFrame::OnHelpContents) - EVT_MENU(MAINMENU_FILE_CREATE_PHANTOM, MainFrame::OnCreatePhantom) + EVT_MENU(MAINMENU_FILE_CREATE_PHANTOM, MainFrame::OnCreatePhantom) + EVT_MENU(MAINMENU_FILE_CREATE_FILTER, MainFrame::OnCreateFilter) EVT_MENU(MAINMENU_FILE_EXIT, MainFrame::OnExit) EVT_MENU(MAINMENU_WINDOW_BASE, MainFrame::OnWindowMenu0) EVT_MENU(MAINMENU_WINDOW_BASE+1, MainFrame::OnWindowMenu1) @@ -208,7 +224,8 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const //// Make a menubar wxMenu *file_menu = new wxMenu; - file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom..."); + file_menu->Append(MAINMENU_FILE_CREATE_PHANTOM, "Cr&eate Phantom..."); + file_menu->Append(MAINMENU_FILE_CREATE_FILTER, "Create &Filter..."); file_menu->Append(wxID_OPEN, "&Open..."); file_menu->AppendSeparator(); @@ -242,24 +259,81 @@ MainFrame::MainFrame(wxDocManager *manager, wxFrame *frame, wxWindowID id, const void MainFrame::OnAbout(wxCommandEvent& WXUNUSED(event) ) -{ - wxMessageBox("CTSim\nThe Open Source Computed Tomography Simulator\nAuthor: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]", "About CTSim", wxOK | wxICON_INFORMATION, this); -} - -void -MainFrame::OnCreatePhantom(wxCommandEvent& WXUNUSED(event)) -{ - DialogGetPhantom dialogPhantom (this, Phantom::PHM_HERMAN); - int dialogReturn = dialogPhantom.ShowModal(); - if (dialogReturn == wxID_OK) { - wxString selection (dialogPhantom.getPhantom()); - *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n"; - wxString filename = selection + ".phm"; - theApp->getDocManager()->CreateDocument(filename, wxDOC_SILENT); - } - +{ + wxString msg = "CTSim\nThe Open Source Computed Tomography Simulator\n"; +#ifdef CTSIMVERSION + msg += "Version "; + msg += CTSIMVERSION; + msg += "\n\n"; +#elif defined(VERSION) + msg << "Version: " << VERSION << "\n\n"; +#endif + msg += "Author: Kevin Rosenberg \nUsage: ctsim [files-to-open..] [--help]"; + + wxMessageBox(msg, "About CTSim", wxOK | wxICON_INFORMATION, this); } +void +MainFrame::OnCreatePhantom(wxCommandEvent& WXUNUSED(event)) +{ + DialogGetPhantom dialogPhantom (this, Phantom::PHM_HERMAN); + int dialogReturn = dialogPhantom.ShowModal(); + if (dialogReturn == wxID_OK) { + wxString selection (dialogPhantom.getPhantom()); + *theApp->getLog() << "Selected phantom " << selection.c_str() << "\n"; + wxString filename = selection + ".phm"; + theApp->getDocManager()->CreateDocument(filename, wxDOC_SILENT); + } + +} + +void +MainFrame::OnCreateFilter (wxCommandEvent& WXUNUSED(event)) +{ + DialogGetFilterParameters dialogFilter (this, 256, 256, SignalFilter::FILTER_BANDLIMIT, 1., 10., SignalFilter::DOMAIN_SPATIAL); + int dialogReturn = dialogFilter.ShowModal(); + if (dialogReturn == wxID_OK) { + wxString strFilter (dialogFilter.getFilterName()); + wxString strDomain (dialogFilter.getDomainName()); + unsigned int nx = dialogFilter.getXSize(); + unsigned int ny = dialogFilter.getYSize(); + double dBandwidth = dialogFilter.getBandwidth(); + double dFilterParam= dialogFilter.getFilterParam(); + *theApp->getLog() << "Selected filter " << strFilter.c_str() << ", domain " << strDomain.c_str() << ", filterParam " << dFilterParam << ", bandwidth " << dBandwidth << "\n"; + wxString filename = "untitled.if"; + ImageFileDocument* pFilterDoc = dynamic_cast(theApp->getDocManager()->CreateDocument ("untitled.if", wxDOC_SILENT)); + if (! pFilterDoc) { + sys_error (ERR_SEVERE, "Unable to create filter image"); + return; + } + ImageFile& rIF = pFilterDoc->getImageFile(); + rIF.setArraySize (nx, ny); + rIF.filterResponse (strDomain.c_str(), dBandwidth, strFilter.c_str(), dFilterParam); + if (theApp->getSetModifyNewDocs()) + pFilterDoc->Modify (true); + pFilterDoc->UpdateAllViews(); + pFilterDoc->GetFirstView()->OnUpdate (NULL, NULL); + } +} + +void +CTSimApp::getCompatibleImages (const ImageFileDocument* pIFDoc, std::vector& vecIF) +{ + const ImageFile& rIF = pIFDoc->getImageFile(); + unsigned int nx = rIF.nx(); + unsigned int ny = rIF.ny(); + wxList& rListDocs = m_docManager->GetDocuments(); + for (wxNode* pNode = rListDocs.GetFirst(); pNode != NULL; pNode = pNode->GetNext()) { + wxDocument* pDoc = reinterpret_cast(pNode->GetData()); + ImageFileDocument* pIFCompareDoc = dynamic_cast(pDoc); + if (pIFCompareDoc && (pIFDoc != pIFCompareDoc)) { + const ImageFile& rCompareIF = pIFCompareDoc->getImageFile(); + if (rCompareIF.nx() == nx && rCompareIF.ny() == ny) + vecIF.push_back (pIFCompareDoc); + } + } +} + void MainFrame::OnHelpContents(wxCommandEvent& WXUNUSED(event) ) {