r521: no message
authorKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 11 Feb 2001 21:57:08 +0000 (21:57 +0000)
committerKevin M. Rosenberg <kevin@rosenberg.net>
Sun, 11 Feb 2001 21:57:08 +0000 (21:57 +0000)
19 files changed:
doc/ctsim-appendix.tex
doc/ctsim-gui.tex
doc/ctsim-textui.tex
doc/ctsim-web.tex
doc/ctsim.tex
doc/texhelp.sty
include/cubicinterp.h [deleted file]
include/interpolator.h [new file with mode: 0644]
libctsupport/cubicinterp.cpp [deleted file]
libctsupport/interpolator.cpp [new file with mode: 0644]
msvc/ctsim/ctsim.dsp
msvc/ctsim/ctsim.plg
msvc/libctsim/libctsim.dsp
src/ctsim.cpp
src/ctsim.h
src/dialogs.cpp
src/dialogs.h
src/views.cpp
tools/pjrec.cpp

index c25c257638428656f2d10772a88b7efe61d5bf94..38358eb0c477e7d518f9b26381cfe8077207571a 100644 (file)
@@ -5,7 +5,9 @@
 \section{Simple Graphics Package}\index{Simple Graphics Package}%
 
 \subsection{Overview}%
-Simple Graphics Package was creates in 1983 by Kevin Rosenberg and is modelled after the graphics library in Foley and van Dam\cite{FOLEY82}.
+Simple Graphics Package was created in 1980 by Kevin Rosenberg and
+is modelled after the graphics library in Foley and van
+Dam\cite{FOLEY82}.
 
 \begin{verbatim}
                        +------------------------+
@@ -33,55 +35,61 @@ Simple Graphics Package was creates in 1983 by Kevin Rosenberg and is modelled a
 
 \subsection{Functions}%
 
-\subsubsection{World Coordinate Level}%
-     initgrf2 ()                         Initialize 2 dimensional graphics\\
-     termgrf2 ()                         Terminate 2 dimensional graphics\\
-     Window  (xmin, ymin, xmax, ymax)   Set window for world coordinates\\
-     Viewport (xmin, ymin, xmax, ymax)   Viewport for window in NDC\\
-     MoveAbs (x, y)                     Move graphics cursor\\
-     MoveRel (dx, dy)\\
-     PointAbs (x, y)                      Plot point at current position\\
-     PointRel (dx, dy)\\
-     LineAbs2 (x, y)             Draw line from current point to point\\
-     LineRel2 (dx, dy)\\
-     MarkerAbs2 (x, y)                     Draw marker at current position\\
-     MarkerRel2 (dx, dy)\\
-     PolylineAbs (x[], y[], n)             Draw a set of lines\\
-     PolylineRel (dx[]. dy[]. n)\\
-     wc\_to\_ndc (xwc, ywc, xndc, yndc)    Convert from world coord to NDC\\
-     ndc\_to\_wc (xndc, yndc, xwc, ywc)    Convert from NDC to world coord\\
-     DrawText (str)                      Draw text string at current positon\\
+\subsubsection{World Coordinate Level}
+\begin{twocollist}
+\twocolitem{initgrf2}{Initialize 2 dimensional graphics}
+\twocolitem{termgrf2}{Terminate 2 dimensional graphics}
+\twocolitem{setColor(color)}{Set current drawing color}
+\twocolitem{setLinestyle (style)}{Set current line style}
+\twocolitem{setLinewidth (width)}{Set current line width}
+\twocolitem{setTextColor (foreground, background)}{If back=-1,
+then transparent} \twocolitem{setMarker (type, color)}{Set marker
+attibutes}
+\end{twocollist}
 
-     INTERNAL:\\
-          calc\_map ()                        Calculate wc to ndc factors\\
-          clip(rectangle[4], x1, y1, x2, y2) Clip a line againt rectangle\\
+\subsubsection{State Commands}
+\begin{twocollist}
+\twocolitem{Window(xmin, ymin, xmax, ymax)}{Set window for world
+coordinates} \twocolitem{MoveAbs(x, y)}{Move graphics cursor}
+\twocolitem{MoveRel(dx, dy)}{} \twocolitem{PointAbs (x, y)}{Plot
+point at current position} \twocolitem{PointRel (dx, dy)}{}
+\twocolitem{LineAbs2 (x, y)}{Draw line from current point to
+point} \twocolitem{LineRel2 (dx, dy)}{} \twocolitem{MarkerAbs2 (x,
+y)}{Draw marker at current position} \twocolitem{MarkerRel2 (dx,
+dy)}{} \twocolitem{PolylineAbs (x[], y[], n)}{Draw a set of lines}
+\twocolitem{PolylineRel (dx[], dy[], n)}{}
+\twocolitem{wc\_to\_ndc(xwc, ywc, xndc, yndc)}{Convert from world
+coord to NDC} \twocolitem{ndc\_to\_wc(xndc, yndc, xwc,
+ywc)}{Convert from NDC to world coord} \twocolitem{DrawText
+(str)}{Draw text string at current positon}
+\end{twocollist}
 
 
 \subsubsection{Normalized Coordinate level}%
-     stylus (x, y, beam)                 Draw a line from current position\\
-     setColor (color)            Set current drawing color\\
-     setLinestyle (style)                Set current line style\\
-     setLinewidth (width)                Set current line width\\
-     setTextColor (foreground, background) If back=-1, then transparent \\
+\begin{twocollist}
+\twocolitem{Viewport (xmin, ymin, xmax, ymax)}{Viewport for window
+in NDC} \twocolitem{stylus (x, y, beam)}{Draw a line from current
+position} \twocolitem{markerNDC(xndc, yndc)}{Draw marker at NDC
+position}
+\end{twocollist}
 
-     setMarker (type, color)      Set marker attibutes\\
-     markerNDC (xndc, yndc)                Draw marker at NDC position\\
 
-\subsection{Coordinate Mapping}%
+\subsection{Coordinate Mapping}
 
 \subsubsection{Mapping from world coordinates to physical device coordinates}%
 
-Window (World Coordinates):   xwmin, xwmax, ywmin, ywmax \\
-Viewport (Normalized Device Coordinates): xvmin, xvmax, yvmin, yvmax\\
-Physical (Physicial Device Coordinates): xpmax, ypmax\\
+Window (World Coordinates):  $X_{wmin}, X_{wmax}, Y_{wmin}, Y_{wmax}$ \\
+Viewport (Normalized Device Coordinates): $X_{vmin}, X_{vmax}, Y_{vmin}, Y_{vmax}$\\
+Physical (Physicial Device Coordinates): $X_{pmax}, Y_{pmax}$\\
 
 To convert from WC to NDC:\\
 \begin{equation}
-     X_{ndc} = X_vmin + (X_wc - X_wmin) / (X_wmax - X_wmin)
+     X_{ndc} = X_{vmin} + (X_{vmax} - X_{vmin})  (X_{wc} - X_{wmin}) / (X_{wmax} - X_{wmin})
 \end{equation}
 \begin{equation}
-     Y_{ndc} = Y_vmin + (Y_wc - Y_wmin) / (Y_wmax - Y_wmin)
+     Y_{ndc} = Y_{vmin} + (Y_{vmax} - Y_{vmin}) (Y_{wc} - Y_{wmin}) / (Y_{wmax} - Y_{wmin})
 \end{equation}
+
 To convert from NDC to PDC:
 \begin{equation}
      X_{pdc} = X_{ndc} X_{pmax}
@@ -89,17 +97,3 @@ To convert from NDC to PDC:
 \begin{equation}
      Y_{pdc} = X_{ndc} Y_{pmax}
 \end{equation}
-
-So, for each device set up the following composite transformation:\\
-\begin{equation}
-     x_{pdc} = x_{pmax} (x_{vmin} + (x_{wc} - x_{wmin}) / (x_{wmax} - x_{wmin}))
-\end{equation}
-\begin{equation}
-     y_{pdc} = y_{pmax} (y_{vmin} + (y_{wc} - y_{wmin}) / (y_{wmax} - y_{wmin}))
-\end{equation}
-\begin{equation}
-     X_{pdc} = X_{pmax} X_{vmin} + ((X_{wc} \- X_{wmin})  X_{pmax})/(X_{wmax} \- X_{wmin}))
-\end{equation}
-\begin{equation}
-     X_{pdc} = X_{add} + (X_wc - X_{sub})  X_{fract}
-\end{equation}
index 8d675de29f81518b0ad58ac0b034f220553023bd..7e0f6d4de0f01ade1dbfc1f9cb53aaad3c0aac72 100644 (file)
@@ -13,17 +13,18 @@ command-line interface \helprefn{\ctsimtext}{ctsimtext} as well as
 great image processing and visualization features.
 
 \ctsim\ can open projection files, image files, phantom files, and
-plotfiles.
+plot files.
 
-\usage \texttt{ctsim [files to open...]
+\usage \texttt{ctsim [files to open...]}
 
 You can invoke \ctsim\ by itself on the command line, or include
-any number of files that you want \ctsim\ to automatically open.
+on the command-line any number of files that you want \ctsim\ to
+automatically open.
 
 \section{File Types Support}
 
 Phantom and plot files are stored as ASCII text. In contrast,
-image and projection files are stored in binary format. \ctsim\
+image and projection files are stored in binary format. \ctsim
 incorporates logic so that binary files are cross-platform
 compatible between both little and big endian architectures.
 
@@ -41,9 +42,19 @@ processed by Fourier transforms. As you might expect,
 complex-valued images are twice the size of real-valued images
 since both a real and imaginary component need to be store.
 
+Images files can also store any number of text labels. \ctsim\ uses
+these labels for storing history information regarding
+the creation and modifications of images.
+
+When complex-valued images are viewed on the screen, only the real
+component is displayed.
+
 \subsection{Projection}
-Projection files are created from Phantom files during the projection process.
-Numerous options are available for creation of the these files.
+Projection files are created from Phantom files during the
+projection process. Numerous options are available for the
+creation of the these files. The files are stored in a binary
+format with cross-platform compatibility on little and big endian
+architectures.
 
 \subsection{Plot}
 Plot files are created by \ctsim\ during analysis of image files.
@@ -52,6 +63,14 @@ files for easy cross-platform support.
 
 \section{Phantom Menus}
 
+\subsection{Properties}
+Displays the properties of a phantom which includes:
+
+\begin{itemize}\itemsep=0pt
+\item Overall dimensions of a phantom
+\item A list of all component phantom elements
+\end{itemize}
+
 \subsection{Rasterize Dialog}
 This creates an image file from a phantom. Technically, it
 converts the phantom from a vector (infinite resolution) object
@@ -59,7 +78,7 @@ into a 2-dimension array of floating-point pixels. The parameters
 to set are:
 
 \begin{twocollist}
-%\twocolitemruled{\textbf{Parameter}}{\textbf{Options}}
+\twocolitemruled{\textbf{Parameter}}{\textbf{Options}}
 \twocolitem{\texttt{X size}}{Number of columns in image file}
 \twocolitem{\texttt{Y size}}{Number of rows in image file}
 \twocolitem{\texttt{Samples per pixel}}{Numbers of samples taken
@@ -69,7 +88,50 @@ pixel in the image file 9 samples (3 x 3) are averaged.}
 \end{twocollist}
 
 \subsection{Projection Dialog}
-This creates a projection file from a phantom.
+This creates a projection file from a phantom. The options
+available when collecting projections are:
+
+\begin{twocollist}
+\twocolitem{\textbf{Geometry}}{
+  \begin{itemize}\itemsep=0pt
+    \item Parallel
+    \item Equiangular
+    \item Equilinear
+  \end{itemize}}
+\twocolitem{\textbf{Number of detectors}}{Sets the number of
+detectors in the detector array.}
+
+\twocolitem{\textbf{Number of views}}{Sets the number of views
+collected}
+
+\twocolitem{\textbf{Samples per detector}}{Sets the number of
+samples collected for each detector}
+
+\twocolitem{\textbf{View Ratio}}{Sets the field of view as a ratio
+of the diameter of the phantom.  For normal scanning, a value of
+1.0 is fine.}
+
+\twocolitem{\textbf{Scan Ratio}}{Sets the length of scanning as a
+ratio of the view diameter. For normal scanning, a value of 1.0 is
+fine.}
+
+\twocolitem{\textbf{Focal length ratio}}{Sets the distance of the
+radiation source and detectors from the center of the object as a
+ratio of the radius of the object.
+
+For parallel geometries, a value of 1.0 is fine. For other
+geometries, this should be at least 2.0 to avoid artifacts.}
+\end{twocollist}
+
+\subsection{Advanced Options}
+\begin{twocollist}
+\twocolitem{\textbf{Rotation Angle}}{Sets the rotation amount as a
+multiple of pi. For parallel geometries use a rotation angle of 1
+and for equilinear and equiangular geometries use a rotation angle
+of 2. Using any other rotation angle will lead to artifacts.}
+\end{twocollist}
+
+
 
 \section{Image Menus}
 \subsection{File - Properties}
@@ -80,21 +142,62 @@ Properties of image files include
   \item Image file labels
 \end{itemize}
 
-\subsection{View}
+\subsection{File - Export}
+This command allows for exporting image files to a standard
+graphics file format. This is helpful when you want to take an
+image and import it into another application. The current
+\helprefn{intensity scale}{intensityscale} is used when exporting
+the file. The support file formats are:
+
+\begin{description}\itemsep=0pt
+\item[PNG]Portable Network Graphics format. This uses 8-bits or
+256 shades of gray.
+
+\item[PNG-16]This is a 16-bit version of PNG which allows for
+65536 shades of gray.
+\item[PGM]Portable Graymap format. This is a common format used on
+UNIX systems.
+\item[PGM]ASCII version of PGM.
+\end{description}
+
+
+\subsection{View}\label{intensityscale}
 These options are for change the intensity scale for viewing the image.
 They do not change the image data.
+\subsubsection{Set}
+\subsubsection{Auto}
+\subsubsection{Full}
+This resets the intensity scale to the full scale of the image.
 
 \subsection{Image}
 These commands create a new image based upon the current image,
 and for some commands, also a comparison image.
 
+\subsubsection{Add, Subtract, Multiply, Divide}
+
+\subsubsection{Image Size}
+
+\subsubsection{3-D Conversion}
+Generates a 3-dimensional view of the current phantom.
+
 \subsection{Filter}
-These commands filter image.
+These commands filter and modify the image.
 
-\subsection{Anaylze}
+\subsubsection{Arithmetic}
+
+\subsubsection{Frequency Based}
+
+\subsection{Analyze}
 These commands are used for analyzing an image.
 
+\subsubsection{Plotting}
+
+\subsubsection{Image Comparison}
+
 \section{Projection Menus}
+
+\subsection{File - Properties}
+
 \subsection{Process - Convert Polar Dialog}\label{convertpolardialog}
 The parameters are \texttt{xsize}, \texttt{ysize}, and \texttt{interpolation}.
 The \texttt{xsize} and \texttt{ysize} parameters set the size of the
@@ -103,10 +206,10 @@ interpolation method. Currently, the \texttt{bilinear} option provides
 the highest quality interpolation.
 
 \subsection{Process - Convert FFT Polar Dialog}
-The parameters for this option are the same as
-\helprefn{convertpolardialog}{Convert Polar Dialog}. For this
-command, though, the projections are Fourier transformed prior to
-conversion to polar image.
+The parameters for this option are the same as \helprefn{Convert
+Polar Dialog}{convertpolardialog}. For this command, though, the
+projections are Fourier transformed prior to conversion to polar
+image.
 
 \subsection{Reconstruct - Filtered Backprojection Dialog}
 This dialog sets the parameters for reconstructing an image from projections
index 5a7976fc5adccab637efce9c7565be052f989a69..6a4a67531bb9c47510b5ec0f7564817c0d193f13 100644 (file)
@@ -4,14 +4,28 @@
 
 \ctsimtext\ is a master shell for all of the command-line utilities.
 
-\usage
-\ctsimtext\ can be executed without any parameters. In that case, \ctsimtext\
-offers a command-line to enter the function-names and their parameters. The output of the command is displayed. Further commands may be given to \ctsimtext. The shell is exited by the \texttt{quit} command.
-
-\ctsimtext\ can also be called to execute a single command. This is especially useful for batch files containing multiple \ctsimtext\ commands. This is invoked by calling \par
-\texttt{ctsimtext function-name parameters...}.
+\usage \ctsimtext\ can be invoked via three different
+methods.
+\begin{itemize}\itemsep=0pt
+\item \ctsimtext\ can executed without any parameters. In that case,
+\ctsimtext\ offers a command-line to enter the function-names and
+their parameters. The output of the command is displayed. Further
+commands may be given to \ctsimtext. The shell is exited by the
+\texttt{quit} command.
+
+\item \ctsimtext\ can also be called to
+execute a single command. This is especially useful for batch
+files containing multiple \ctsimtext\ commands. This is invoked by
+calling\\ \texttt{ctsimtext function-name parameters...}.
+
+\item Using operating systems that support soft or hard linking of
+files (such as UNIX and Linux), the executable file \ctsimtext\ can
+be linked to the function names. This is automatically done by
+the installation file for Linux. Thus, to use \ctsimtext\ with the
+function name \texttt{pjrec}, the below command can be executed:\\
+\texttt{pjrec parameters...}
 
-The available functions are:
+\end{itemize}
 
 \section{if1}\label{if1}\index{ctsimtext,if1}%
 Perfoms math functions on a single image.
@@ -112,13 +126,21 @@ phm2pj projection-file-name number-of-detectors number-of-views [options...]
 
   \item -\,-rotangle
     Sets the rotation amount as a multiple of pi. For parallel geometries use
-a rotation angle of 1 and for equilinear and equiangular geometries use a rotation angle of 2.
+a rotation angle of 1 and for equilinear and equiangular
+geometries use a rotation angle of 2. The default is to use to
+appropriate rotation angle based on the geometry.
+
+  \item -\,-view-ratio
+    Sets the field of view as a ratio of the diameter of the phantom.
+    For normal scanning, a value of 1.0 is fine.
 
-  \item -\,-field-of-view
-    Sets the field of view as a ratio of the diameter of the phantom. For parallel geometries, using a value of 1.0 is fine. For other geometies, this should be at least 1.3 to avoid artifacts.
+  \item -\,-scan-ratio
+    Sets the length of scanning as a ratio of the view diameter.
+    For normal scanning, a value of 1.0 is fine.
 
   \item -\,-focal-length
-    Sets the distance of the radiation source and detectors from the center of the object as a ratio of the radius of the object. For parallel geometries, a value of 1.0 is fine. For other geometries, this should be at least 2.0 to avoid artifacts.
+    Sets the distance of the radiation source and detectors from the center of the object as a ratio of the radius of the object.
+    For parallel geometries, a value of 1.0 is fine. For other geometries, this should be at least 2.0 to avoid artifacts.
 \end{itemize}
 
 The Herman phantom is taken with permission from Gabor Hermans 1980 book\cite{HERMAN80}. The Shepp-Logan phantom was published in 1974\cite{SHEPP74}.
@@ -131,6 +153,7 @@ to average per pixel.
 \usage
 \begin{itemize}\itemsep=0pt
   \item -\,-nsamples
+  \item -\,-view-ratio
 \end{itemize}
 
 \section{pj2if}\label{pj2if}\index{ctsimtext,pj2if}%
@@ -156,7 +179,6 @@ Displays information about a projection file.
 \section{pjrec}\label{pjrec}\index{ctsimtext,pjrec}%
 Reconstructs the interior of an object from a projection file.
 
-\usage
 \begin{twocollist}
 \twocolitemruled{\textbf{Parameter}}{\textbf{Options}}
 \twocolitem{\textbf{-\,-filter}}{Selects which filter to apply to
@@ -220,6 +242,5 @@ to select. With any of the frequency methods,
 \item direct
 \item inverse-fourier
 \end{itemize}
-
-\end{twocollist}
 }
+\end{twocollist}
index 42c2d6a403c1229704612e7eb2ef80eb754a8587..758716dc10b767ce30ece08ddf8170ff260d1551 100644 (file)
@@ -3,11 +3,12 @@
 \setfooter{\thepage}{}{}{}{}{\thepage}%
 
 \section{Overview}\index{Web Interface,Overview}%
-The CGI program \texttt{ctsim.cgi} takes projections of a standard
-phantom object, performs reconstruction, and then compares the
-rasterized phantom object with the reconstruction. The comparison is
-performed both visually by an image subtraction as well as by standard
-statistics as described by Herman\cite{HERMAN80}.
+\ctsim\ can also be executed via a web browser. The CGI program
+\texttt{ctsim.cgi} takes projections of a standard phantom object,
+performs reconstruction, and then compares the rasterized phantom
+object with the reconstruction. The comparison is performed both
+visually by an image subtraction as well as by standard statistics
+as described by Herman\cite{HERMAN80}.
 
 \section{Requirements}\index{Web Interface,Requirements}%
    \begin{itemize}\itemsep=0pt
@@ -17,4 +18,8 @@ statistics as described by Herman\cite{HERMAN80}.
 
       \item A client web browser than can display PNG files. Most
       current web browsers support PNG.
+
+      \item A knowledgable system administrator. It is beyond the
+      scope of this manual to explain the installation of the CGI
+      interfact.
   \end{itemize}
index 73deaf43dbbce8090180e9cdebb2bf174a68aff3..f3e025674141b31070bb02847d0d901d839d7c6d 100644 (file)
@@ -4,7 +4,7 @@
 \usepackage{fancyhea}
 %\usepackage{mysober}
 \usepackage{mytitle}
-%\usepackage{verbatim}
+\usepackage{verbatim}
 \usepackage{makeidx}
 %\usepackage{times}
 \usepackage{hyperref}
@@ -113,4 +113,4 @@ I hope that you enjoy \ctsim!
 \setfooter{\thepage}{}{}{}{}{\thepage} %
 \printindex %
 
-\end{document}%
+\end{document}
index df04b586d7cbd400ae67de1be66b3c211d4e7654..54769c31a8faeb7f170ba784b63bcb3c830bd150 100644 (file)
 \newcommand{\helpref}[2]{{\it #1} (section \ref{#2}) }
 
 % Type text with URL in verbatim mode
-\newcommand{\urlref}[2]{#1 (\verb$#2$)}
+%\newcommand{\urlref}[2]{#1 (\verb$#2$)}
+\newcommand{\urlref}[2]{#1 ($#2$)}
+%\newcommand{\urlref}[2]{#1 \begin{verbatim}(#2)\end{verbatim}}
 
 % Don't typeset section number in LaTeX
 \newcommand{\helprefn}[2]{{\it #1}}
diff --git a/include/cubicinterp.h b/include/cubicinterp.h
deleted file mode 100644 (file)
index 9e677cd..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-/*****************************************************************************
-**  This is part of the CTSim program
-**  Copyright (c) 1983-2001 Kevin Rosenberg
-**
-**  $Id: cubicinterp.h,v 1.1 2001/02/09 01:54:20 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
-**  published by the Free Software Foundation.
-**
-**  This program is distributed in the hope that it will be useful,
-**  but WITHOUT ANY WARRANTY; without even the implied warranty of
-**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**  GNU General Public License for more details.
-**
-**  You should have received a copy of the GNU General Public License
-**  along with this program; if not, write to the Free Software
-**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-******************************************************************************/
-
-class CubicInterpolator {
-private:
-  double *m_pdY2;  // second differential of y data
-
-  const double* const m_pdY;
-  const int m_n;
-
-public:
-  CubicInterpolator (const double* const y, int n);
-
-  ~CubicInterpolator ();
-
-  double interpolate (double x);
-};
-
diff --git a/include/interpolator.h b/include/interpolator.h
new file mode 100644 (file)
index 0000000..def913e
--- /dev/null
@@ -0,0 +1,49 @@
+/*****************************************************************************
+**  This is part of the CTSim program
+**  Copyright (c) 1983-2001 Kevin Rosenberg
+**
+**  $Id: interpolator.h,v 1.1 2001/02/11 21:57:08 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
+**  published by the Free Software Foundation.
+**
+**  This program is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+**  GNU General Public License for more details.
+**
+**  You should have received a copy of the GNU General Public License
+**  along with this program; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+
+
+class CubicSplineInterpolator {
+private:
+  double *m_pdY2;  // second differential of y data
+
+  const double* const m_pdY;
+  const int m_n;
+
+public:
+  CubicSplineInterpolator (const double* const y, int n);
+
+  ~CubicSplineInterpolator ();
+
+  double interpolate (double x);
+};
+
+class CubicPolyInterpolator {
+private:
+  const double* const m_pdY;
+  const int m_n;
+
+public:
+  CubicPolyInterpolator (const double* const y, int n);
+
+  ~CubicPolyInterpolator ();
+
+  double interpolate (double x);
+};
+
diff --git a/libctsupport/cubicinterp.cpp b/libctsupport/cubicinterp.cpp
deleted file mode 100644 (file)
index 8d0c62c..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-/*****************************************************************************
-**  This is part of the CTSim program
-**  Copyright (c) 1983-2001 Kevin Rosenberg
-**
-**  $Id: cubicinterp.cpp,v 1.4 2001/02/09 21:27:51 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
-**  published by the Free Software Foundation.
-**
-**  This program is distributed in the hope that it will be useful,
-**  but WITHOUT ANY WARRANTY; without even the implied warranty of
-**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-**  GNU General Public License for more details.
-**
-**  You should have received a copy of the GNU General Public License
-**  along with this program; if not, write to the Free Software
-**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
-******************************************************************************/
-
-
-#include "ctsupport.h"
-#include "cubicinterp.h"
-
-
-CubicInterpolator::CubicInterpolator (const double* const y, const int n)
-  : m_pdY(y), m_n(n)
-{
-  // Precalculate 2nd derivative of y and put in m_pdY2
-  // Calculated by solving set of simultaneous cubic spline equations
-  // Only n-2 cubic spline equations, but able to make two more
-  // equations by setting second derivative to 0 at ends 
-
-  m_pdY2 = new double [n];
-  m_pdY2[0] = 0;   // second deriviative = 0 at beginning and end
-  m_pdY2[n-1] = 0;
-
-  double* temp = new double [n - 1];
-  temp[0] = 0;
-  int i;
-  for (i = 1; i < n - 1; i++) { 
-    double t = 2 + (0.5 * m_pdY2[i-1]);
-    temp[i] = y[i+1] + y[i-1] - y[i] - y[i];
-    temp[i] = (3 * temp[i] - 0.5 * temp[i-1]) / t;
-    m_pdY2[i] = -0.5 / t;
-  }
-
-  for (i = n - 2; i >= 0; i--) 
-    m_pdY2[i] = temp[i] + m_pdY2[i] * m_pdY2[i + 1];
-
-  delete temp;
-}
-
-CubicInterpolator::~CubicInterpolator ()
-{
-  delete m_pdY2;
-}
-
-
-double
-CubicInterpolator::interpolate (double x)
-{
-  const static double oneSixth = (1. / 6.);
-  int lo = static_cast<int>(floor(x));
-  int hi = lo + 1;
-
-  if (lo < 0 || hi >= m_n) {
-    sys_error (ERR_SEVERE, "X range out of bounds [CubicInterpolator::interpolate]");
-    return (0);
-  }
-
-  double loFr = hi - x;
-  double hiFr = 1 - loFr;
-  double y = loFr * m_pdY[lo] + hiFr * m_pdY[hi];
-  y += oneSixth * ((loFr*loFr*loFr - loFr) * m_pdY2[lo] + (hiFr*hiFr*hiFr - hiFr) * m_pdY2[hi]);
-  
-  return y;
-}
-
-
-
diff --git a/libctsupport/interpolator.cpp b/libctsupport/interpolator.cpp
new file mode 100644 (file)
index 0000000..e8abdfa
--- /dev/null
@@ -0,0 +1,132 @@
+/*****************************************************************************
+**  This is part of the CTSim program
+**  Copyright (c) 1983-2001 Kevin Rosenberg
+**
+**  $Id: interpolator.cpp,v 1.1 2001/02/11 21:57:08 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
+**  published by the Free Software Foundation.
+**
+**  This program is distributed in the hope that it will be useful,
+**  but WITHOUT ANY WARRANTY; without even the implied warranty of
+**  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+**  GNU General Public License for more details.
+**
+**  You should have received a copy of the GNU General Public License
+**  along with this program; if not, write to the Free Software
+**  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+******************************************************************************/
+
+
+#include "ctsupport.h"
+#include "interpolator.h"
+
+
+CubicPolyInterpolator::CubicPolyInterpolator (const double* const y, const int n)
+  : m_pdY(y), m_n(n)
+{
+  if (m_n < 2)
+    sys_error (ERR_SEVERE, "Too few points (%d) in CubicPolyInterpolator", m_n);
+}
+
+CubicPolyInterpolator::~CubicPolyInterpolator ()
+{
+}
+
+
+double
+CubicPolyInterpolator::interpolate (double x)
+{
+  int lo = static_cast<int>(floor(x)) - 1;
+  int hi = lo + 3;
+
+  if (lo < -1) {
+    sys_error (ERR_WARNING, "x=%f, out of range [CubicPolyInterpolator]", x);
+    return (0);
+  } else if (lo == -1)  // linear interpolate at between x = 0 & 1
+    return m_pdY[0] + x * (m_pdY[1] - m_pdY[0]);
+
+  if (hi > m_n) {
+    sys_error (ERR_WARNING, "x=%f, out of range [CubicPolyInterpolator]", x);
+    return (0);
+  } else if (hi == m_n) {// linear interpolate between x = (n-2) and (n-1)
+    double frac = x - (lo + 1);
+    return m_pdY[m_n - 2] + frac * (m_pdY[m_n - 1] - m_pdY[m_n - 2]);
+  }
+
+  // Lagrange formula for N=4 (cubic)
+  
+  double xd_0 = x - lo;
+  double xd_1 = x - (lo + 1);
+  double xd_2 = x - (lo + 2);
+  double xd_3 = x - (lo + 3);
+
+  static double oneSixth = (1. / 6.);
+
+  double y = xd_1 * xd_2 * xd_3 * -oneSixth * m_pdY[lo];
+  y += xd_0 * xd_2 * xd_3 * 0.5 * m_pdY[lo+1];
+  y += xd_0 * xd_1 * xd_3 * -0.5 * m_pdY[lo+2];
+  y += xd_0 * xd_1 * xd_2 * oneSixth * m_pdY[lo+3];
+
+  return (y);
+}
+
+
+
+CubicSplineInterpolator::CubicSplineInterpolator (const double* const y, const int n)
+  : m_pdY(y), m_n(n)
+{
+  // Precalculate 2nd derivative of y and put in m_pdY2
+  // Calculated by solving set of simultaneous CubicSpline spline equations
+  // Only n-2 CubicSpline spline equations, but able to make two more
+  // equations by setting second derivative to 0 at ends 
+
+  m_pdY2 = new double [n];
+  m_pdY2[0] = 0;   // second deriviative = 0 at beginning and end
+  m_pdY2[n-1] = 0;
+
+  double* temp = new double [n - 1];
+  temp[0] = 0;
+  int i;
+  for (i = 1; i < n - 1; i++) { 
+    double t = 2 + (0.5 * m_pdY2[i-1]);
+    temp[i] = y[i+1] + y[i-1] - y[i] - y[i];
+    temp[i] = (3 * temp[i] - 0.5 * temp[i-1]) / t;
+    m_pdY2[i] = -0.5 / t;
+  }
+
+  for (i = n - 2; i >= 0; i--) 
+    m_pdY2[i] = temp[i] + m_pdY2[i] * m_pdY2[i + 1];
+
+  delete temp;
+}
+
+CubicSplineInterpolator::~CubicSplineInterpolator ()
+{
+  delete m_pdY2;
+}
+
+
+double
+CubicSplineInterpolator::interpolate (double x)
+{
+  const static double oneSixth = (1. / 6.);
+  int lo = static_cast<int>(floor(x));
+  int hi = lo + 1;
+
+  if (lo < 0 || hi >= m_n) {
+    sys_error (ERR_SEVERE, "X range out of bounds [CubicSplineInterpolator::interpolate]");
+    return (0);
+  }
+
+  double loFr = hi - x;
+  double hiFr = 1 - loFr;
+  double y = loFr * m_pdY[lo] + hiFr * m_pdY[hi];
+  y += oneSixth * ((loFr*loFr*loFr - loFr) * m_pdY2[lo] + (hiFr*hiFr*hiFr - hiFr) * m_pdY2[hi]);
+  
+  return y;
+}
+
+
+
index f53ce27ab28ae24764c5e20f6250649437ff133f..0b57a6bca6ec80124741b8519d1e4dfc57dbe49f 100644 (file)
@@ -53,7 +53,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /machine:I386
-# ADD LINK32 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 tiff.lib jpeg.lib png.lib zlib.lib xpm.lib opengl32.lib glu32.lib /nologo /subsystem:windows /machine:I386 /libpath:"\wx2.2.5\lib"
+# ADD LINK32 wsock32.lib tiff.lib jpeg.lib png.lib zlib.lib xpm.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /machine:I386 /libpath:"\wx2.2.5\lib"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
 
@@ -79,7 +79,7 @@ BSC32=bscmake.exe
 # ADD BSC32 /nologo
 LINK32=link.exe
 # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept
-# ADD LINK32 comctl32.lib winmm.lib rpcrt4.lib ws2_32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib ../libctsim/Debug/libctsim.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib wxd.lib xpmd.lib tiffd.lib zlibd.lib pngd.lib opengl32.lib glu32.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"\wx2.2.5\lib"
+# ADD LINK32 winmm.lib rpcrt4.lib ws2_32.lib ../libctsim/Debug/libctsim.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib wxd.lib xpmd.lib tiffd.lib zlibd.lib pngd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /debug /machine:I386 /pdbtype:sept /libpath:"\wx2.2.5\lib"
 # SUBTRACT LINK32 /nodefaultlib
 
 !ENDIF 
@@ -97,7 +97,7 @@ SOURCE=..\..\src\ctsim.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
@@ -114,7 +114,7 @@ SOURCE=..\..\src\dialogs.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
@@ -131,7 +131,7 @@ SOURCE=..\..\src\dlgprojections.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
@@ -148,7 +148,7 @@ SOURCE=..\..\src\dlgreconstruct.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
@@ -165,7 +165,7 @@ SOURCE=..\..\src\docs.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
@@ -182,8 +182,6 @@ SOURCE=..\..\src\graph3dview.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw"
-
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
 
 !ENDIF 
@@ -195,7 +193,7 @@ SOURCE=..\..\src\views.cpp
 
 !IF  "$(CFG)" == "ctsim - Win32 Release"
 
-# ADD CPP /I "..\..\..\fftw-2.1.3\fftw" /D CTSIMVERSION=\"3.0.0alpha5\"
+# ADD CPP /D CTSIMVERSION=\"3.0.0alpha5\"
 # SUBTRACT CPP /D CTSIMVERSION=\"3.0.0beta1\"
 
 !ELSEIF  "$(CFG)" == "ctsim - Win32 Debug"
index d9390b5d2eff1d31ac739db27a81ae36398c4a7f..34137658381f5525c062d20a836d7ace8334a0a4 100644 (file)
@@ -3,41 +3,9 @@
 <pre>
 <h1>Build Log</h1>
 <h3>
---------------------Configuration: ctsim - Win32 Debug--------------------
+--------------------Configuration: ctsim - Win32 Release--------------------
 </h3>
 <h3>Command Lines</h3>
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP299.tmp" with contents
-[
-/nologo /G6 /MTd /W3 /Gm /Gi /GR /GX /Zi /Od /Gy /I "\wx2.2.5\include" /I "..\..\..\fftw-2.1.3\fftw" /I "\wx2.2.5\src\png" /I "\wx2.2.5\src\zlib" /I "..\..\include" /I "..\..\getopt" /I "..\..\..\fftw-2.1.3\rfftw" /D VERSION=\"3.0.0beta1\" /D "_DEBUG" /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.0alpha5\" /FR"Debug/" /Fp"Debug/ctsim.pch" /YX /Fo"Debug/" /Fd"Debug/" /FD /GZ /c 
-"C:\ctsim\src\dialogs.cpp"
-]
-Creating command line "cl.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP299.tmp" 
-Creating temporary file "C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP29A.tmp" with contents
-[
-winmm.lib rpcrt4.lib ws2_32.lib ../libctsim/Debug/libctsim.lib libcmtd.lib ..\..\..\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib ..\..\..\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib wxd.lib xpmd.lib tiffd.lib zlibd.lib pngd.lib comctl32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib opengl32.lib glu32.lib htmlhelp.lib /nologo /subsystem:windows /incremental:yes /pdb:"Debug/ctsim.pdb" /debug /machine:I386 /out:"Debug/ctsim.exe" /pdbtype:sept /libpath:"\wx2.2.5\lib" 
-.\Debug\ctsim.obj
-.\Debug\dialogs.obj
-.\Debug\dlgprojections.obj
-.\Debug\dlgreconstruct.obj
-.\Debug\docs.obj
-.\Debug\graph3dview.obj
-.\Debug\views.obj
-.\Debug\ctsim.res
-\ctsim\msvc\libctsim\Debug\libctsim.lib
-"\fftw-2.1.3\Win32\FFTW2st\Debug\FFTW2st.lib"
-"\fftw-2.1.3\Win32\RFFTW2st\Debug\RFFTW2st.lib"
-\wx2.2.5\lib\jpegd.lib
-\wx2.2.5\lib\pngd.lib
-\wx2.2.5\lib\wxd.lib
-\wx2.2.5\lib\xpmd.lib
-\wx2.2.5\lib\zlibd.lib
-\wx2.2.5\lib\tiffd.lib
-]
-Creating command line "link.exe @C:\DOCUME~1\kevin\LOCALS~1\Temp\RSP29A.tmp"
-<h3>Output Window</h3>
-Compiling...
-dialogs.cpp
-Linking...
 
 
 
index c44e3241f70b0defd68e959f29e316137b15c8ab..d981c557eec0b1f6be929d4e3cad2d32d8dbf953 100644 (file)
@@ -118,10 +118,6 @@ SOURCE=..\..\libctsupport\consoleio.cpp
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\libctsupport\cubicinterp.cpp
-# End Source File
-# Begin Source File
-
 SOURCE=..\..\libctgraphics\dlgezplot.cpp
 # End Source File
 # Begin Source File
@@ -170,6 +166,10 @@ SOURCE=..\..\libctsim\imagefile.cpp
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\libctsupport\interpolator.cpp
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\libctsupport\mathfuncs.cpp
 # End Source File
 # Begin Source File
@@ -254,10 +254,6 @@ SOURCE=..\..\include\ctsupport.h
 # End Source File
 # Begin Source File
 
-SOURCE=..\..\include\cubicinterp.h
-# End Source File
-# Begin Source File
-
 SOURCE=..\..\include\dlgezplot.h
 # End Source File
 # Begin Source File
@@ -290,6 +286,10 @@ SOURCE=..\..\include\imagefile.h
 # End Source File
 # Begin Source File
 
+SOURCE=..\..\include\interpolator.h
+# End Source File
+# Begin Source File
+
 SOURCE=..\..\include\mpiworld.h
 # End Source File
 # Begin Source File
index b08db827d2eefd8a80742ff142842a5cb8ede643..8cd618ef323435f2f507c4ece4390b99eaa458ae 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: ctsim.cpp,v 1.74 2001/02/11 04:56:38 kevin Exp $
+**  $Id: ctsim.cpp,v 1.75 2001/02/11 21:57:08 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
@@ -71,7 +71,7 @@
 #endif
 #endif
 
-static const char* rcsindent = "$Id: ctsim.cpp,v 1.74 2001/02/11 04:56:38 kevin Exp $";
+static const char* rcsindent = "$Id: ctsim.cpp,v 1.75 2001/02/11 21:57:08 kevin Exp $";
 
 struct option CTSimApp::ctsimOptions[] = 
 {
@@ -83,7 +83,8 @@ struct option CTSimApp::ctsimOptions[] =
 IMPLEMENT_APP(CTSimApp)
 
 CTSimApp::CTSimApp()
-: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_bAdvancedOptions(false)
+: m_docManager(NULL), m_pFrame(NULL), m_pLog(0), m_pLogDoc(0), m_pConfig(0),
+  m_bAdvancedOptions(false), m_bSetModifyNewDocs(true)
 {
        theApp = this;
 }
@@ -103,8 +104,7 @@ CTSimApp::OnInit()
        setpriority (PRIO_PROCESS, 0, 15);  // set to low scheduling priority
 #endif
        
-       m_pConfig = new wxConfig("ctsim", _T(""), ".ctsim", "", wxCONFIG_USE_LOCAL_FILE);
-       wxConfigBase::Set(m_pConfig);
+       openConfig();
        
        g_bRunningWXWindows = true;
        // process options
@@ -183,13 +183,13 @@ CTSimApp::OnInit()
 #endif
        wxLog::SetActiveTarget (new wxLogTextCtrl(m_pLog));
 
-#ifdef CTSIM_WINHELP
-       if (! m_pFrame->getWinHelpController().Initialize("ctsim"))
-               *m_pLog << "Cannot initialize the Windows Help system" << "\n";
-#endif
        wxString helpDir;
        if (! m_pConfig->Read("HelpDir", &helpDir))
                helpDir = ::wxGetCwd();
+#ifdef CTSIM_WINHELP
+       if (! m_pFrame->getWinHelpController().Initialize(helpDir + "/ctsim"))
+               *m_pLog << "Cannot initialize the Windows Help system" << "\n";
+#else
        if (! m_pFrame->getHtmlHelpController().Initialize(helpDir + "/ctsim") &&
                ! m_pFrame->getHtmlHelpController().Initialize("/usr/local/man/ctsim"))
                *m_pLog << "Cannot initialize the HTML Help system" << "\n";
@@ -198,6 +198,7 @@ CTSimApp::OnInit()
                m_pFrame->getHtmlHelpController().SetTempDir(_T("/tmp"));
            m_pFrame->getHtmlHelpController().UseConfig (m_pConfig);
        }
+#endif
 
        for (int i = optind + 1; i <= argc; i++) {
                wxString filename = argv [i - 1];
@@ -231,7 +232,7 @@ CTSimApp::usage(const char* program)
 int
 CTSimApp::OnExit()
 {
-       delete m_pConfig;
+  closeConfig();
 
 #ifdef HAVE_DMALLOC
        dmalloc_shutdown();
@@ -239,6 +240,29 @@ CTSimApp::OnExit()
        return 0;
 }
 
+void
+CTSimApp::openConfig()
+{
+#ifdef MSVC
+  m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", "", "", wxCONFIG_USE_LOCAL_FILE);
+#else
+  m_pConfig = new wxConfig("ctsim", "Kevin Rosenberg", ".ctsim", "", wxCONFIG_USE_LOCAL_FILE);
+#endif
+
+       wxConfigBase::Set(m_pConfig);
+  m_pConfig->Read ("AdvancedOptions", &m_bAdvancedOptions);
+  m_pConfig->Read ("SetModifyNewDocs", &m_bSetModifyNewDocs);
+}
+
+void
+CTSimApp::closeConfig()
+{
+  m_pConfig->Write ("AdvancedOptions", m_bAdvancedOptions);
+  m_pConfig->Write ("SetModifyNewDocs", m_bSetModifyNewDocs);
+       delete m_pConfig;
+}
+
+
 wxString
 CTSimApp::getUntitledFilename()
 {
@@ -766,7 +790,12 @@ BitmapDialog::~BitmapDialog()
 void 
 MainFrame::OnPreferences (wxCommandEvent& WXUNUSED(event) )
 {
-  theApp->setAdvancedOptions (! theApp->getAdvancedOptions());
+  DialogPreferences dlg (this, "CTSim Preferences", theApp->getAdvancedOptions(), 
+    theApp->getAskDeleteNewDocs());
+  if (dlg.ShowModal() == wxID_OK) {
+    theApp->setAdvancedOptions (dlg.getAdvancedOptions());
+    theApp->setAskDeleteNewDocs (dlg.getAskDeleteNewDocs());
+  }
 }
 
 
index c87880332c2fff2104e4bf4e44f9dd2a0de71036..92b13f929ecfc2ff46114dc466ae21d7ab0eb0a6 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctsim.h,v 1.43 2001/02/11 04:56:38 kevin Exp $
+**  $Id: ctsim.h,v 1.44 2001/02/11 21:57:08 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
@@ -73,7 +73,7 @@ class Graph3dFileDocument;
 #include "dlgezplot.h"
 
 
-#if defined(__WXMSW__)
+#if defined(__WXMSW__) || defined (MSVC)
 #define CTSIM_WINHELP   1
 #endif
 
@@ -181,6 +181,8 @@ private:
   static struct option ctsimOptions[];
 
   bool m_bAdvancedOptions;
+  bool m_bSetModifyNewDocs;
+
   wxDocManager* m_docManager;
   MainFrame* m_pFrame;
   wxConfig* m_pConfig;
@@ -197,7 +199,9 @@ private:
   TextFileDocument* m_pLogDoc;
 
   void usage (const char* program);
-  
+  void openConfig();
+  void closeConfig();
+
 public:
   CTSimApp();
   bool OnInit();
@@ -223,6 +227,8 @@ public:
   void setIconForFrame (wxFrame* pFrame);
   wxConfig* getConfig()
   { return m_pConfig; }
+  bool getAskDeleteNewDocs() const { return m_bSetModifyNewDocs; }
+  void setAskDeleteNewDocs(bool bAsk) { m_bSetModifyNewDocs = bAsk; }
 
   wxDocTemplate* getDocTemplImage() { return m_pDocTemplImage; }
   wxDocTemplate* getDocTemplProjection() { return m_pDocTemplProjection; }
index 0afae267baa58b0d64d4f0a9615943fe46eae1ad..8a3bf0ae0902408e287932a7b999ee90ac12965a 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: dialogs.cpp,v 1.29 2001/02/11 04:56:38 kevin Exp $
+**  $Id: dialogs.cpp,v 1.30 2001/02/11 21:57:08 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
@@ -198,6 +198,66 @@ DialogGetComparisonImage::getMakeDifferenceImage()
 }
 
 
+/////////////////////////////////////////////////////////////////////
+// CLASS DiaglogPreferences Implementation
+/////////////////////////////////////////////////////////////////////
+
+DialogPreferences::DialogPreferences (wxWindow* pParent, const char* const pszTitle, 
+                                      bool bAdvancedOptions, bool bAskDeleteNewDocs)
+: wxDialog (pParent, -1, pszTitle, wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE | wxCAPTION)
+{
+  wxBoxSizer* pTopSizer = new wxBoxSizer (wxVERTICAL);
+  
+  pTopSizer->Add (new wxStaticText (this, -1, pszTitle), 0, wxALIGN_CENTER | wxTOP | wxLEFT | wxRIGHT, 5);
+  
+  pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+  
+  m_pCBAdvancedOptions = new wxCheckBox (this, -1, "", wxDefaultPosition, wxSize(100, 25), 0);
+  m_pCBAdvancedOptions->SetValue (bAdvancedOptions);
+
+  m_pCBAskDeleteNewDocs = new wxCheckBox (this, -1, "", wxDefaultPosition, wxSize(100, 25), 0);
+  m_pCBAskDeleteNewDocs->SetValue (bAskDeleteNewDocs);
+
+  wxFlexGridSizer *pGridSizer = new wxFlexGridSizer (2);
+  pGridSizer->Add (m_pCBAdvancedOptions, 0, wxALIGN_CENTER_VERTICAL);
+  pGridSizer->Add (new wxStaticText (this, -1, "Show Advanced Options"), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+  pGridSizer->Add (m_pCBAskDeleteNewDocs, 0, wxALIGN_CENTER_VERTICAL);
+  pGridSizer->Add (new wxStaticText (this, -1, "Ask Save New Documents Before Closing"), 0, wxALIGN_LEFT | wxALIGN_CENTER_VERTICAL);
+  pTopSizer->Add (pGridSizer, 1, wxALL, 10);
+  
+  pTopSizer->Add (new wxStaticLine (this, -1, wxDefaultPosition, wxSize(3,3), wxHORIZONTAL), 0, wxEXPAND | wxALL, 5);
+  
+  wxBoxSizer* pButtonSizer = new wxBoxSizer (wxHORIZONTAL);
+  wxButton* pButtonOk = new wxButton (this, wxID_OK, "Okay");
+  wxButton* pButtonCancel = new wxButton (this, wxID_CANCEL, "Cancel");
+  pButtonSizer->Add (pButtonOk, 0, wxEXPAND | wxALL, 10);
+  pButtonSizer->Add (pButtonCancel, 0, wxEXPAND | wxALL, 10);
+  
+  pTopSizer->Add (pButtonSizer, 0, wxALIGN_CENTER);
+  
+  SetAutoLayout (true);
+  SetSizer (pTopSizer);
+  pTopSizer->Fit (this);
+  pTopSizer->SetSizeHints (this);
+}
+
+DialogPreferences::~DialogPreferences ()
+{
+}
+
+bool
+DialogPreferences::getAdvancedOptions ()
+{
+  return static_cast<bool>(m_pCBAdvancedOptions->GetValue());
+}
+
+bool
+DialogPreferences::getAskDeleteNewDocs ()
+{
+  return static_cast<bool>(m_pCBAskDeleteNewDocs->GetValue());
+}
+
+
 /////////////////////////////////////////////////////////////////////
 // CLASS DiaglogGetMinMax Implementation
 /////////////////////////////////////////////////////////////////////
index 8311bb2e556268285f7ef59382e832e16b368e4f..92ba70ce67f9a5b256c19e2ebb45dbb4b8d20aec 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: dialogs.h,v 1.24 2001/02/11 04:56:38 kevin Exp $
+**  $Id: dialogs.h,v 1.25 2001/02/11 21:57:08 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
@@ -88,6 +88,21 @@ class DialogGetComparisonImage : public wxDialog
 };
 
 
+class DialogPreferences : public wxDialog
+{
+ public:
+    DialogPreferences (wxWindow* pParent, const char* const pszTitle, bool bAdvanced, bool bAskNewDocs);
+    virtual ~DialogPreferences ();
+
+    bool getAdvancedOptions ();
+    bool getAskDeleteNewDocs ();
+
+ private:
+    wxCheckBox* m_pCBAdvancedOptions;
+    wxCheckBox* m_pCBAskDeleteNewDocs;
+};
+
+
 class ImageFile;
 class DialogGetMinMax : public wxDialog
 {
index ce66ec1eac16c8e9bdba27e70a98209e4171b107..2743605f22dc2be82f6d1349a21062766f7b4de2 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: views.cpp,v 1.102 2001/02/11 04:56:38 kevin Exp $
+**  $Id: views.cpp,v 1.103 2001/02/11 21:57:08 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
@@ -398,7 +398,8 @@ ImageFileView::OnCompare (wxCommandEvent& event)
           << " and " << pCompareDoc->GetFirstView()->GetFrame()->GetTitle().c_str() << ": "
           << os.str().c_str();
         pDifferenceImage->labelAdd (os.str().c_str());
-        pDifferenceDoc->Modify (true);
+        if (theApp->getAskDeleteNewDocs())
+          pDifferenceDoc->Modify (true);
         pDifferenceDoc->UpdateAllViews (this);
         pDifferenceDoc->getView()->OnUpdate (this, NULL);
         pDifferenceDoc->getView()->getFrame()->Show(true);
@@ -414,7 +415,8 @@ ImageFileView::OnInvertValues (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   rIF.invertPixelValues (rIF);
   rIF.labelAdd ("Invert Pixel Values");
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+          GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -424,7 +426,8 @@ ImageFileView::OnSquare (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   rIF.square (rIF);
   rIF.labelAdd ("Square Pixel Values");
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -434,7 +437,8 @@ ImageFileView::OnSquareRoot (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   rIF.sqrt (rIF);
   rIF.labelAdd ("Square-root Pixel Values");
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -444,7 +448,8 @@ ImageFileView::OnLog (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   rIF.log (rIF);
   rIF.labelAdd ("Logrithm base-e Pixel Values");
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -454,7 +459,8 @@ ImageFileView::OnExp (wxCommandEvent& event)
   ImageFile& rIF = GetDocument()->getImageFile();
   rIF.exp (rIF);
   rIF.labelAdd ("Exponent base-e Pixel Values");
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -490,7 +496,8 @@ ImageFileView::OnAdd (wxCommandEvent& event)
       newImage.labelsCopy (rRHSIF, s.c_str());
       newImage.labelAdd (os.str().c_str());
       *theApp->getLog() << os.str().c_str() << "\n";
-      pNewDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pNewDoc->Modify (true);
       pNewDoc->UpdateAllViews (this);
       pNewDoc->getView()->OnUpdate (this, NULL);
       pNewDoc->getView()->getFrame()->Show(true);
@@ -530,7 +537,8 @@ ImageFileView::OnSubtract (wxCommandEvent& event)
       newImage.labelsCopy (rRHSIF, s.c_str());
       newImage.labelAdd (os.str().c_str());
       *theApp->getLog() << os.str().c_str() << "\n";
-      pNewDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pNewDoc->Modify (true);
       pNewDoc->UpdateAllViews (this);
       pNewDoc->getView()->OnUpdate (this, NULL);
       pNewDoc->getView()->getFrame()->Show(true);
@@ -570,7 +578,8 @@ ImageFileView::OnMultiply (wxCommandEvent& event)
       newImage.labelsCopy (rRHSIF, s.c_str());
       newImage.labelAdd (os.str().c_str());
       *theApp->getLog() << os.str().c_str() << "\n";
-      pNewDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pNewDoc->Modify (true);
       pNewDoc->UpdateAllViews (this);
       pNewDoc->getView()->OnUpdate (this, NULL);
       pNewDoc->getView()->getFrame()->Show(true);
@@ -610,7 +619,8 @@ ImageFileView::OnDivide (wxCommandEvent& event)
       newImage.labelsCopy (rRHSIF, s.c_str());
       newImage.labelAdd (os.str().c_str());
       *theApp->getLog() << os.str().c_str() << "\n";
-      pNewDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pNewDoc->Modify (true);
       pNewDoc->UpdateAllViews (this);
       pNewDoc->getView()->OnUpdate (this, NULL);
       pNewDoc->getView()->getFrame()->Show(true);
@@ -628,7 +638,8 @@ ImageFileView::OnFFT (wxCommandEvent& event)
   rIF.labelAdd ("FFT Image");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -640,7 +651,8 @@ ImageFileView::OnIFFT (wxCommandEvent& event)
   rIF.labelAdd ("IFFT Image");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -652,7 +664,8 @@ ImageFileView::OnFFTRows (wxCommandEvent& event)
   rIF.labelAdd ("FFT Rows");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -664,7 +677,8 @@ ImageFileView::OnIFFTRows (wxCommandEvent& event)
   rIF.labelAdd ("IFFT Rows");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -676,7 +690,8 @@ ImageFileView::OnFFTCols (wxCommandEvent& event)
   rIF.labelAdd ("FFT Columns");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -688,7 +703,8 @@ ImageFileView::OnIFFTCols (wxCommandEvent& event)
   rIF.labelAdd ("IFFT Columns");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 #endif
@@ -702,7 +718,8 @@ ImageFileView::OnFourier (wxCommandEvent& event)
   rIF.labelAdd ("Fourier Image");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -715,7 +732,8 @@ ImageFileView::OnInverseFourier (wxCommandEvent& event)
   rIF.labelAdd ("Inverse Fourier Image");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -727,7 +745,8 @@ ImageFileView::OnShuffleNaturalToFourierOrder (wxCommandEvent& event)
   rIF.labelAdd ("Shuffle Natural To Fourier Order");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -739,7 +758,8 @@ ImageFileView::OnShuffleFourierToNaturalOrder (wxCommandEvent& event)
   rIF.labelAdd ("Shuffle Fourier To Natural Order");
   m_bMinSpecified = false;
   m_bMaxSpecified = false;
-  GetDocument()->Modify (true);
+  if (theApp->getAskDeleteNewDocs())
+     GetDocument()->Modify (true);
   GetDocument()->UpdateAllViews (this);
 }
 
@@ -752,7 +772,8 @@ ImageFileView::OnMagnitude (wxCommandEvent& event)
     rIF.labelAdd ("Magnitude of complex-image");
     m_bMinSpecified = false;
     m_bMaxSpecified = false;
-    GetDocument()->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       GetDocument()->Modify (true);
     GetDocument()->UpdateAllViews (this);
   }
 }
@@ -766,7 +787,8 @@ ImageFileView::OnPhase (wxCommandEvent& event)
     rIF.labelAdd ("Phase of complex-image");
     m_bMinSpecified = false;
     m_bMaxSpecified = false;
-    GetDocument()->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       GetDocument()->Modify (true);
     GetDocument()->UpdateAllViews (this);
   }
 }
@@ -1110,7 +1132,8 @@ ImageFileView::OnScaleSize (wxCommandEvent& event)
     rScaledIF.labelAdd (os.str().c_str());
     rIF.scaleImage (rScaledIF);
     *theApp->getLog() << os.str().c_str() << "\n";
-    pScaledDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       pScaledDoc->Modify (true);
     pScaledDoc->UpdateAllViews (this);
     pScaledDoc->getView()->OnUpdate (this, NULL);
     pScaledDoc->getView()->getFrame()->Show(true);
@@ -1213,7 +1236,8 @@ ImageFileView::OnPlotRow (wxCommandEvent& event)
       delete pYImag;
       delete pYMag;
     }
-    pPlotDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       pPlotDoc->Modify (true);
     pPlotDoc->UpdateAllViews ();
     pPlotDoc->getView()->OnUpdate (this, NULL);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1298,7 +1322,8 @@ ImageFileView::OnPlotCol (wxCommandEvent& event)
       delete pYImag;
       delete pYMag;
     }
-    pPlotDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       pPlotDoc->Modify (true);
     pPlotDoc->UpdateAllViews ();
     pPlotDoc->getView()->OnUpdate (this, NULL);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1392,7 +1417,8 @@ ImageFileView::OnPlotFFTRow (wxCommandEvent& event)
     delete pYMag;
     delete [] pcIn;
     
-    pPlotDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       pPlotDoc->Modify (true);
     pPlotDoc->UpdateAllViews ();
     pPlotDoc->getView()->OnUpdate (this, NULL);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1492,7 +1518,8 @@ ImageFileView::OnPlotFFTCol (wxCommandEvent& event)
     delete pdTemp;
     delete [] pcIn;
     
-    pPlotDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+       pPlotDoc->Modify (true);
     pPlotDoc->UpdateAllViews ();
     pPlotDoc->getView()->OnUpdate (this, NULL);
     pPlotDoc->getView()->getFrame()->Show(true);
@@ -1582,7 +1609,8 @@ ImageFileView::OnCompareCol (wxCommandEvent& event)
       delete pX;
       delete pY1;
       delete pY2;
-      pPlotDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pPlotDoc->Modify (true);
       pPlotDoc->UpdateAllViews ();
       pPlotDoc->getView()->OnUpdate (this, NULL);
       pPlotDoc->getView()->getFrame()->Show(true);
@@ -1673,7 +1701,8 @@ ImageFileView::OnCompareRow (wxCommandEvent& event)
       delete pX;
       delete pY1;
       delete pY2;
-      pPlotDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pPlotDoc->Modify (true);
       pPlotDoc->UpdateAllViews ();
       pPlotDoc->getView()->OnUpdate (this, NULL);
       pPlotDoc->getView()->getFrame()->Show(true);
@@ -1739,7 +1768,8 @@ ImageFileView::OnPlotHistogram (wxCommandEvent& event)
       rPlotFile.addDescription (os.str().c_str());
       delete pX;
       delete pY;
-      pPlotDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pPlotDoc->Modify (true);
       pPlotDoc->UpdateAllViews ();
       pPlotDoc->getView()->OnUpdate (this, NULL);
       pPlotDoc->getView()->getFrame()->Show(true);
@@ -1937,7 +1967,8 @@ PhantomFileView::OnProjections (wxCommandEvent& event)
         GetDocumentManager()->ActivateView (projView, true, false);
       }
       ::wxYield();
-      pProjectionDoc-> Modify(true);
+      if (theApp->getAskDeleteNewDocs())
+        pProjectionDoc-> Modify(true);
       pProjectionDoc->UpdateAllViews (this);
     }
   }
@@ -1984,7 +2015,8 @@ PhantomFileView::OnRasterize (wxCommandEvent& event)
       }
       pRasterDoc->setImageFile (pImageFile);
 
-      pRasterDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pRasterDoc->Modify (true);
       pRasterDoc->UpdateAllViews (this);
       pRasterDoc->getView()->getFrame()->Show(true);
       std::ostringstream os;
@@ -2277,7 +2309,8 @@ ProjectionFileView::OnConvertPolar (wxCommandEvent& event)
       << strInterpolation.c_str();
     *theApp->getLog() << os.str().c_str() << "\n";
     rIF.labelAdd (os.str().c_str());
-    pPolarDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+      pPolarDoc->Modify (true);
     pPolarDoc->UpdateAllViews ();
     pPolarDoc->getView()->OnUpdate (this, NULL);
     pPolarDoc->getView()->getFrame()->Show(true);
@@ -2311,7 +2344,8 @@ ProjectionFileView::OnConvertFFTPolar (wxCommandEvent& event)
       << strInterpolation.c_str() << ", zeropad=" << m_iDefaultPolarZeropad;
     *theApp->getLog() << os.str().c_str() << "\n";
     rIF.labelAdd (os.str().c_str());
-    pPolarDoc->Modify (true);
+    if (theApp->getAskDeleteNewDocs())
+      pPolarDoc->Modify (true);
     pPolarDoc->UpdateAllViews ();
     pPolarDoc->getView()->OnUpdate (this, NULL);
     pPolarDoc->getView()->getFrame()->Show(true);
@@ -2394,7 +2428,8 @@ ProjectionFileView::OnReconstructFBP (wxCommandEvent& event)
         return;
       }
       pReconDoc->setImageFile (pImageFile);
-      pReconDoc->Modify (true);
+      if (theApp->getAskDeleteNewDocs())
+        pReconDoc->Modify (true);
       pReconDoc->UpdateAllViews (this);
       if (ImageFileView* rasterView = pReconDoc->getView()) {
         rasterView->OnUpdate (rasterView, NULL);
index 24ee087e5b76cb3702a86d10756de59bfae3088d..3240dddaec496bf582068990002d6f9757e94a37 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (C) 1983-2000 Kevin Rosenberg
 **
-**  $Id: pjrec.cpp,v 1.22 2001/02/09 14:34:16 kevin Exp $
+**  $Id: pjrec.cpp,v 1.23 2001/02/11 21:57:08 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
@@ -48,7 +48,7 @@ static struct option my_options[] =
   {0, 0, 0, 0}
 };
 
-static const char* g_szIdStr = "$Id: pjrec.cpp,v 1.22 2001/02/09 14:34:16 kevin Exp $";
+static const char* g_szIdStr = "$Id: pjrec.cpp,v 1.23 2001/02/11 21:57:08 kevin Exp $";
 
 void 
 pjrec_usage (const char *program)
@@ -139,7 +139,7 @@ pjrec_main (int argc, char * const argv[])
   std::string sOptFilterMethodName (ProcessSignal::convertFilterMethodIDToName (ProcessSignal::FILTER_METHOD_CONVOLUTION));
   std::string sOptFilterGenerationName (ProcessSignal::convertFilterGenerationIDToName (ProcessSignal::FILTER_GENERATION_DIRECT));
   std::string sOptInterpName (Backprojector::convertInterpIDToName (Backprojector::INTERP_LINEAR));
-  std::string sOptBackprojectName (Backprojector::convertBackprojectIDToName (Backprojector::BPROJ_IDIFF3));
+  std::string sOptBackprojectName (Backprojector::convertBackprojectIDToName (Backprojector::BPROJ_IDIFF));
   int iOptPreinterpolationFactor = 1;
   int nx, ny;
   char *endptr;