** Date Started: July 2000
**
** This is part of the CTSim program
-** Copyright (C) 1983-2000 Kevin Rosenberg
+** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.h,v 1.30 2001/01/26 05:37:24 kevin Exp $
+** $Id: views.h,v 1.52 2001/03/18 18:08:26 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
#include "wx/wx.h"
#include "docs.h"
#include "imagefile.h"
+#include "threadrecon.h"
+
+#if wxUSE_GLCANVAS
+#include "graph3dview.h"
+#endif
class ImageFileCanvas;
class ImageFileView : public wxView
wxMemoryDC m_memoryDC;
wxBitmap m_bitmap;
+ wxMenu* m_pMenuAnalyze;
- ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
- wxMenu* m_pFileMenu;
+ ImageFileCanvas *CreateCanvas (wxFrame* parent);
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
- ImageFileCanvas *m_canvas;
- wxFrame *m_frame;
+ ImageFileCanvas *m_pCanvas;
+ wxMenu* m_pFileMenu;
bool m_bMinSpecified;
bool m_bMaxSpecified;
double m_dMinPixel;
wxWindow* getFrameForChild()
#if CTSIM_MDI
- { return theApp->getMainFrame()->GetClientWindow(); }
+ { return theApp->getMainFrame(); }
#else
- { return m_frame; }
+ { return m_pFrame; }
#endif
public:
- ImageFileView(void);
- virtual ~ImageFileView(void);
+ ImageFileView();
+ virtual ~ImageFileView();
void canvasClosed()
- { m_canvas = NULL; m_frame = NULL; }
+ { m_pCanvas = NULL; m_pFrame = NULL; }
wxMenu* getFileMenu()
{ return m_pFileMenu; }
void OnUpdate(wxView *sender, wxObject *hint = NULL);
bool OnClose (bool deleteWindow = true);
- void OnScaleSize (wxCommandEvent& event);
- void OnExport (wxCommandEvent& event);
-
+ void OnEditCopy (wxCommandEvent& event);
+ void OnEditCut (wxCommandEvent& event);
+ void OnEditPaste (wxCommandEvent& event);
+
+ void OnRevert (wxCommandEvent& event);
+ void OnExport (wxCommandEvent& event);
void OnProperties (wxCommandEvent& event);
- void OnCompare (wxCommandEvent& event);
-
+
+ void OnCompare (wxCommandEvent& event);
+ void OnScaleSize (wxCommandEvent& event);
void OnInvertValues (wxCommandEvent& event);
void OnSquare (wxCommandEvent& event);
void OnSquareRoot (wxCommandEvent& event);
void OnInverseFourier (wxCommandEvent& event);
void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
-
+#if wxUSE_GLCANVAS
+ void OnConvert3d (wxCommandEvent& event);
+#endif
+
#ifdef HAVE_FFT
void OnFFT (wxCommandEvent& event);
void OnIFFT (wxCommandEvent& event);
void OnCompareRow (wxCommandEvent& event);
void OnCompareCol (wxCommandEvent& event);
- wxFrame* getFrame()
- { return m_frame; }
-
- ImageFileDocument* GetDocument(void)
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+
+ wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
+
+ ImageFileDocument* GetDocument()
{ return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
DECLARE_EVENT_TABLE()
class ImageFileCanvas: public wxScrolledWindow
{
private:
-
+ ImageFileView* m_pView;
+
int m_xCursor;
int m_yCursor;
- ImageFileView* m_pView;
public:
ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
virtual ~ImageFileCanvas();
virtual void OnDraw(wxDC& dc);
+ void OnChar(wxKeyEvent& event);
void OnMouseEvent(wxMouseEvent& event);
void DrawRubberBandCursor (wxDC& dc, int x, int y);
bool GetCurrentCursor (int& x, int& y);
class ProjectionFileCanvas;
class ProjectionFileView : public wxView
{
+private:
DECLARE_DYNAMIC_CLASS(ProjectionFileView)
- wxMemoryDC m_memoryDC;
+ wxMemoryDC m_memoryDC;
wxBitmap m_bitmap;
-private:
- ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+ ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
- ProjectionFileCanvas *m_canvas;
- wxFrame *m_frame;
+ ProjectionFileCanvas *m_pCanvas;
wxMenu* m_pFileMenu;
-
+
int m_iDefaultNX;
int m_iDefaultNY;
int m_iDefaultFilter;
wxWindow* getFrameForChild()
#if CTSIM_MDI
- { return theApp->getMainFrame()->GetClientWindow(); }
+ { return theApp->getMainFrame(); }
#else
- { return m_frame; }
+ { return m_pFrame; }
#endif
public:
- ProjectionFileView(void);
- virtual ~ProjectionFileView(void);
+ ProjectionFileView();
+ virtual ~ProjectionFileView();
void canvasClosed()
- { m_canvas = NULL; m_frame = NULL; }
+ { m_pCanvas = NULL; m_pFrame = NULL; }
bool OnCreate(wxDocument *doc, long flags);
void OnDraw(wxDC* dc);
bool OnClose (bool deleteWindow = true);
void OnProperties (wxCommandEvent& event);
void OnReconstructFBP (wxCommandEvent& event);
+ void OnReconstructFBPRebin (wxCommandEvent& event);
void OnReconstructFourier (wxCommandEvent& event);
+ void OnConvertRectangular (wxCommandEvent& event);
void OnConvertPolar (wxCommandEvent& event);
void OnConvertFFTPolar (wxCommandEvent& event);
-
- wxFrame* getFrame () { return m_frame; }
-
+ void OnPlotTThetaSampling (wxCommandEvent& event);
+ void OnPlotHistogram (wxCommandEvent& event);
+ void OnConvertParallel (wxCommandEvent& event);
+ void OnArtifactReduction (wxCommandEvent& event);
+
+ void doReconstructFBP (const Projections& rProj, bool bRebinToParallel);
+
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
+ ProjectionFileCanvas* getCanvas() { return m_pCanvas; }
+
wxMenu* getFileMenu() { return m_pFileMenu; }
- ProjectionFileDocument* GetDocument(void)
+ ProjectionFileDocument* GetDocument()
{ return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
DECLARE_EVENT_TABLE()
};
DECLARE_DYNAMIC_CLASS(PhantomFileView)
DECLARE_EVENT_TABLE()
- PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+ PhantomCanvas *CreateCanvas (wxFrame* parent);
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
- PhantomCanvas *m_canvas;
- wxFrame *m_frame;
+ PhantomCanvas *m_pCanvas;
wxMenu* m_pFileMenu;
int m_iDefaultNDet;
int m_iDefaultTrace;
double m_dDefaultRotation;
double m_dDefaultFocalLength;
- double m_dDefaultFieldOfView;
+ double m_dDefaultCenterDetectorLength;
+ double m_dDefaultViewRatio;
+ double m_dDefaultScanRatio;
int m_iDefaultRasterNX;
int m_iDefaultRasterNY;
int m_iDefaultRasterNSamples;
+ double m_dDefaultRasterViewRatio;
wxWindow* getFrameForChild()
#if CTSIM_MDI
- { return theApp->getMainFrame()->GetClientWindow(); }
+ { return theApp->getMainFrame(); }
#else
- { return m_frame; }
+ { return m_pFrame; }
#endif
public:
- PhantomFileView(void);
- virtual ~PhantomFileView(void);
+ PhantomFileView();
+ virtual ~PhantomFileView();
void canvasClosed()
- { m_canvas = NULL; m_frame = NULL; }
+ { m_pCanvas = NULL; m_pFrame = NULL; }
bool OnCreate(wxDocument *doc, long flags);
void OnUpdate(wxView *sender, wxObject *hint = NULL);
void OnRasterize (wxCommandEvent& event);
void OnProjections (wxCommandEvent& event);
- PhantomFileDocument* GetDocument(void)
+ PhantomFileDocument* GetDocument()
{ return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
wxMenu* getFileMenu() { return m_pFileMenu; }
- wxFrame* getFrame() { return m_frame; }
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
};
class PhantomCanvas: public wxScrolledWindow
PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
virtual ~PhantomCanvas();
+ virtual wxSize GetBestSize() const;
void setView(PhantomFileView* pView)
{ m_pView = pView; }
virtual void OnDraw(wxDC& dc);
DECLARE_DYNAMIC_CLASS(PlotFileView)
private:
- PlotFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
- PlotFileCanvas *m_canvas;
- wxFrame *m_frame;
- wxMenu* m_pFileMenu;
+ PlotFileCanvas *m_pCanvas;
EZPlot* m_pEZPlot;
+ wxMenu* m_pFileMenu;
bool m_bMinSpecified;
bool m_bMaxSpecified;
double m_dMaxPixel;
double m_dAutoScaleFactor;
+ PlotFileCanvas *CreateCanvas (wxFrame* parent);
wxWindow* getFrameForChild()
#if CTSIM_MDI
- { return theApp->getMainFrame()->GetClientWindow(); }
+ { return theApp->getMainFrame(); }
#else
- { return m_frame; }
+ { return m_pFrame; }
#endif
public:
- PlotFileView(void);
- virtual ~PlotFileView(void);
+ PlotFileView();
+ virtual ~PlotFileView();
void canvasClosed()
- { m_canvas = NULL; m_frame = NULL; }
+ { m_pCanvas = NULL; m_pFrame = NULL; }
bool OnCreate(wxDocument *doc, long flags);
void OnDraw(wxDC* dc);
void OnScaleAuto (wxCommandEvent& event);
void OnScaleFull (wxCommandEvent& event);
- wxFrame* getFrame ()
- { return m_frame; }
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
wxMenu* getFileMenu() { return m_pFileMenu; }
- PlotFileDocument* GetDocument(void)
+ PlotFileDocument* GetDocument()
{ return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
DECLARE_EVENT_TABLE()
private:
DECLARE_DYNAMIC_CLASS(TextFileView)
- wxFrame *m_pFrame;
+#if CTSIM_MDI
+ wxDocMDIChildFrame* m_pFrame;
+ wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#else
+ wxDocChildFrame* m_pFrame;
+ wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
+#endif
wxMenu* m_pFileMenu;
TextFileCanvas *m_pCanvas;
void canvasClosed()
{ m_pFrame = NULL; }
- wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
-
bool OnCreate (wxDocument *doc, long flags);
void OnDraw (wxDC *dc);
void OnUpdate (wxView *sender, wxObject *hint = (wxObject *) NULL);
bool OnClose (bool deleteWindow = TRUE);
+ TextFileDocument* GetDocument()
+ { return dynamic_cast<TextFileDocument*>(wxView::GetDocument()); }
+
TextFileCanvas* getTextCtrl() { return m_pCanvas; }
- wxFrame* getFrame() { return m_pFrame; }
wxMenu* getFileMenu() { return m_pFileMenu; }
+#if CTSIM_MDI
+ wxDocMDIChildFrame* getFrame() { return m_pFrame; }
+#else
+ wxDocChildFrame* getFrame() { return m_pFrame; }
+#endif
};
class TextFileCanvas: public wxTextCtrl