X-Git-Url: http://git.kpe.io/?a=blobdiff_plain;f=src%2Fviews.cpp;h=6f55604e11f4c69ee725b19455e897d1c148c66a;hb=b361677a2f7d5b443641faec70b057f2a84dc77e;hp=54a12b8d764ea05f6d96d71015de8215fe3283cb;hpb=276e2f99dbf1ecea92bd7d3d6bb9c9c8035677f3;p=ctsim.git diff --git a/src/views.cpp b/src/views.cpp index 54a12b8..6f55604 100644 --- a/src/views.cpp +++ b/src/views.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: views.cpp,v 1.129 2001/03/07 22:30:16 kevin Exp $ +** $Id: views.cpp,v 1.130 2001/03/10 23:14:16 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 @@ -2277,6 +2277,7 @@ EVT_MENU(PJMENU_RECONSTRUCT_FBP, ProjectionFileView::OnReconstructFBP) EVT_MENU(PJMENU_RECONSTRUCT_FOURIER, ProjectionFileView::OnReconstructFourier) EVT_MENU(PJMENU_CONVERT_POLAR, ProjectionFileView::OnConvertPolar) EVT_MENU(PJMENU_CONVERT_FFT_POLAR, ProjectionFileView::OnConvertFFTPolar) +EVT_MENU(PJMENU_PLOT_TTHETA_SAMPLING, ProjectionFileView::OnPlotTThetaSampling) END_EVENT_TABLE() ProjectionFileView::ProjectionFileView() @@ -2342,11 +2343,14 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event) ImageFileDocument* pPolarDoc = theApp->newImageDoc(); ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY); m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str()); - if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) { + + if (! rProj.convertPolar (*pIF, m_iDefaultPolarInterpolation)) { delete pIF; *theApp->getLog() << "Error converting to Polar\n"; return; } + + pPolarDoc = theApp->newImageDoc (); if (! pPolarDoc) { sys_error (ERR_SEVERE, "Unable to create image file"); @@ -2408,6 +2412,43 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event) } } +void +ProjectionFileView::OnPlotTThetaSampling (wxCommandEvent& event) +{ + Projections& rProj = GetDocument()->getProjections(); + ParallelRaysums parallel (&rProj); + PlotFileDocument* pPlotDoc = theApp->newPlotDoc(); + PlotFile& rPlot = pPlotDoc->getPlotFile(); + ParallelRaysumCoordinate** ppCoord = parallel.getCoordinates(); + double* pdT = new double [parallel.getNumCoordinates()]; + double* pdTheta = new double [parallel.getNumCoordinates()]; + for (int i = 0; i < parallel.getNumCoordinates(); i++) { + pdT[i] = (*ppCoord)->m_dT; + pdTheta[i] = (*ppCoord)->m_dTheta; + ++ppCoord; + } + rPlot.setCurveSize (2, parallel.getNumCoordinates(), true); + rPlot.addEzsetCommand ("title T-Theta Sampling"); + rPlot.addEzsetCommand ("xlabel T"); + rPlot.addEzsetCommand ("ylabel Theta"); + rPlot.addEzsetCommand ("curve 1"); + if (rProj.nDet() < 50 && rProj.nView() < 50) + rPlot.addEzsetCommand ("symbol 1"); // x symbol + else + rPlot.addEzsetCommand ("symbol 6"); // point symbol + rPlot.addEzsetCommand ("noline"); + rPlot.addColumn (0, pdT); + rPlot.addColumn (1, pdTheta); + delete pdT; + delete pdTheta; + if (theApp->getAskDeleteNewDocs()) + pPlotDoc->Modify (true); + pPlotDoc->UpdateAllViews (); + pPlotDoc->getView()->OnUpdate (this, NULL); + pPlotDoc->getView()->getFrame()->Show(true); + return; +} + void ProjectionFileView::OnReconstructFourier (wxCommandEvent& event) { @@ -2590,7 +2631,10 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) wxMenu *convert_menu = new wxMenu; convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L"); convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "&FFT->Polar Image...\tCtrl-M"); - + + wxMenu* analyze_menu = new wxMenu; + analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, "&Plot T-Theta Sampling\tCtrl-T"); + wxMenu *reconstruct_menu = new wxMenu; reconstruct_menu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection"); reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E", "Reconstruct image using inverse Fourier"); @@ -2606,19 +2650,21 @@ ProjectionFileView::CreateChildFrame(wxDocument *doc, wxView *view) menu_bar->Append (m_pFileMenu, "&File"); menu_bar->Append (convert_menu, "&Convert"); + menu_bar->Append (analyze_menu, "&Analyze"); menu_bar->Append (reconstruct_menu, "&Reconstruct"); menu_bar->Append (help_menu, "&Help"); subframe->SetMenuBar(menu_bar); subframe->Centre(wxBOTH); - wxAcceleratorEntry accelEntries[5]; + wxAcceleratorEntry accelEntries[6]; accelEntries[0].Set (wxACCEL_CTRL, static_cast('L'), PJMENU_CONVERT_POLAR); accelEntries[1].Set (wxACCEL_CTRL, static_cast('M'), PJMENU_CONVERT_FFT_POLAR); accelEntries[2].Set (wxACCEL_CTRL, static_cast('R'), PJMENU_RECONSTRUCT_FBP); accelEntries[3].Set (wxACCEL_CTRL, static_cast('E'), PJMENU_RECONSTRUCT_FOURIER); accelEntries[4].Set (wxACCEL_CTRL, static_cast('I'), PJMENU_FILE_PROPERTIES); - wxAcceleratorTable accelTable (5, accelEntries); + accelEntries[5].Set (wxACCEL_CTRL, static_cast('T'), PJMENU_PLOT_TTHETA_SAMPLING); + wxAcceleratorTable accelTable (6, accelEntries); subframe->SetAcceleratorTable (accelTable); return subframe; @@ -3002,7 +3048,8 @@ PlotFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) ) const PlotFile& rPlotFile = GetDocument()->getPlotFile(); const int iNColumns = rPlotFile.getNumColumns(); const int iNRecords = rPlotFile.getNumRecords(); - + const bool bScatterPlot = rPlotFile.getIsScatterPlot(); + if (iNColumns > 0 && iNRecords > 0) { if (m_pEZPlot) delete m_pEZPlot; @@ -3025,17 +3072,22 @@ PlotFileView::OnUpdate (wxView *WXUNUSED(sender), wxObject *WXUNUSED(hint) ) m_pEZPlot->ezset("box"); m_pEZPlot->ezset("grid"); - - double* pdXaxis = new double [iNRecords]; - rPlotFile.getColumn (0, pdXaxis); - + + double* pdX = new double [iNRecords]; double* pdY = new double [iNRecords]; - for (int iCol = 1; iCol < iNColumns; iCol++) { - rPlotFile.getColumn (iCol, pdY); - m_pEZPlot->addCurve (pdXaxis, pdY, iNRecords); - } + if (! bScatterPlot) { + rPlotFile.getColumn (0, pdX); - delete pdXaxis; + for (int iCol = 1; iCol < iNColumns; iCol++) { + rPlotFile.getColumn (iCol, pdY); + m_pEZPlot->addCurve (pdX, pdY, iNRecords); + } + } else { + rPlotFile.getColumn (0, pdX); + rPlotFile.getColumn (1, pdY); + m_pEZPlot->addCurve (pdX, pdY, iNRecords); + } + delete pdX; delete pdY; }