r352: no message
authorKevin M. Rosenberg <kevin@rosenberg.net>
Wed, 3 Jan 2001 22:00:46 +0000 (22:00 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Wed, 3 Jan 2001 22:00:46 +0000 (22:00 +0000)
include/ct.h
include/projections.h
libctsim/projections.cpp
msvc/ctsim/ctsim.plg
src/ctsim.h
src/views.cpp
src/views.h

index 98425a16aae164c22b2f2b4c52aa5861bf729c15..2172063b6d2d717c098776a4825b0edf8f542161 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ct.h,v 1.49 2001/01/02 16:02:12 kevin Exp $
+**  $Id: ct.h,v 1.50 2001/01/03 22:00:46 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
@@ -148,6 +148,7 @@ extern "C" {
 #ifdef HAVE_FFTW
 #include <rfftw.h>
 #include <fftw.h>
+#define HAVE_FFT 1
 #endif
 
 #ifdef HAVE_MPI
index aa76b1a05a21620eb7fc7556c7c7c68f813c7457..338f37685a321e3e1caa39ef13e5cb6012a12a51 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: projections.h,v 1.18 2000/12/16 06:12:47 kevin Exp $
+**  $Id: projections.h,v 1.19 2001/01/03 22:00:46 kevin Exp $
 **
 **
 **  This program is free software; you can redistribute it and/or modify
@@ -56,6 +56,9 @@ class Projections
   bool detarrayRead (fnetorderstream& fs, DetectorArray& darray, const int view_num);
   bool detarrayWrite (fnetorderstream& fs, const DetectorArray& darray, const int view_num);
 
+  bool convertPolar (ImageFile& rIF, int iInterpolation);
+  bool convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad);
+
   bool reconstruct (ImageFile& im, const char* const filterName, double filt_param, const char* const filterMethodName, const int zeropad, const char* frequencyFilterName, const char* const interpName, int interp_param, const char* const backprojName, const int trace) const;
 
   void setNView (int nView);  // used in MPI to restrict # of views
index f6fff539bb7c4f6a7d7e5b8362b71cb5f09964bc..bdcf35e63089e3703929b1865b5374edbc45135b 100644 (file)
@@ -8,7 +8,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: projections.cpp,v 1.35 2001/01/02 16:02:13 kevin Exp $
+**  $Id: projections.cpp,v 1.36 2001/01/03 22:00:46 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
@@ -609,4 +609,15 @@ Projections::printScanInfo (std::ostringstream& os) const
 }
 
 
+bool Projections::convertPolar (ImageFile& rIF, int iInterpolation)
+{
+  return false;
+}
+
+bool Projections::convertFFTPolar (ImageFile& rIF, int iInterpolation, int iZeropad)
+{
+  return false;
+}
+
+
 
index 54f284a688e77b974263e81ce7779f16910f7822..27d403b2f5b41e5ca406f2e045d4d82e67a254a5 100644 (file)
@@ -6,13 +6,13 @@
 --------------------Configuration: ctsim - Win32 Release--------------------
 </h3>
 <h3>Command Lines</h3>
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPBE.tmp" with contents
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2E.tmp" with contents
 [
-/nologo /G6 /MT /W3 /GR /GX /O2 /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0alpha3\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 
+/nologo /G6 /MT /W3 /GR /GX /O2 /I "." /I "..\..\include" /I "..\..\getopt" /I "..\..\..\lpng108" /I "..\..\..\zlib" /I "..\..\..\fftw-2.1.3\fftw" /I "..\..\..\fftw-2.1.3\rfftw" /I "..\..\..\wx2\include" /D "NDEBUG" /D "__WXWIN__" /D "__WXMSW__" /D "HAVE_SGP" /D "HAVE_PNG" /D "HAVE_WXWINDOWS" /D "WIN32" /D "_WINDOWS" /D "_MBCS" /D "HAVE_STRING_H" /D "HAVE_FFTW" /D "HAVE_RFFTW" /D "HAVE_GETOPT_H" /D "MSVC" /D "__WIN95__" /D "__WIN32__" /D WINVER=0x0400 /D "STRICT" /D CTSIMVERSION=\"3.0.0beta1\" /FR"Release/" /Fp"Release/ctsim.pch" /YX /Fo"Release/" /Fd"Release/" /FD /c 
 "C:\ctsim\src\views.cpp"
 ]
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPBE.tmp" 
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPBF.tmp" with contents
+Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2E.tmp" 
+Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2F.tmp" with contents
 [
 kernel32.lib user32.lib wsock32.lib comctl32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libpng.lib zlib.lib /nologo /subsystem:windows /incremental:no /pdb:"Release/ctsim.pdb" /machine:I386 /out:"Release/ctsim.exe" /libpath:"..\..\..\lpng108\msvc\win32\libpng\lib" /libpath:"..\..\..\lpng108\msvc\win32\zlib\lib" 
 .\Release\ctsim.obj
@@ -21,13 +21,12 @@ kernel32.lib user32.lib wsock32.lib comctl32.lib gdi32.lib winspool.lib comdlg32
 .\Release\dlgreconstruct.obj
 .\Release\docs.obj
 .\Release\views.obj
-.\Release\wx.res
 \ctsim\msvc\libctsim\Release\libctsim.lib
 "\fftw-2.1.3\Win32\FFTW2st\Release\FFTW2st.lib"
 "\fftw-2.1.3\Win32\RFFTW2st\Release\RFFTW2st.lib"
 \wx2\lib\wx.lib
 ]
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSPBF.tmp"
+Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP2F.tmp"
 <h3>Output Window</h3>
 Compiling...
 views.cpp
index 4425db3200d1ce43fd0c157c915299498f8a5e8c..31d02a4fdd4fd3e5d225b6ba6d441b0343d560e8 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.h,v 1.19 2001/01/02 13:16:43 kevin Exp $
+**  $Id: ctsim.h,v 1.20 2001/01/03 22:00:46 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
@@ -163,9 +163,13 @@ enum {
   MAINMENU_FILE_EXIT,
 
   IFMENU_FILE_PROPERTIES,
-  PJMENU_FILE_PROPERTIES,
   PHMMENU_FILE_PROPERTIES,
-  PJMENU_PROCESS_RECONSTRUCT,
+
+  PJMENU_FILE_PROPERTIES,
+  PJMENU_RECONSTRUCT_FBP,
+  PJMENU_RECONSTRUCT_FOURIER,
+  PJMENU_CONVERT_POLAR,
+  PJMENU_CONVERT_FFT_POLAR,
 
   IFMENU_FILE_EXPORT,
 
index 8f9b512f8e88aec0eca671f38afc0b3850b9aa4c..f7d8a1f1407469442860b4d9657c150f6fa68563 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.49 2001/01/02 15:58:18 kevin Exp $
+**  $Id: views.cpp,v 1.50 2001/01/03 22:00:46 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
@@ -1593,7 +1593,9 @@ IMPLEMENT_DYNAMIC_CLASS(ProjectionFileView, wxView)
 
 BEGIN_EVENT_TABLE(ProjectionFileView, wxView)
 EVT_MENU(PJMENU_FILE_PROPERTIES, ProjectionFileView::OnProperties)
-EVT_MENU(PJMENU_PROCESS_RECONSTRUCT, ProjectionFileView::OnReconstruct)
+EVT_MENU(PJMENU_RECONSTRUCT_FBP, ProjectionFileView::OnReconstructFBP)
+EVT_MENU(PJMENU_CONVERT_POLAR, ProjectionFileView::OnConvertPolar)
+EVT_MENU(PJMENU_CONVERT_FFT_POLAR, ProjectionFileView::OnConvertFFTPolar)
 END_EVENT_TABLE()
 
 ProjectionFileView::ProjectionFileView(void) 
@@ -1634,7 +1636,35 @@ ProjectionFileView::OnProperties (wxCommandEvent& event)
 
 
 void
-ProjectionFileView::OnReconstruct (wxCommandEvent& event)
+ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
+{
+  Projections& rProj = GetDocument()->getProjections();
+}
+
+void
+ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
+{
+  Projections& rProj = GetDocument()->getProjections();
+  wxMessageBox ("Polar conversion not yet implemented", "Unimplemented function");
+#if 0
+  rProj.convertPolar ();
+  if (theApp->getSetModifyNewDocs())
+    GetDocument()->Modify(true);
+  GetDocument()->UpdateAllViews();
+#ifndef HAVE_FFT
+  wxMessageBox ("FFT support has not been compiled into this version of CTSim", "Error");
+#endif
+#endif
+}
+
+void
+ProjectionFileView::OnReconstructFourier (wxCommandEvent& event)
+{
+  wxMessageBox ("Fourier Reconstruction is not yet supported", "Unimplemented function");
+}
+
+void
+ProjectionFileView::OnReconstructFBP (wxCommandEvent& event)
 {
   DialogGetReconstructionParameters dialogReconstruction (m_frame, m_iDefaultNX, m_iDefaultNY, m_iDefaultFilter, m_dDefaultFilterParam, m_iDefaultFilterMethod, m_iDefaultFilterGeneration, m_iDefaultZeropad, m_iDefaultInterpolation, m_iDefaultInterpParam, m_iDefaultBackprojector, m_iDefaultTrace);
   
@@ -1761,9 +1791,14 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   file_menu->Append(wxID_PRINT_SETUP, "Print &Setup...");
   file_menu->Append(wxID_PREVIEW, "Print Pre&view");
   
-  wxMenu *process_menu = new wxMenu;
-  process_menu->Append(PJMENU_PROCESS_RECONSTRUCT, "R&econstruct...");
+  wxMenu *convert_menu = new wxMenu;
+  convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...");
+  convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "&FFT->Polar Image...");
   
+  wxMenu *reconstruct_menu = new wxMenu;
+  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...");
+  reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...");
+
   wxMenu *help_menu = new wxMenu;
   help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents");
   help_menu->AppendSeparator();
@@ -1771,9 +1806,10 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view)
   
   wxMenuBar *menu_bar = new wxMenuBar;
   
-  menu_bar->Append(file_menu, "&File");
-  menu_bar->Append(process_menu, "&Process");
-  menu_bar->Append(help_menu, "&Help");
+  menu_bar->Append (file_menu, "&File");
+  menu_bar->Append (convert_menu, "&Convert");
+  menu_bar->Append (reconstruct_menu, "&Reconstruct");
+  menu_bar->Append (help_menu, "&Help");
   
   subframe->SetMenuBar(menu_bar);
   
index e8a1f25379a737706b02348f37c48455a135739a..4463689350a0c146bef7d14e18f8881c4317a3dc 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: views.h,v 1.23 2001/01/02 13:57:30 kevin Exp $
+**  $Id: views.h,v 1.24 2001/01/03 22:00:46 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
 class ImageFileCanvas;
 class ImageFileView : public wxView
 {
-    DECLARE_DYNAMIC_CLASS(ImageFileView)
-
+  DECLARE_DYNAMIC_CLASS(ImageFileView)
+    
     wxMemoryDC m_memoryDC;
-    wxBitmap m_bitmap;
-
+  wxBitmap m_bitmap;
+  
 private:
-    ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
-    wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
-
-    ImageFileCanvas *m_canvas;
-    wxFrame *m_frame;
-    bool m_bMinSpecified;
-    bool m_bMaxSpecified;
-    double m_dMinPixel;
-    double m_dMaxPixel;
-    double m_dAutoScaleFactor;
-
-    int m_iDefaultExportFormatID;
-
+  ImageFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+  
+  ImageFileCanvas *m_canvas;
+  wxFrame *m_frame;
+  bool m_bMinSpecified;
+  bool m_bMaxSpecified;
+  double m_dMinPixel;
+  double m_dMaxPixel;
+  double m_dAutoScaleFactor;
+  
+  int m_iDefaultExportFormatID;
+  
 public:
-    ImageFileView(void);
-    virtual ~ImageFileView(void);
-
-    bool OnCreate(wxDocument *doc, long flags);
-    void OnDraw(wxDC* dc);
-    void OnUpdate(wxView *sender, wxObject *hint = NULL);
-    bool OnClose (bool deleteWindow = true);
-
-    void OnScaleSize (wxCommandEvent& event);
-    void OnExport (wxCommandEvent& event);
-
-    void OnProperties (wxCommandEvent& event);
-    void OnCompare (wxCommandEvent& event);
-
-    void OnInvertValues (wxCommandEvent& event);
-    void OnSquare (wxCommandEvent& event);
-    void OnSquareRoot (wxCommandEvent& event);
-    void OnLog (wxCommandEvent& event);
-    void OnExp (wxCommandEvent& event);
-    void OnAdd (wxCommandEvent& event);
-    void OnSubtract (wxCommandEvent& event);
-    void OnMultiply (wxCommandEvent& event);
-    void OnDivide (wxCommandEvent& event);
-    void OnFourier (wxCommandEvent& event);
-    void OnInverseFourier (wxCommandEvent& event);
-    void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
-    void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
-
+  ImageFileView(void);
+  virtual ~ImageFileView(void);
+  
+  bool OnCreate(wxDocument *doc, long flags);
+  void OnDraw(wxDC* dc);
+  void OnUpdate(wxView *sender, wxObject *hint = NULL);
+  bool OnClose (bool deleteWindow = true);
+  
+  void OnScaleSize (wxCommandEvent& event);
+  void OnExport (wxCommandEvent& event);
+  
+  void OnProperties (wxCommandEvent& event);
+  void OnCompare (wxCommandEvent& event);
+  
+  void OnInvertValues (wxCommandEvent& event);
+  void OnSquare (wxCommandEvent& event);
+  void OnSquareRoot (wxCommandEvent& event);
+  void OnLog (wxCommandEvent& event);
+  void OnExp (wxCommandEvent& event);
+  void OnAdd (wxCommandEvent& event);
+  void OnSubtract (wxCommandEvent& event);
+  void OnMultiply (wxCommandEvent& event);
+  void OnDivide (wxCommandEvent& event);
+  void OnFourier (wxCommandEvent& event);
+  void OnInverseFourier (wxCommandEvent& event);
+  void OnShuffleNaturalToFourierOrder (wxCommandEvent& event);
+  void OnShuffleFourierToNaturalOrder (wxCommandEvent& event);
+  
 #ifdef HAVE_FFTW
-    void OnFFT (wxCommandEvent& event);
-    void OnIFFT (wxCommandEvent& event);
+  void OnFFT (wxCommandEvent& event);
+  void OnIFFT (wxCommandEvent& event);
 #endif
-
-    void OnMagnitude (wxCommandEvent& event);
-    void OnPhase (wxCommandEvent& event);
-
-    void OnScaleAuto (wxCommandEvent& event);
-    void OnScaleMinMax (wxCommandEvent& event);
-         void OnPlotRow (wxCommandEvent& event);
-         void OnPlotCol (wxCommandEvent& event);
-    void OnPlotHistogram (wxCommandEvent& event);
-    void OnCompareRow (wxCommandEvent& event);
-    void OnCompareCol (wxCommandEvent& event);
-
-       wxFrame* getFrame()
-       { return m_frame; }
-
-    ImageFileDocument* GetDocument(void) 
-       { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
-
-    DECLARE_EVENT_TABLE()
+  
+  void OnMagnitude (wxCommandEvent& event);
+  void OnPhase (wxCommandEvent& event);
+  
+  void OnScaleAuto (wxCommandEvent& event);
+  void OnScaleMinMax (wxCommandEvent& event);
+  void OnPlotRow (wxCommandEvent& event);
+  void OnPlotCol (wxCommandEvent& event);
+  void OnPlotHistogram (wxCommandEvent& event);
+  void OnCompareRow (wxCommandEvent& event);
+  void OnCompareCol (wxCommandEvent& event);
+  
+  wxFrame* getFrame()
+  { return m_frame; }
+  
+  ImageFileDocument* GetDocument(void) 
+  { return dynamic_cast<ImageFileDocument*>(wxView::GetDocument()); }
+  
+  DECLARE_EVENT_TABLE()
 };
 
 class ImageFileCanvas: public wxScrolledWindow
 {
 private:
-
-       int m_xCursor;
-       int m_yCursor;
-
+  
+  int m_xCursor;
+  int m_yCursor;
+  
 public:
-    ImageFileView* m_pView;
-    
-    ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
-    virtual void OnDraw(wxDC& dc);
-    void OnMouseEvent(wxMouseEvent& event);
-       void DrawRubberBandCursor (wxDC& dc, int x, int y);
-       bool GetCurrentCursor (int& x, int& y);
-
-    DECLARE_EVENT_TABLE()
+  ImageFileView* m_pView;
+  
+  ImageFileCanvas (ImageFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+  virtual void OnDraw(wxDC& dc);
+  void OnMouseEvent(wxMouseEvent& event);
+  void DrawRubberBandCursor (wxDC& dc, int x, int y);
+  bool GetCurrentCursor (int& x, int& y);
+  
+  DECLARE_EVENT_TABLE()
 };
 
 
 class ProjectionFileCanvas;
 class ProjectionFileView : public wxView
 {
-    DECLARE_DYNAMIC_CLASS(ProjectionFileView)
-
+  DECLARE_DYNAMIC_CLASS(ProjectionFileView)
+    
     wxMemoryDC m_memoryDC;
-    wxBitmap m_bitmap;
-
+  wxBitmap m_bitmap;
+  
 private:
-    ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
-    wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
-
-    ProjectionFileCanvas *m_canvas;
-    wxFrame *m_frame;
-
-    int m_iDefaultNX;
-    int m_iDefaultNY;
-    int m_iDefaultFilter;
-    int m_iDefaultFilterMethod;
-    double m_dDefaultFilterParam;
-    int m_iDefaultFilterGeneration;
-    int m_iDefaultZeropad;
-    int m_iDefaultInterpolation;
-    int m_iDefaultInterpParam;
-    int m_iDefaultBackprojector;
-    int m_iDefaultTrace;
-
+  ProjectionFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+  
+  ProjectionFileCanvas *m_canvas;
+  wxFrame *m_frame;
+  
+  int m_iDefaultNX;
+  int m_iDefaultNY;
+  int m_iDefaultFilter;
+  int m_iDefaultFilterMethod;
+  double m_dDefaultFilterParam;
+  int m_iDefaultFilterGeneration;
+  int m_iDefaultZeropad;
+  int m_iDefaultInterpolation;
+  int m_iDefaultInterpParam;
+  int m_iDefaultBackprojector;
+  int m_iDefaultTrace;
+  
 public:
-    ProjectionFileView(void);
-    virtual ~ProjectionFileView(void);
-
-    bool OnCreate(wxDocument *doc, long flags);
-    void OnDraw(wxDC* dc);
-    void OnUpdate(wxView *sender, wxObject *hint = NULL);
-    bool OnClose (bool deleteWindow = true);
-    void OnProperties (wxCommandEvent& event);
-    void OnReconstruct (wxCommandEvent& event);
-
-       wxFrame* getFrame ()
-       { return m_frame; }
-
-    ProjectionFileDocument* GetDocument(void) 
-       { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
-    DECLARE_EVENT_TABLE()
+  ProjectionFileView(void);
+  virtual ~ProjectionFileView(void);
+  
+  bool OnCreate(wxDocument *doc, long flags);
+  void OnDraw(wxDC* dc);
+  void OnUpdate(wxView *sender, wxObject *hint = NULL);
+  bool OnClose (bool deleteWindow = true);
+  void OnProperties (wxCommandEvent& event);
+  void OnReconstructFBP (wxCommandEvent& event);
+  void OnReconstructFourier (wxCommandEvent& event);
+  void OnConvertPolar (wxCommandEvent& event);
+  void OnConvertFFTPolar (wxCommandEvent& event);
+  
+  wxFrame* getFrame ()
+  { return m_frame; }
+  
+  ProjectionFileDocument* GetDocument(void) 
+  { return dynamic_cast<ProjectionFileDocument*>(wxView::GetDocument()); }
+  DECLARE_EVENT_TABLE()
 };
 
 class ProjectionFileCanvas: public wxScrolledWindow
 {
 public:
-    ProjectionFileView* m_pView;
-    
-    ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
-    virtual void OnDraw(wxDC& dc);
+  ProjectionFileView* m_pView;
+  
+  ProjectionFileCanvas (ProjectionFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+  virtual void OnDraw(wxDC& dc);
 };
 
 
 class PhantomCanvas;
 class PhantomView : public wxView
 {
-    DECLARE_DYNAMIC_CLASS(PhantomView)
-
+  DECLARE_DYNAMIC_CLASS(PhantomView)
+    
 private:
-    PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
-    wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
-
-    PhantomCanvas *m_canvas;
-    wxFrame *m_frame;
-
-    int m_iDefaultNDet;
-    int m_iDefaultNView;
-    int m_iDefaultNSample;
-    int m_iDefaultGeometry;
-    int m_iDefaultTrace;
-    double m_dDefaultRotation;
-    double m_dDefaultFocalLength;
-    double m_dDefaultFieldOfView;
-
+  PhantomCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+  
+  PhantomCanvas *m_canvas;
+  wxFrame *m_frame;
+  
+  int m_iDefaultNDet;
+  int m_iDefaultNView;
+  int m_iDefaultNSample;
+  int m_iDefaultGeometry;
+  int m_iDefaultTrace;
+  double m_dDefaultRotation;
+  double m_dDefaultFocalLength;
+  double m_dDefaultFieldOfView;
+  
 public:
-    PhantomView(void);
-    virtual ~PhantomView(void);
-
-    bool OnCreate(wxDocument *doc, long flags);
-    void OnUpdate(wxView *sender, wxObject *hint = NULL);
-    bool OnClose (bool deleteWindow = true);
-    void OnDraw(wxDC* dc);
-    void OnProperties (wxCommandEvent& event);
-    void OnRasterize (wxCommandEvent& event);
-    void OnProjections (wxCommandEvent& event);
-
-    PhantomDocument* GetDocument(void) 
-       { return dynamic_cast<PhantomDocument*>(wxView::GetDocument()); }
-
-    DECLARE_EVENT_TABLE()
+  PhantomView(void);
+  virtual ~PhantomView(void);
+  
+  bool OnCreate(wxDocument *doc, long flags);
+  void OnUpdate(wxView *sender, wxObject *hint = NULL);
+  bool OnClose (bool deleteWindow = true);
+  void OnDraw(wxDC* dc);
+  void OnProperties (wxCommandEvent& event);
+  void OnRasterize (wxCommandEvent& event);
+  void OnProjections (wxCommandEvent& event);
+  
+  PhantomDocument* GetDocument(void) 
+  { return dynamic_cast<PhantomDocument*>(wxView::GetDocument()); }
+  
+  DECLARE_EVENT_TABLE()
 };
 
 class PhantomCanvas: public wxScrolledWindow
 {
 public:
-    PhantomView* m_pView;
-    
-    PhantomCanvas (PhantomView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
-    virtual void OnDraw(wxDC& dc);
+  PhantomView* m_pView;
+  
+  PhantomCanvas (PhantomView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+  virtual void OnDraw(wxDC& dc);
 };
 
 class PlotFileCanvas;
 class PlotFileView : public wxView
 {
-    DECLARE_DYNAMIC_CLASS(PlotFileView)
-
+  DECLARE_DYNAMIC_CLASS(PlotFileView)
+    
 private:
-    PlotFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
-    wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
-
-    PlotFileCanvas *m_canvas;
-    wxFrame *m_frame;
-    EZPlot* m_pEZPlot;
-
-    bool m_bMinSpecified;
-    bool m_bMaxSpecified;
-    double m_dMinPixel;
-    double m_dMaxPixel;
-    double m_dAutoScaleFactor;
-
+  PlotFileCanvas *CreateCanvas(wxView *view, wxFrame *parent);
+  wxFrame *CreateChildFrame(wxDocument *doc, wxView *view);
+  
+  PlotFileCanvas *m_canvas;
+  wxFrame *m_frame;
+  EZPlot* m_pEZPlot;
+  
+  bool m_bMinSpecified;
+  bool m_bMaxSpecified;
+  double m_dMinPixel;
+  double m_dMaxPixel;
+  double m_dAutoScaleFactor;
+  
 public:
-    PlotFileView(void);
-    virtual ~PlotFileView(void);
-
-    bool OnCreate(wxDocument *doc, long flags);
-    void OnDraw(wxDC* dc);
-    void OnUpdate(wxView *sender, wxObject *hint = NULL);
-    bool OnClose (bool deleteWindow = true);
-    void OnProperties (wxCommandEvent& event);
-    void OnScaleAuto (wxCommandEvent& event);
-    void OnScaleMinMax (wxCommandEvent& event);
-
-       wxFrame* getFrame ()
-       { return m_frame; }
-
-    PlotFileDocument* GetDocument(void) 
-       { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
-
-    DECLARE_EVENT_TABLE()
+  PlotFileView(void);
+  virtual ~PlotFileView(void);
+  
+  bool OnCreate(wxDocument *doc, long flags);
+  void OnDraw(wxDC* dc);
+  void OnUpdate(wxView *sender, wxObject *hint = NULL);
+  bool OnClose (bool deleteWindow = true);
+  void OnProperties (wxCommandEvent& event);
+  void OnScaleAuto (wxCommandEvent& event);
+  void OnScaleMinMax (wxCommandEvent& event);
+  
+  wxFrame* getFrame ()
+  { return m_frame; }
+  
+  PlotFileDocument* GetDocument(void) 
+  { return dynamic_cast<PlotFileDocument*>(wxView::GetDocument()); }
+  
+  DECLARE_EVENT_TABLE()
 };
 
 class PlotFileCanvas: public wxScrolledWindow
 {
 public:
-    PlotFileView* m_pView;
-    
-    PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
-    virtual void OnDraw(wxDC& dc);
+  PlotFileView* m_pView;
+  
+  PlotFileCanvas (PlotFileView* v, wxFrame *frame, const wxPoint& pos, const wxSize& size, const long style);
+  virtual void OnDraw(wxDC& dc);
 };