1 /*****************************************************************************
5 ** Purpose: Header file for View & Canvas routines of CTSim program
6 ** Programmer: Kevin Rosenberg
7 ** Date Started: July 2000
9 ** This is part of the CTSim program
10 ** Copyright (c) 1983-2001 Kevin Rosenberg
12 ** $Id: views.h,v 1.54 2001/03/30 19:31:17 kevin Exp $
14 ** This program is free software; you can redistribute it and/or modify
15 ** it under the terms of the GNU General Public License (version 2) as
16 ** published by the Free Software Foundation.
18 ** This program is distributed in the hope that it will be useful,
19 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
20 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 ** GNU General Public License for more details.
23 ** You should have received a copy of the GNU General Public License
24 ** along with this program; if not, write to the Free Software
25 ** Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
26 ******************************************************************************/
37 #include "imagefile.h"
38 #include "threadrecon.h"
41 #include "graph3dview.h"
44 class ImageFileCanvas;
45 class ImageFileView : public wxView
48 DECLARE_DYNAMIC_CLASS(ImageFileView)
50 wxMemoryDC m_memoryDC;
52 wxMenu* m_pMenuAnalyze;
54 ImageFileCanvas *CreateCanvas (wxFrame* parent);
56 wxDocMDIChildFrame* m_pFrame;
57 wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
59 wxDocChildFrame* m_pFrame;
60 wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
63 ImageFileCanvas *m_pCanvas;
65 wxMenu* m_pFilterMenu;
70 double m_dAutoScaleFactor;
72 int m_iDefaultExportFormatID;
74 wxWindow* getFrameForChild()
76 { return theApp->getMainFrame(); }
83 virtual ~ImageFileView();
85 { m_pCanvas = NULL; m_pFrame = NULL; }
88 { return m_pFileMenu; }
90 bool OnCreate(wxDocument *doc, long flags);
91 void OnDraw(wxDC* dc);
92 void OnUpdate(wxView *sender, wxObject *hint = NULL);
93 bool OnClose (bool deleteWindow = true);
95 void OnEditCopy (wxCommandEvent& event);
96 void OnEditCut (wxCommandEvent& event);
97 void OnEditPaste (wxCommandEvent& event);
99 void OnRevert (wxCommandEvent& event);
100 void OnExport (wxCommandEvent& event);
101 void OnProperties (wxCommandEvent& event);
103 void OnCompare (wxCommandEvent& event);
104 void OnScaleSize (wxCommandEvent& event);
105 void OnInvertValues (wxCommandEvent& event);
106 void OnSquare (wxCommandEvent& event);
107 void OnSquareRoot (wxCommandEvent& event);
108 void OnLog (wxCommandEvent& event);
109 void OnExp (wxCommandEvent& event);
110 void OnAdd (wxCommandEvent& event);
111 void OnSubtract (wxCommandEvent& event);
112 void OnMultiply (wxCommandEvent& event);
113 void OnDivide (wxCommandEvent& event);
114 void OnFourier (wxCommandEvent& event);
115 void OnInverseFourier (wxCommandEvent& event);
116 void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
117 void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
118 #ifdef wxUSE_GLCANVAS
119 void OnConvert3d (wxCommandEvent& event);
123 void OnFFT (wxCommandEvent& event);
124 void OnIFFT (wxCommandEvent& event);
125 void OnFFTRows (wxCommandEvent& event);
126 void OnIFFTRows (wxCommandEvent& event);
127 void OnFFTCols (wxCommandEvent& event);
128 void OnIFFTCols (wxCommandEvent& event);
131 void OnMagnitude (wxCommandEvent& event);
132 void OnPhase (wxCommandEvent& event);
133 void OnReal (wxCommandEvent& event);
134 void OnImaginary (wxCommandEvent& event);
136 void OnScaleAuto (wxCommandEvent& event);
137 void OnScaleMinMax (wxCommandEvent& event);
138 void OnScaleFull (wxCommandEvent& event);
139 void OnPlotRow (wxCommandEvent& event);
140 void OnPlotCol (wxCommandEvent& event);
142 void OnPlotFFTRow (wxCommandEvent& event);
143 void OnPlotFFTCol (wxCommandEvent& event);
145 void OnPlotHistogram (wxCommandEvent& event);
146 void OnCompareRow (wxCommandEvent& event);
147 void OnCompareCol (wxCommandEvent& event);
150 wxDocMDIChildFrame* getFrame() { return m_pFrame; }
152 wxDocChildFrame* getFrame() { return m_pFrame; }
155 wxMenu* getMenuAnalyze() { return m_pMenuAnalyze; }
157 ImageFileDocument* GetDocument()
158 { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
160 DECLARE_EVENT_TABLE()
163 class ImageFileCanvas: public wxScrolledWindow
166 ImageFileView* m_pView;
172 ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
173 virtual ~ImageFileCanvas();
175 virtual void OnDraw(wxDC& dc);
176 void OnChar(wxKeyEvent& event);
177 void OnMouseEvent(wxMouseEvent& event);
178 void DrawRubberBandCursor (wxDC& dc, int x, int y);
179 bool GetCurrentCursor (int& x, int& y);
181 virtual wxSize GetBestSize() const;
182 void setView(ImageFileView* pView)
186 DECLARE_EVENT_TABLE()
190 class ProjectionFileCanvas;
191 class ProjectionFileView : public wxView
194 DECLARE_DYNAMIC_CLASS(ProjectionFileView)
196 wxMemoryDC m_memoryDC;
199 ProjectionFileCanvas *CreateCanvas (wxFrame* parent);
201 wxDocMDIChildFrame* m_pFrame;
202 wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
204 wxDocChildFrame* m_pFrame;
205 wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
208 ProjectionFileCanvas *m_pCanvas;
213 int m_iDefaultFilter;
214 int m_iDefaultFilterMethod;
215 double m_dDefaultFilterParam;
216 int m_iDefaultFilterGeneration;
217 int m_iDefaultZeropad;
218 int m_iDefaultInterpolation;
219 int m_iDefaultInterpParam;
220 int m_iDefaultBackprojector;
223 int m_iDefaultPolarNX;
224 int m_iDefaultPolarNY;
225 int m_iDefaultPolarInterpolation;
226 int m_iDefaultPolarZeropad;
228 wxWindow* getFrameForChild()
230 { return theApp->getMainFrame(); }
236 ProjectionFileView();
237 virtual ~ProjectionFileView();
239 { m_pCanvas = NULL; m_pFrame = NULL; }
241 bool OnCreate(wxDocument *doc, long flags);
242 void OnDraw(wxDC* dc);
243 void OnUpdate(wxView *sender, wxObject *hint = NULL);
244 bool OnClose (bool deleteWindow = true);
245 void OnProperties (wxCommandEvent& event);
246 void OnReconstructFBP (wxCommandEvent& event);
247 void OnReconstructFBPRebin (wxCommandEvent& event);
248 void OnReconstructFourier (wxCommandEvent& event);
249 void OnConvertRectangular (wxCommandEvent& event);
250 void OnConvertPolar (wxCommandEvent& event);
251 void OnConvertFFTPolar (wxCommandEvent& event);
252 void OnPlotTThetaSampling (wxCommandEvent& event);
253 void OnPlotHistogram (wxCommandEvent& event);
254 void OnConvertParallel (wxCommandEvent& event);
255 void OnArtifactReduction (wxCommandEvent& event);
257 void doReconstructFBP (const Projections& rProj, bool bRebinToParallel);
260 wxDocMDIChildFrame* getFrame() { return m_pFrame; }
262 wxDocChildFrame* getFrame() { return m_pFrame; }
264 ProjectionFileCanvas* getCanvas() { return m_pCanvas; }
266 wxMenu* getFileMenu() { return m_pFileMenu; }
268 ProjectionFileDocument* GetDocument()
269 { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
270 DECLARE_EVENT_TABLE()
273 class ProjectionFileCanvas: public wxScrolledWindow
276 ProjectionFileView* m_pView;
279 ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
280 virtual ~ProjectionFileCanvas() ;
282 virtual wxSize GetBestSize() const;
283 virtual void OnDraw(wxDC& dc);
284 void setView(ProjectionFileView* pView)
290 class PhantomFileView : public wxView
293 DECLARE_DYNAMIC_CLASS(PhantomFileView)
294 DECLARE_EVENT_TABLE()
296 PhantomCanvas *CreateCanvas (wxFrame* parent);
298 wxDocMDIChildFrame* m_pFrame;
299 wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
301 wxDocChildFrame* m_pFrame;
302 wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
305 PhantomCanvas *m_pCanvas;
310 int m_iDefaultNSample;
311 int m_iDefaultGeometry;
313 double m_dDefaultRotation;
314 double m_dDefaultFocalLength;
315 double m_dDefaultCenterDetectorLength;
316 double m_dDefaultViewRatio;
317 double m_dDefaultScanRatio;
319 int m_iDefaultRasterNX;
320 int m_iDefaultRasterNY;
321 int m_iDefaultRasterNSamples;
322 double m_dDefaultRasterViewRatio;
324 wxWindow* getFrameForChild()
326 { return theApp->getMainFrame(); }
333 virtual ~PhantomFileView();
335 { m_pCanvas = NULL; m_pFrame = NULL; }
337 bool OnCreate(wxDocument *doc, long flags);
338 void OnUpdate(wxView *sender, wxObject *hint = NULL);
339 bool OnClose (bool deleteWindow = true);
340 void OnDraw(wxDC* dc);
341 void OnProperties (wxCommandEvent& event);
342 void OnRasterize (wxCommandEvent& event);
343 void OnProjections (wxCommandEvent& event);
345 PhantomFileDocument* GetDocument()
346 { return dynamic_cast<PhantomFileDocument*>(wxView::GetDocument()); }
348 wxMenu* getFileMenu() { return m_pFileMenu; }
350 wxDocMDIChildFrame* getFrame() { return m_pFrame; }
352 wxDocChildFrame* getFrame() { return m_pFrame; }
356 class PhantomCanvas: public wxScrolledWindow
359 PhantomFileView* m_pView;
362 PhantomCanvas (PhantomFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
363 virtual ~PhantomCanvas();
365 virtual wxSize GetBestSize() const;
366 void setView(PhantomFileView* pView)
368 virtual void OnDraw(wxDC& dc);
371 class PlotFileCanvas;
372 class PlotFileView : public wxView
374 DECLARE_DYNAMIC_CLASS(PlotFileView)
378 wxDocMDIChildFrame* m_pFrame;
379 wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
381 wxDocChildFrame* m_pFrame;
382 wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
385 PlotFileCanvas *m_pCanvas;
389 bool m_bMinSpecified;
390 bool m_bMaxSpecified;
393 double m_dAutoScaleFactor;
395 PlotFileCanvas *CreateCanvas (wxFrame* parent);
396 wxWindow* getFrameForChild()
398 { return theApp->getMainFrame(); }
405 virtual ~PlotFileView();
407 { m_pCanvas = NULL; m_pFrame = NULL; }
409 bool OnCreate(wxDocument *doc, long flags);
410 void OnDraw(wxDC* dc);
411 void OnUpdate(wxView *sender, wxObject *hint = NULL);
412 bool OnClose (bool deleteWindow = true);
414 void OnProperties (wxCommandEvent& event);
415 void OnScaleMinMax (wxCommandEvent& event);
416 void OnScaleAuto (wxCommandEvent& event);
417 void OnScaleFull (wxCommandEvent& event);
420 wxDocMDIChildFrame* getFrame() { return m_pFrame; }
422 wxDocChildFrame* getFrame() { return m_pFrame; }
425 wxMenu* getFileMenu() { return m_pFileMenu; }
426 PlotFileDocument* GetDocument()
427 { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
429 DECLARE_EVENT_TABLE()
432 class PlotFileCanvas: public wxScrolledWindow
435 PlotFileView* m_pView;
438 PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
439 virtual ~PlotFileCanvas();
441 virtual void OnDraw(wxDC& dc);
443 void setView (PlotFileView* pView)
448 class TextFileCanvas;
449 class TextFileView: public wxView
452 DECLARE_DYNAMIC_CLASS(TextFileView)
455 wxDocMDIChildFrame* m_pFrame;
456 wxDocMDIChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
458 wxDocChildFrame* m_pFrame;
459 wxDocChildFrame* CreateChildFrame(wxDocument *doc, wxView *view);
462 TextFileCanvas *m_pCanvas;
466 : wxView() , m_pFrame(0), m_pCanvas(0)
472 bool OnCreate (wxDocument *doc, long flags);
473 void OnDraw (wxDC *dc);
474 void OnUpdate (wxView *sender, wxObject *hint = (wxObject *) NULL);
475 bool OnClose (bool deleteWindow = TRUE);
477 TextFileDocument* GetDocument()
478 { return dynamic_cast<TextFileDocument*>(wxView::GetDocument()); }
480 TextFileCanvas* getTextCtrl() { return m_pCanvas; }
481 wxMenu* getFileMenu() { return m_pFileMenu; }
483 wxDocMDIChildFrame* getFrame() { return m_pFrame; }
485 wxDocChildFrame* getFrame() { return m_pFrame; }
489 class TextFileCanvas: public wxTextCtrl
491 TextFileView *m_pView;
494 TextFileCanvas (TextFileView *v, wxFrame *frame, const wxPoint& pos, const wxSize& size, long style);