** This is part of the CTSim program
** Copyright (C) 1983-2000 Kevin Rosenberg
**
-** $Id: phantom.h,v 1.3 2000/06/22 10:17:28 kevin Exp $
+** $Id: phantom.h,v 1.13 2000/08/25 15:59:13 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
#define PHANTOM_H
#include <slist>
+#include "ctsupport.h"
+
using namespace std;
typedef enum {
public:
PhantomElement (const char* const type, const double cx, const double cy, const double u, const double v, const double rot, const double atten);
- ~PhantomElement (void);
+ ~PhantomElement ();
- bool isPointInside (double x, double y, const CoordType coord_type);
+ bool isPointInside (double x, double y, const CoordType coord_type) const;
bool clipLineNormalizedCoords (double& x1, double& y1, double& x2, double& y2) const;
bool clipLineWorldCoords (double& x1, double& y1, double& x2, double& y2) const;
- const int nOutlinePoints(void) const {return m_nPoints;}
- double* rectLimits(void) {return m_rectLimits;}
+ const int nOutlinePoints() const {return m_nPoints;}
+ double* rectLimits() {return m_rectLimits;}
double* xOutline() {return m_xOutline;}
double* yOutline() {return m_yOutline;}
- const double atten(void) const {return m_atten;}
- const double diameter(void) const {return m_diameter;}
- const double xmin(void) const {return m_xmin;}
- const double xmax(void) const {return m_xmax;}
- const double ymin(void) const {return m_ymin;}
- const double ymax(void) const {return m_ymax;}
- const double rot(void) const {return m_rot;}
- const double cx(void) const {return m_cx;}
- const double cy(void) const {return m_cy;}
- const double u(void) const {return m_u;}
- const double v(void) const {return m_v;}
+ const double atten() const {return m_atten;}
+ const double diameter() const {return m_diameter;}
+ const double xmin() const {return m_xmin;}
+ const double xmax() const {return m_xmax;}
+ const double ymin() const {return m_ymin;}
+ const double ymax() const {return m_ymax;}
+ const double rot() const {return m_rot;}
+ const double cx() const {return m_cx;}
+ const double cy() const {return m_cy;}
+ const double u() const {return m_u;}
+ const double v() const {return m_v;}
private:
PhmElemType m_type; // pelem type (box, ellipse, etc)
- double m_atten; // X-ray attenuation coefficient
double m_cx, m_cy; // center of pelem
double m_u, m_v; // size of pelem
+ double m_atten; // X-ray attenuation coefficient
double m_rot; // pelem rotation angle (in radians)
double *m_x, *m_y; // ptr to array of points in obj world coord
int m_nPoints; // number of points in outline arrays
static PhmElemType PhantomElement::convertNameToType (const char* const typeName);
- void makeTransformMatrices (void);
+ void makeTransformMatrices ();
- void makeVectorOutline (void);
+ void makeVectorOutline ();
void calcArcPoints (double x[], double y[], const int pts, const double xcent, const double ycent, const double r, const double start, const double stop);
static int numCirclePoints (double theta);
+ PhantomElement (const PhantomElement& rhs); // copy constructor
+ PhantomElement& operator= (const PhantomElement&); // assignment operator
};
P_FILTER // defined only by this type
} PhantomComposition;
-// Phantom class
+//////////////////////////////////////////////////////
+// Phantom Class Declaration
+//////////////////////////////////////////////////////
+
+class SGP;
+class ImageFile;
class Phantom
{
public:
- typedef enum {
- PHM_INVALID,
- PHM_HERMAN, /* Herman head phantom */
- PHM_BHERMAN, /* Bordered Herman head phantom */
- PHM_ROWLAND, /* Rowland head phantom */
- PHM_BROWLAND, /* Bordered Rowland head phantom */
- PHM_UNITPULSE /* Unit pulse phantom */
- } PhantomID;
-
-
- Phantom (void);
+ static const int PHM_INVALID;
+ static const int PHM_HERMAN;
+ static const int PHM_B_HERMAN;
+ static const int PHM_SHEPP_LOGAN;
+ static const int PHM_B_SHEPP_LOGAN;
+ static const int PHM_UNITPULSE;
+
+ Phantom ();
Phantom (const char* const phmName);
- ~Phantom (void);
+ ~Phantom ();
void setComposition (PhantomComposition composition)
{ m_composition = composition; }
- const PhantomComposition getComposition (void) const
+ const PhantomComposition getComposition () const
{ return m_composition; }
bool createFromPhantom (const char* const phmName);
- bool createFromPhantom (const PhantomID phmid);
+ bool createFromPhantom (const int phmid);
bool createFromFile (const char* const fname);
void convertToImagefile (ImageFile& im, const int in_nsample, const int trace) const;
- bool fail(void) const
- {return m_fail;}
-
- const string& name(void) const
- {return m_name;}
-
- const PhantomID id(void) const
- {return m_id;}
+ bool fail() const {return m_fail;}
+ const string& failMessage() const {return m_failMessage;}
+ const string& name() const {return m_name;}
+ const int id() const {return m_id;}
#if HAVE_SGP
- void show (void) const;
- void draw (void) const;
+ void show () const;
+ void show (SGP& sgp) const;
+ void draw (SGP& sgp) const;
#endif
- void addStdHerman (void);
- void addStdHermanBordered (void);
- void addStdRowland (void);
- void addStdRowlandBordered (void);
-
- void print (void) const;
-
- const double maxAxisLength (void) const {return (((m_xmax - m_xmin) > (m_ymax - m_ymin)) ? (m_xmax - m_xmin) : (m_ymax - m_ymin));}
-
- const double diameter(void) const {return m_diameter;}
- const double xmin(void) const {return m_xmin;}
- const double xmax(void) const {return m_xmax;}
- const double ymin(void) const {return m_ymin;}
- const double ymax(void) const {return m_ymax;}
- slist<PhantomElement*>& listPElem(void) {return m_listPElem;}
- const slist<PhantomElement*>& listPElem(void) const {return m_listPElem;}
- const int nPElem(void) const {return m_nPElem;}
+ void addStdHerman ();
+ void addStdHermanBordered ();
+ void addStdSheppLogan ();
+ void addStdSheppLoganBordered ();
+
+ void print () const;
+
+ const double maxAxisLength () const {return (((m_xmax - m_xmin) > (m_ymax - m_ymin)) ? (m_xmax - m_xmin) : (m_ymax - m_ymin));}
+
+ const double diameter() const {return m_diameter;}
+ const double xmin() const {return m_xmin;}
+ const double xmax() const {return m_xmax;}
+ const double ymin() const {return m_ymin;}
+ const double ymax() const {return m_ymax;}
+ slist<PhantomElement*>& listPElem() {return m_listPElem;}
+ const slist<PhantomElement*>& listPElem() const {return m_listPElem;}
+ const int nPElem() const {return m_nPElem;}
+
+ static const int getPhantomCount() {return s_iPhantomCount;}
+ static const char** getPhantomNameArray() {return s_aszPhantomName;}
+ static const char** getPhantomTitleArray() {return s_aszPhantomTitle;}
+ static int convertNameToPhantomID (const char* const phmName);
+ static const char* convertPhantomIDToName (const int phmID);
+ static const char* convertPhantomIDToTitle (const int phmID);
private:
PhantomComposition m_composition;
double m_diameter; // diameter of object
mutable slist<PhantomElement*> m_listPElem; // pelem lists
string m_name;
- PhantomID m_id;
+ int m_id;
bool m_fail;
+ string m_failMessage;
+
+ static const char* s_aszPhantomName[];
+ static const char* s_aszPhantomTitle[];
+ static const int s_iPhantomCount;
- // Standard phantomsa
- static const char PHM_HERMAN_STR[]= "herman";
- static const char PHM_BHERMAN_STR[]= "bherman";
- static const char PHM_ROWLAND_STR[]= "rowland";
- static const char PHM_BROWLAND_STR[]= "browland";
- static const char PHM_UNITPULSE_STR[]= "unitpulse";
- static PhantomID convertNameToPhantomID (const char* const phmName);
- static const char* convertPhantomIDToName (const PhantomID phmID);
+ void init();
- void init(void);
+ Phantom (const Phantom& rhs); // copy constructor
+ Phantom& operator= (const Phantom&); // assignment operator
};
typedef slist<PhantomElement*>::iterator PElemIterator;