** Date Started: July 1, 1984
**
** This is part of the CTSim program
-** Copyright (c) 1983-2001 Kevin Rosenberg
-**
-** $Id: phantom.h,v 1.25 2001/02/27 03:59:30 kevin Exp $
+** Copyright (c) 1983-2009 Kevin Rosenberg
**
** 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
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() const {return m_nPoints;}
const double u() const {return m_u;}
const double v() const {return m_v;}
+ static PhmElemType convertNameToType (const char* const typeName);
+
void printDefinition (std::ostream& os) const;
void printDefinition (std::ostringstream& os) const;
private:
- PhmElemType m_type; // pelem type (box, ellipse, etc)
- 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
- double m_xmin, m_xmax, m_ymin, m_ymax; // pelem limits
+ PhmElemType m_type; // pelem type (box, ellipse, etc)
+ 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
+ double m_xmin, m_xmax, m_ymin, m_ymax; // pelem limits
GRFMTX_2D m_xformPhmToObj; // map from phantom to normalized pelem coords
- GRFMTX_2D m_xformObjToPhm; // map from normalized pelem coords to phantom coords
+ GRFMTX_2D m_xformObjToPhm; // map from normalized pelem coords to phantom coords
double* m_xOutline;
double* m_yOutline;
double m_rectLimits[4];
static const int POINTS_PER_CIRCLE;
- static const double SCALE_PELEM_EXTENT; // increase pelem limits by 0.5%
+ static const double SCALE_PELEM_EXTENT; // increase pelem limits by 0.5%
- static PhmElemType convertNameToType (const char* const typeName);
static const char* const convertTypeToName (PhmElemType iType);
void makeTransformMatrices ();
typedef enum {
P_PELEMS, // Phantom made of PElems
- P_UNIT_PULSE, // Special phantom, not made of pelems
- P_FILTER // defined only by this type
+ P_UNIT_PULSE, // Special phantom, not made of pelems
+ P_FILTER // defined only by this type
} PhantomComposition;
~Phantom ();
void setComposition (PhantomComposition composition)
- { m_composition = composition; }
+ { m_composition = composition; }
const PhantomComposition getComposition () const
- { return m_composition; }
+ { return m_composition; }
bool createFromPhantom (const char* const phmName);
void addPElem (const char* const composition, const double cx, const double cy, const double u, const double v, const double rot, const double atten);
void convertToImagefile (ImageFile& im, double dViewRatio, const int in_nsample, const int trace) const;
- void convertToImagefile (ImageFile& im, double dViewRatio, const int in_nsample, const int trace,
+ void convertToImagefile (ImageFile& im, double dViewRatio, const int in_nsample, const int trace,
const int colStart, const int colCount, bool bStoreAtColumnPos) const;
- void convertToImagefile (ImageFile& im, int iNX, double dViewRatio, const int in_nsample, const int trace,
+ void convertToImagefile (ImageFile& im, int iNX, double dViewRatio, const int in_nsample, const int trace,
const int colStart, const int colCount, int iStorageOffset) const;
void printDefinitions (std::ostream& os) const;
void show (SGP& sgp) const;
void draw (SGP& sgp) const;
#endif
-
+
void addStdHerman ();
void addStdSheppLogan ();
void print (std::ostream& os) const;
void print (std::ostringstream& os) const;
- double maxAxisLength () const
+ double maxAxisLength () const
{ return maxValue<double> (m_xmax - m_xmin, m_ymax - m_ymin); }
- double getDiameterBoundaryCircle() const
+ double getDiameterBoundaryCircle() const
{ return SQRT2 * maxAxisLength(); }
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;}
- std::list<PhantomElement*>& listPElem() {return m_listPElem;}
+ std::list<PhantomElement*>& listPElem() {return m_listPElem;}
const std::list<PhantomElement*>& listPElem() const {return m_listPElem;}
const int nPElem() const {return m_nPElem;}
private:
PhantomComposition m_composition;
- int m_nPElem; // number of pelems in phantom
+ int m_nPElem; // number of pelems in phantom
double m_xmin, m_xmax, m_ymin, m_ymax; // extent of pelems in pelem coordinates
mutable std::list<PhantomElement*> m_listPElem; // pelem lists
std::string m_name;