1 /*****************************************************************************
5 ** Purpose: Dialog routines for CTSim program
6 ** Programmer: Kevin Rosenberg
7 ** Date Started: July 2000
9 ** This is part of the CTSim program
10 ** Copyright (C) 1983-2000 Kevin Rosenberg
12 ** $Id: dialogs.cpp,v 1.19 2000/12/21 03:40:58 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 ******************************************************************************/
29 // #pragma implementation
32 // For compilers that support precompilation, includes "wx/wx.h".
33 #include "wx/wxprec.h"
43 #if !wxUSE_DOC_VIEW_ARCHITECTURE
44 #error You must set wxUSE_DOC_VIEW_ARCHITECTURE to 1 in setup.h!
47 #include "wx/statline.h"
50 #include "ctsupport.h"
55 #include "backprojectors.h"
57 #if defined(MSVC) || HAVE_SSTREAM
\r
60 #include <sstream_subst>
\r
64 ///////////////////////////////////////////////////////////////////////
\r
65 // CLASS IMPLEMENTATION
\r
66 // StringValueAndTitleListBox
\r
67 ///////////////////////////////////////////////////////////////////////
\r
69 StringValueAndTitleListBox::StringValueAndTitleListBox (wxDialog* pParent, int nChoices, const char* aszTitle[], const char* aszValue[])
72 wxString* psTitle = new wxString [nChoices];
73 for (int i = 0; i < nChoices; i++)
74 psTitle[i] = aszTitle[i];
76 Create (pParent, -1, wxDefaultPosition, wxSize(200,-1), nChoices, psTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
78 m_ppszValues = aszValue;
\r
83 StringValueAndTitleListBox::getSelectionStringValue (void) const
85 return m_ppszValues[GetSelection()];
89 ///////////////////////////////////////////////////////////////////////
\r
90 // CLASS IMPLEMENTATION
\r
92 ///////////////////////////////////////////////////////////////////////
\r
94 DialogGetPhantom::DialogGetPhantom (wxFrame* pParent, int iDefaultPhantom)
95 : wxDialog (pParent, -1, "Select Phantom", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
97 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
99 pTopSizer->Add (new wxStaticText (this, -1, "Select Phantom"), 0, wxALIGN_CENTER | wxALL, 5);
101 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxALL, 5);
103 m_pListBoxPhantom = new StringValueAndTitleListBox (this, Phantom::getPhantomCount(), Phantom::getPhantomTitleArray(), Phantom::getPhantomNameArray());
104 m_pListBoxPhantom->SetSelection (iDefaultPhantom);
105 pTopSizer->Add (m_pListBoxPhantom, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
107 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
109 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
110 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
111 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
112 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
113 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
115 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
117 SetAutoLayout (true);
118 SetSizer (pTopSizer);
119 pTopSizer->Fit (this);
120 pTopSizer->SetSizeHints (this);
124 DialogGetPhantom::getPhantom(void)
126 return m_pListBoxPhantom->getSelectionStringValue();
130 /////////////////////////////////////////////////////////////////////
\r
131 // CLASS DiaglogGetMinMax Implementation
\r
132 /////////////////////////////////////////////////////////////////////
\r
134 DialogGetMinMax::DialogGetMinMax (wxFrame* pParent, const char* const pszTitle, double dDefaultMin, double dDefaultMax)
135 : wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
137 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
139 pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
141 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
143 std::ostringstream os;
145 m_pTextCtrlMin = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
146 std::ostringstream osMax;
147 osMax << dDefaultMax;
148 m_pTextCtrlMax = new wxTextCtrl (this, -1, osMax.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
150 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
151 pGridSizer->Add (new wxStaticText (this, -1, "Minimum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
152 pGridSizer->Add (m_pTextCtrlMin, 0, wxALIGN_CENTER_VERTICAL);
153 pGridSizer->Add (new wxStaticText (this, -1, "Maximum"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
154 pGridSizer->Add (m_pTextCtrlMax, 0, wxALIGN_CENTER_VERTICAL);
155 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
157 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
159 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
160 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
161 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
162 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
163 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
165 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
167 SetAutoLayout (true);
168 SetSizer (pTopSizer);
169 pTopSizer->Fit (this);
170 pTopSizer->SetSizeHints (this);
173 DialogGetMinMax::~DialogGetMinMax (void)
178 DialogGetMinMax::getMinimum (void)
180 wxString strCtrl = m_pTextCtrlMin->GetValue();
182 if (strCtrl.ToDouble (&dValue))
185 return (m_dDefaultMin);
189 DialogGetMinMax::getMaximum (void)
191 wxString strCtrl = m_pTextCtrlMax->GetValue();
193 if (strCtrl.ToDouble (&dValue))
196 return (m_dDefaultMax);
200 /////////////////////////////////////////////////////////////////////
\r
201 // CLASS DialogAutoScaleParameters IMPLEMENTATION
\r
202 /////////////////////////////////////////////////////////////////////
\r
204 DialogAutoScaleParameters::DialogAutoScaleParameters (wxFrame *pParent, double mean, double mode, double median, double stddev, double dDefaultScaleFactor)
\r
205 : wxDialog (pParent, -1, "Auto Scale Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION), m_dMean(mean), m_dMode(mode), m_dMedian(median), m_dStdDev(stddev)
\r
207 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
\r
209 pTopSizer->Add (new wxStaticText (this, -1, "Auto Scale Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
\r
211 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
\r
213 wxString asTitle[3];
\r
214 asTitle[0] = "Median";
\r
215 asTitle[1] = "Mode";
\r
216 asTitle[2] = "Mean";
\r
218 m_pListBoxCenter = new wxListBox (this, -1, wxDefaultPosition, wxDefaultSize, 3, asTitle, wxLB_SINGLE | wxLB_NEEDED_SB);
\r
219 m_pListBoxCenter->SetSelection (0);
\r
220 pTopSizer->Add (m_pListBoxCenter, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
\r
222 wxGridSizer *pGridSizer = new wxGridSizer (2);
\r
223 pGridSizer->Add (new wxStaticText (this, -1, "Standard Deviation Factor"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
\r
224 std::ostringstream osDefaultFactor;
\r
225 osDefaultFactor << dDefaultScaleFactor;
\r
226 m_pTextCtrlStdDevFactor = new wxTextCtrl (this, -1, osDefaultFactor.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
\r
227 pGridSizer->Add (m_pTextCtrlStdDevFactor, 0, wxALIGN_CENTER_VERTICAL);
\r
228 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
\r
230 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
\r
232 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
\r
233 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
\r
234 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
\r
235 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
\r
236 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
\r
238 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
\r
240 SetAutoLayout (true);
\r
241 SetSizer (pTopSizer);
\r
242 pTopSizer->Fit (this);
\r
243 pTopSizer->SetSizeHints (this);
\r
247 DialogAutoScaleParameters::getMinMax (double* pMin, double* pMax)
\r
249 int iCenter = m_pListBoxCenter->GetSelection();
\r
250 double dCenter = m_dMedian;
\r
253 else if (iCenter == 2)
\r
256 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
\r
258 if (! sStddevFactor.ToDouble (&dValue)) {
\r
259 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
\r
262 double dHalfWidth = dValue * m_dStdDev / 2;
\r
263 *pMin = dCenter - dHalfWidth;
\r
264 *pMax = dCenter + dHalfWidth;
\r
265 *theApp->getLog() << "Setting minimum to " << *pMin << " and maximum to " << *pMax << "\n";
\r
271 DialogAutoScaleParameters::getAutoScaleFactor ()
\r
273 wxString sStddevFactor = m_pTextCtrlStdDevFactor->GetValue();
\r
274 double dValue = 1.;
\r
275 if (! sStddevFactor.ToDouble (&dValue)) {
\r
276 *theApp->getLog() << "Error: Non-numeric Standard Deviation Factor of " << sStddevFactor << "\n";
\r
283 /////////////////////////////////////////////////////////////////////
284 // CLASS IDENTIFICATION
286 // DialogGetRasterParameters
287 /////////////////////////////////////////////////////////////////////
289 DialogGetRasterParameters::DialogGetRasterParameters (wxFrame* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultNSamples)
290 : wxDialog (pParent, -1, "Set Rasterization Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
292 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
294 pTopSizer->Add (new wxStaticText (this, -1, "Set Rasterization Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
296 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
298 std::ostringstream os;
300 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
301 std::ostringstream osYSize;
302 osYSize << iDefaultYSize;
303 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
304 std::ostringstream osNSamples;
305 osNSamples << iDefaultNSamples;
306 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
308 wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
309 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
310 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_CENTER_VERTICAL);
311 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
312 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_CENTER_VERTICAL);
313 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Pixel"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
314 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
315 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
317 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
319 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
320 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
321 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
322 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
323 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
325 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
327 SetAutoLayout (true);
328 SetSizer (pTopSizer);
329 pTopSizer->Fit (this);
330 pTopSizer->SetSizeHints (this);
333 DialogGetRasterParameters::~DialogGetRasterParameters (void)
339 DialogGetRasterParameters::getXSize (void)
341 wxString strCtrl = m_pTextCtrlXSize->GetValue();
342 unsigned long lValue;
343 if (strCtrl.ToULong (&lValue))
346 return (m_iDefaultXSize);
350 DialogGetRasterParameters::getYSize (void)
352 wxString strCtrl = m_pTextCtrlYSize->GetValue();
353 unsigned long lValue;
354 if (strCtrl.ToULong (&lValue))
357 return (m_iDefaultYSize);
362 DialogGetRasterParameters::getNSamples (void)
364 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
365 unsigned long lValue;
366 if (strCtrl.ToULong (&lValue))
369 return (m_iDefaultNSamples);
374 /////////////////////////////////////////////////////////////////////
375 // CLASS IDENTIFICATION
377 // DialogGetProjectionParameters
378 /////////////////////////////////////////////////////////////////////
381 DialogGetProjectionParameters::DialogGetProjectionParameters (wxFrame* pParent, int iDefaultNDet, int iDefaultNView, int iDefaultNSamples, double dDefaultRotAngle, double dDefaultFocalLength, double dDefaultFieldOfView, int iDefaultGeometry, int iDefaultTrace)
382 : wxDialog (pParent, -1, "Set Projection Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
384 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
386 m_dDefaultRotAngle = dDefaultRotAngle;
387 m_dDefaultFocalLength = dDefaultFocalLength;
388 m_dDefaultFieldOfView = dDefaultFieldOfView;
389 m_iDefaultNSamples = iDefaultNSamples;
390 m_iDefaultNView = iDefaultNView;
391 m_iDefaultNDet = iDefaultNDet;
392 m_iDefaultTrace = iDefaultTrace;
393 m_iDefaultGeometry = iDefaultGeometry;
395 pTopSizer->Add (new wxStaticText (this, -1, "Set Projection Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
397 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
399 std::ostringstream os;
401 m_pTextCtrlNDet = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
402 std::ostringstream osNView;
403 osNView << iDefaultNView;
404 m_pTextCtrlNView = new wxTextCtrl (this, -1, osNView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
405 std::ostringstream osNSamples;
406 osNSamples << iDefaultNSamples;
407 m_pTextCtrlNSamples = new wxTextCtrl (this, -1, osNSamples.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
408 std::ostringstream osRotAngle;
409 osRotAngle << dDefaultRotAngle;
410 m_pTextCtrlRotAngle = new wxTextCtrl (this, -1, osRotAngle.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
411 std::ostringstream osFocalLength;
412 osFocalLength << dDefaultFocalLength;
413 m_pTextCtrlFocalLength = new wxTextCtrl (this, -1, osFocalLength.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
414 std::ostringstream osFieldOfView;
415 osFieldOfView << dDefaultFieldOfView;
416 m_pTextCtrlFieldOfView = new wxTextCtrl (this, -1, osFieldOfView.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
418 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (2);
419 pGridSizer->Add (new wxStaticText (this, -1, "Scanner Geometry"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
420 m_pListBoxGeometry = new StringValueAndTitleListBox (this, Scanner::getGeometryCount(), Scanner::getGeometryTitleArray(), Scanner::getGeometryNameArray());
421 m_pListBoxGeometry->SetSelection (iDefaultGeometry);
423 pGridSizer->Add (m_pListBoxGeometry, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
425 pGridSizer->Add (new wxStaticText (this, -1, "Detectors"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
426 pGridSizer->Add (m_pTextCtrlNDet, 0, wxALIGN_CENTER_VERTICAL);
427 pGridSizer->Add (new wxStaticText (this, -1, "Views"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
428 pGridSizer->Add (m_pTextCtrlNView, 0, wxALIGN_CENTER_VERTICAL);
429 pGridSizer->Add (new wxStaticText (this, -1, "Samples per Detector"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
430 pGridSizer->Add (m_pTextCtrlNSamples, 0, wxALIGN_CENTER_VERTICAL);
431 pGridSizer->Add (new wxStaticText (this, -1, "Rotation Angle (PI units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
432 pGridSizer->Add (m_pTextCtrlRotAngle, 0, wxALIGN_CENTER_VERTICAL);
433 pGridSizer->Add (new wxStaticText (this, -1, "Focal Length Ratio (phantom radius units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
434 pGridSizer->Add (m_pTextCtrlFocalLength, 0, wxALIGN_CENTER_VERTICAL);
435 pGridSizer->Add (new wxStaticText (this, -1, "Field of View (phantom diameter units)"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
436 pGridSizer->Add (m_pTextCtrlFieldOfView, 0, wxALIGN_CENTER_VERTICAL);
438 m_pListBoxTrace = new StringValueAndTitleListBox (this, Trace::getTraceCount(), Trace::getTraceTitleArray(), Trace::getTraceNameArray());
439 m_pListBoxTrace->SetSelection (iDefaultTrace);
441 pGridSizer->Add (new wxStaticText (this, -1, "Trace Level"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
442 pGridSizer->Add (m_pListBoxTrace, 0, wxALL | wxALIGN_CENTER | wxEXPAND);
443 pTopSizer->Add (pGridSizer, 1, wxALL, 10);
445 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
447 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
448 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
449 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
450 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
451 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
453 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
455 SetAutoLayout (true);
456 SetSizer (pTopSizer);
457 pTopSizer->Fit (this);
458 pTopSizer->SetSizeHints (this);
461 DialogGetProjectionParameters::~DialogGetProjectionParameters (void)
467 DialogGetProjectionParameters::getNDet (void)
469 wxString strCtrl = m_pTextCtrlNDet->GetValue();
470 unsigned long lValue;
471 if (strCtrl.ToULong (&lValue))
474 return (m_iDefaultNDet);
478 DialogGetProjectionParameters::getNView (void)
480 wxString strCtrl = m_pTextCtrlNView->GetValue();
481 unsigned long lValue;
482 if (strCtrl.ToULong (&lValue))
485 return (m_iDefaultNView);
490 DialogGetProjectionParameters::getNSamples (void)
492 wxString strCtrl = m_pTextCtrlNSamples->GetValue();
493 unsigned long lValue;
494 if (strCtrl.ToULong (&lValue))
497 return (m_iDefaultNSamples);
501 DialogGetProjectionParameters::getRotAngle (void)
503 wxString strCtrl = m_pTextCtrlRotAngle->GetValue();
505 if (strCtrl.ToDouble (&dValue))
506 return (dValue * PI);
508 return (m_dDefaultRotAngle);
512 DialogGetProjectionParameters::getFocalLengthRatio (void)
514 wxString strCtrl = m_pTextCtrlFocalLength->GetValue();
516 if (strCtrl.ToDouble (&dValue))
519 return (m_dDefaultFocalLength);
523 DialogGetProjectionParameters::getFieldOfViewRatio (void)
525 wxString strCtrl = m_pTextCtrlFieldOfView->GetValue();
527 if (strCtrl.ToDouble (&dValue))
530 return (m_dDefaultFieldOfView);
534 DialogGetProjectionParameters::getGeometry (void)
536 return m_pListBoxGeometry->getSelectionStringValue();
540 DialogGetProjectionParameters::getTrace (void)
542 return Trace::convertTraceNameToID(m_pListBoxTrace->getSelectionStringValue());
547 /////////////////////////////////////////////////////////////////////
548 // CLASS IDENTIFICATION
550 // DialogGetReconstructionParameters
551 /////////////////////////////////////////////////////////////////////
554 DialogGetReconstructionParameters::DialogGetReconstructionParameters (wxFrame* pParent, int iDefaultXSize, int iDefaultYSize, int iDefaultFilterID, double dDefaultFilterParam, int iDefaultFilterMethodID, int iDefaultFilterGenerationID, int iDefaultZeropad, int iDefaultInterpID, int iDefaultInterpParam, int iDefaultBackprojectID, int iTrace)
555 : wxDialog (pParent, -1, "Set Reconstruction Parameters", wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
557 wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
559 pTopSizer->Add (new wxStaticText (this, -1, "Set Reconstruction Parameters"), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
561 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
563 std::ostringstream os;
565 m_pTextCtrlXSize = new wxTextCtrl (this, -1, os.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
566 std::ostringstream osYSize;
567 osYSize << iDefaultYSize;
568 m_pTextCtrlYSize = new wxTextCtrl (this, -1, osYSize.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
569 std::ostringstream osFilterParam;
570 osFilterParam << dDefaultFilterParam;
571 m_pTextCtrlFilterParam = new wxTextCtrl (this, -1, osFilterParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
572 std::ostringstream osZeropad;
573 osZeropad << iDefaultZeropad;
574 m_pTextCtrlZeropad = new wxTextCtrl (this, -1, osZeropad.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
575 std::ostringstream osInterpParam;
576 osInterpParam << iDefaultInterpParam;
577 m_pTextCtrlInterpParam = new wxTextCtrl (this, -1, osInterpParam.str().c_str(), wxDefaultPosition, wxSize(100, 25), 0);
579 wxFlexGridSizer* pGridSizer = new wxFlexGridSizer (6);
580 pGridSizer->Add (new wxStaticText (this, -1, "Filter"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
581 m_pListBoxFilter = new StringValueAndTitleListBox (this, SignalFilter::getFilterCount(), SignalFilter::getFilterTitleArray(), SignalFilter::getFilterNameArray());
582 m_pListBoxFilter->SetSelection (iDefaultFilterID);
583 pGridSizer->Add (m_pListBoxFilter, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
585 m_pListBoxFilterMethod = new StringValueAndTitleListBox (this, ProcessSignal::getFilterMethodCount(), ProcessSignal::getFilterMethodTitleArray(), ProcessSignal::getFilterMethodNameArray());
586 m_pListBoxFilterMethod->SetSelection (iDefaultFilterMethodID);
587 pGridSizer->Add (new wxStaticText (this, -1, "Filter Method"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
588 pGridSizer->Add (m_pListBoxFilterMethod, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
590 m_pListBoxFilterGeneration = new StringValueAndTitleListBox (this, ProcessSignal::getFilterGenerationCount(), ProcessSignal::getFilterGenerationTitleArray(), ProcessSignal::getFilterGenerationNameArray());
591 m_pListBoxFilterGeneration->SetSelection (iDefaultFilterGenerationID);
592 pGridSizer->Add (new wxStaticText (this, -1, "Filter Generation"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
593 pGridSizer->Add (m_pListBoxFilterGeneration, 0, wxALL | wxALIGN_LEFT | wxEXPAND);
596 m_pListBoxBackproject = new StringValueAndTitleListBox (this, Backprojector::getBackprojectCount(), Backprojector::getBackprojectTitleArray(), Backprojector::getBackprojectNameArray());
597 m_pListBoxBackproject->SetSelection (iDefaultBackprojectID);
598 pGridSizer->Add (new wxStaticText (this, -1, "Backprojection"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
599 pGridSizer->Add (m_pListBoxBackproject, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
601 m_pListBoxInterp = new StringValueAndTitleListBox (this, Backprojector::getInterpCount(), Backprojector::getInterpTitleArray(), Backprojector::getInterpNameArray());
602 m_pListBoxInterp->SetSelection (iDefaultInterpID);
603 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation"), 0, wxALIGN_CENTER_VERTICAL | wxALIGN_RIGHT | wxALL, 5);
604 pGridSizer->Add (m_pListBoxInterp, 0, wxALL | wxALIGN_RIGHT | wxEXPAND);
607 pGridSizer->Add (new wxStaticText (this, -1, "Trace Level"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
\r
608 static const char* aszTraceTitle[] = {"None", "Full"};
\r
609 static const char* aszTraceName[] = {"none", "full"};
\r
610 m_pListBoxTrace = new StringValueAndTitleListBox (this, 2, aszTraceTitle, aszTraceName);
\r
611 iTrace = clamp(iTrace, 0, 1);
\r
612 m_pListBoxTrace->SetSelection (iTrace);
\r
613 pGridSizer->Add (m_pListBoxTrace);
\r
615 pGridSizer->Add (new wxStaticText (this, -1, "X Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
616 pGridSizer->Add (m_pTextCtrlXSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
617 pGridSizer->Add (new wxStaticText (this, -1, "Y Size"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
618 pGridSizer->Add (m_pTextCtrlYSize, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
619 pGridSizer->Add (new wxStaticText (this, -1, "Filter Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
620 pGridSizer->Add (m_pTextCtrlFilterParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
621 pGridSizer->Add (new wxStaticText (this, -1, "Zeropad"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
622 pGridSizer->Add (m_pTextCtrlZeropad, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
623 pGridSizer->Add (new wxStaticText (this, -1, "Interpolation Parameter"), 0, wxALIGN_RIGHT | wxALIGN_CENTER_VERTICAL);
624 pGridSizer->Add (m_pTextCtrlInterpParam, 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
626 pTopSizer->Add (pGridSizer, 1, wxALL, 3);
628 pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
630 wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
631 wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
632 wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
633 pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
634 pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
636 pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
638 SetAutoLayout (true);
639 SetSizer (pTopSizer);
641 pTopSizer->Fit (this);
642 pTopSizer->SetSizeHints (this);
645 DialogGetReconstructionParameters::~DialogGetReconstructionParameters (void)
651 DialogGetReconstructionParameters::getXSize (void)
653 wxString strCtrl = m_pTextCtrlXSize->GetValue();
654 unsigned long lValue;
655 if (strCtrl.ToULong (&lValue))
658 return (m_iDefaultXSize);
662 DialogGetReconstructionParameters::getYSize (void)
664 wxString strCtrl = m_pTextCtrlYSize->GetValue();
665 unsigned long lValue;
666 if (strCtrl.ToULong (&lValue))
669 return (m_iDefaultYSize);
673 DialogGetReconstructionParameters::getZeropad (void)
675 wxString strCtrl = m_pTextCtrlZeropad->GetValue();
676 unsigned long lValue;
677 if (strCtrl.ToULong (&lValue))
680 return (m_iDefaultZeropad);
685 DialogGetReconstructionParameters::getInterpParam (void)
687 wxString strCtrl = m_pTextCtrlInterpParam->GetValue();
688 unsigned long lValue;
689 if (strCtrl.ToULong (&lValue))
692 return (m_iDefaultInterpParam);
696 DialogGetReconstructionParameters::getFilterParam (void)
698 wxString strCtrl = m_pTextCtrlFilterParam->GetValue();
700 if (strCtrl.ToDouble (&dValue))
703 return (m_dDefaultFilterParam);
707 DialogGetReconstructionParameters::getFilterName (void)
709 return m_pListBoxFilter->getSelectionStringValue();
713 DialogGetReconstructionParameters::getFilterMethodName (void)
715 return m_pListBoxFilterMethod->getSelectionStringValue();
719 DialogGetReconstructionParameters::getInterpName (void)
721 return m_pListBoxInterp->getSelectionStringValue();
725 DialogGetReconstructionParameters::getTrace (void)
728 if (strcmp("full", m_pListBoxTrace->getSelectionStringValue()) == 0)
729 iTrace = Trace::TRACE_PLOT;
734 DialogGetReconstructionParameters::getBackprojectName (void)
736 return m_pListBoxBackproject->getSelectionStringValue();
740 DialogGetReconstructionParameters::getFilterGenerationName (void)
742 return m_pListBoxFilterGeneration->getSelectionStringValue();