** This is part of the CTSim program
** Copyright (c) 1983-2001 Kevin Rosenberg
**
-** $Id: views.cpp,v 1.164 2003/01/24 05:24:19 kevin Exp $
+** $Id$
**
** 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
m_dMinPixel = dMin;
m_dMaxPixel = dMax;
m_dAutoScaleFactor = dialogAutoScale.getAutoScaleFactor();
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
}
m_bMaxSpecified = true;
m_dMinPixel = dialogMinMax.getMinimum();
m_dMaxPixel = dialogMinMax.getMaximum();
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
GetDocument()->Activate();
if (m_bMinSpecified || m_bMaxSpecified) {
m_bMinSpecified = false;
m_bMaxSpecified = false;
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
GetDocument()->Activate();
pDifferenceImage->labelAdd (os.str().c_str());
if (theApp->getAskDeleteNewDocs())
pDifferenceDoc->Modify (true);
+ OnUpdate(this, NULL);
pDifferenceDoc->UpdateAllViews(this);
pDifferenceDoc->getView()->setInitialClientSize();
pDifferenceDoc->Activate();
rIF.labelAdd ("Invert Pixel Values");
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
rIF.labelAdd ("Square Pixel Values");
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
rIF.labelAdd ("Square-root Pixel Values");
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
rIF.labelAdd ("Logrithm base-e Pixel Values");
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
rIF.labelAdd ("Exponent base-e Pixel Values");
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
pNewDoc->Modify (true);
+ OnUpdate(this, NULL);
pNewDoc->UpdateAllViews (this);
pNewDoc->getView()->setInitialClientSize();
pNewDoc->Activate();
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
pNewDoc->Modify (true);
+ OnUpdate(this, NULL);
pNewDoc->UpdateAllViews (this);
pNewDoc->getView()->setInitialClientSize();
pNewDoc->Activate();
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
pNewDoc->Modify (true);
+ OnUpdate(this, NULL);
pNewDoc->UpdateAllViews (this);
pNewDoc->getView()->setInitialClientSize();
pNewDoc->Activate();
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
pNewDoc->Modify (true);
+ OnUpdate(this, NULL);
pNewDoc->UpdateAllViews (this);
pNewDoc->getView()->setInitialClientSize();
pNewDoc->Activate();
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
GetDocument()->Activate();
}
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
GetDocument()->Activate();
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
GetDocument()->Activate();
m_bMaxSpecified = false;
if (theApp->getAskDeleteNewDocs())
GetDocument()->Modify (true);
+ OnUpdate(this, NULL);
GetDocument()->UpdateAllViews (this);
}
GetDocument()->Activate();
void
ImageFileView::OnDraw (wxDC* dc)
{
- if (m_pBitmap && m_pBitmap->Ok())
+ if (m_pBitmap && m_pBitmap->Ok()) {
+#ifdef DEBUG
+ *theApp->getLog() << "Drawing bitmap\n";
+#endif
dc->DrawBitmap(*m_pBitmap, 0, 0, false);
+ }
int xCursor, yCursor;
if (m_pCanvas->GetCurrentCursor (xCursor, yCursor))
}
}
wxImage image (nx, ny, imageData, true);
- if (m_pBitmap)
+ if (m_pBitmap) {
delete m_pBitmap;
+ m_pBitmap = NULL;
+ }
+#ifdef DEBUG
+ *theApp->getLog() << "Making new bitmap\n";
+#endif
m_pBitmap = new wxBitmap (image);
delete imageData;
m_pCanvas->SetScrollbars(20, 20, nx/20, ny/20);
*theApp->getLog() << os.str().c_str() << "\n";
if (theApp->getAskDeleteNewDocs())
pScaledDoc->Modify (true);
+ OnUpdate(this, NULL);
pScaledDoc->UpdateAllViews (this);
pScaledDoc->getView()->setInitialClientSize();
pScaledDoc->Activate();
pProjectionDoc->setProjections (pProj);
if (theApp->getAskDeleteNewDocs())
pProjectionDoc-> Modify(true);
+ OnUpdate(this, NULL);
pProjectionDoc->UpdateAllViews (this);
pProjectionDoc->getView()->setInitialClientSize();
pProjectionDoc->Activate();
m_iDefaultFilterMethod = ProcessSignal::FILTER_METHOD_CONVOLUTION;
m_iDefaultFilterGeneration = ProcessSignal::FILTER_GENERATION_DIRECT;
#endif
- m_iDefaultZeropad = 1;
+ m_iDefaultZeropad = 2;
m_iDefaultBackprojector = Backprojector::BPROJ_IDIFF;
m_iDefaultInterpolation = Backprojector::INTERP_LINEAR;
m_iDefaultInterpParam = 1;
m_iDefaultPolarNX = 256;
m_iDefaultPolarNY = 256;
m_iDefaultPolarInterpolation = Projections::POLAR_INTERP_BILINEAR;
- m_iDefaultPolarZeropad = 1;
+ m_iDefaultPolarZeropad = 2;
}
ProjectionFileView::~ProjectionFileView()
wxString strInterpolation (dialogPolar.getInterpolationName());
m_iDefaultPolarNX = dialogPolar.getXSize();
m_iDefaultPolarNY = dialogPolar.getYSize();
- ImageFileDocument* pPolarDoc = theApp->newImageDoc();
ImageFile* pIF = new ImageFile (m_iDefaultPolarNX, m_iDefaultPolarNY);
m_iDefaultPolarInterpolation = Projections::convertInterpNameToID (strInterpolation.c_str());
return;
}
- pPolarDoc = theApp->newImageDoc ();
+ ImageFileDocument* pPolarDoc = theApp->newImageDoc();
if (! pPolarDoc) {
sys_error (ERR_SEVERE, "Unable to create image file");
return;
GetDocumentManager()->FileHistoryAddFilesToMenu(m_pFileMenu);
GetDocumentManager()->FileHistoryUseMenu(m_pFileMenu);
- wxMenu *convert_menu = new wxMenu;
- convert_menu->Append (PJMENU_CONVERT_RECTANGULAR, "&Rectangular Image");
- convert_menu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
- convert_menu->Append (PJMENU_CONVERT_FFT_POLAR, "FF&T->Polar Image...\tCtrl-T");
- convert_menu->AppendSeparator();
- convert_menu->Append (PJMENU_CONVERT_PARALLEL, "&Interpolate to Parallel");
+ m_pConvertMenu = new wxMenu;
+ m_pConvertMenu->Append (PJMENU_CONVERT_RECTANGULAR, "&Rectangular Image");
+ m_pConvertMenu->Append (PJMENU_CONVERT_POLAR, "&Polar Image...\tCtrl-L");
+ m_pConvertMenu->Append (PJMENU_CONVERT_FFT_POLAR, "FF&T->Polar Image...\tCtrl-T");
+ m_pConvertMenu->AppendSeparator();
+ m_pConvertMenu->Append (PJMENU_CONVERT_PARALLEL, "&Interpolate to Parallel");
// wxMenu* filter_menu = new wxMenu;
// filter_menu->Append (PJMENU_ARTIFACT_REDUCTION, "&Artifact Reduction");
analyze_menu->Append (PJMENU_PLOT_HISTOGRAM, "&Plot Histogram");
analyze_menu->Append (PJMENU_PLOT_TTHETA_SAMPLING, "Plot T-T&heta Sampling...\tCtrl-H");
- 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_FBP_REBIN, "Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B", "Reconstruct image using filtered backprojection");
- // still buggy
- // reconstruct_menu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Fourier...\tCtrl-E", "Reconstruct image using inverse Fourier");
+ m_pReconstructMenu = new wxMenu;
+ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP, "&Filtered Backprojection...\tCtrl-R", "Reconstruct image using filtered backprojection");
+ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FBP_REBIN, "Filtered &Backprojection (Rebin to Parallel)...\tCtrl-B", "Reconstruct image using filtered backprojection");
+ m_pReconstructMenu->Append (PJMENU_RECONSTRUCT_FOURIER, "&Inverse Fourier...\tCtrl-E", "Direct inverse Fourier");
wxMenu *help_menu = new wxMenu;
help_menu->Append(MAINMENU_HELP_CONTENTS, "&Contents\tF1");
wxMenuBar *menu_bar = new wxMenuBar;
menu_bar->Append (m_pFileMenu, "&File");
- menu_bar->Append (convert_menu, "&Convert");
+ menu_bar->Append (m_pConvertMenu, "&Convert");
// menu_bar->Append (filter_menu, "Fi<er");
menu_bar->Append (analyze_menu, "&Analyze");
- menu_bar->Append (reconstruct_menu, "&Reconstruct");
+ menu_bar->Append (m_pReconstructMenu, "&Reconstruct");
menu_bar->Append (help_menu, "&Help");
subframe->SetMenuBar(menu_bar);
const Projections& rProj = GetDocument()->getProjections();
const int nDet = rProj.nDet();
const int nView = rProj.nView();
+ if (rProj.geometry() == Scanner::GEOMETRY_PARALLEL) {
+ m_pReconstructMenu->Enable (PJMENU_RECONSTRUCT_FBP_REBIN, false);
+ m_pConvertMenu->Enable (PJMENU_CONVERT_PARALLEL, false);
+ } else {
+ m_pReconstructMenu->Enable (PJMENU_RECONSTRUCT_FBP_REBIN, true);
+ m_pConvertMenu->Enable (PJMENU_CONVERT_PARALLEL, true);
+ }
+
if (nDet != 0 && nView != 0) {
const DetectorArray& detarray = rProj.getDetectorArray(0);
const DetectorValue* detval = detarray.detValues();
}
}
wxImage image (nDet, nView, imageData, true);
- if (m_pBitmap)
+ if (m_pBitmap) {
delete m_pBitmap;
+ m_pBitmap = NULL;
+ }
m_pBitmap = new wxBitmap (image);
delete imageData;
}