X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fphantom.h;h=b1cb50fe9c7132584299c34bd896d1e802940946;hp=5769b258610f162d2e0b49545cb943551be135a2;hb=747a2ec9e0f3c49723b36da0cc77270fbecc9dfe;hpb=c5e7140bd08b8c8f527713e8dc861bcb7ee5f633 diff --git a/include/phantom.h b/include/phantom.h index 5769b25..b1cb50f 100644 --- a/include/phantom.h +++ b/include/phantom.h @@ -7,9 +7,7 @@ ** Date Started: July 1, 1984 ** ** This is part of the CTSim program -** Copyright (c) 1983-2001 Kevin Rosenberg -** -** $Id: phantom.h,v 1.22 2001/02/08 06:25:07 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 @@ -59,7 +57,7 @@ class PhantomElement 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;} @@ -79,36 +77,34 @@ class PhantomElement 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 (); - 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); - void calcEllipsePoints (double x[], double y[], const int pts, const double u, const double v); static int numCirclePoints (double theta); @@ -120,8 +116,8 @@ class PhantomElement 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; @@ -136,9 +132,7 @@ class Phantom public: 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 (); @@ -147,26 +141,25 @@ class Phantom ~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); - bool createFromPhantom (const int phmid); - - bool createFromFile (const char* const fname); - + bool createFromPhmFile (const char* const fname); + bool createFromImageFile (const char* const fname); bool fileWrite (const char* const fname); void addPElem (const PhantomElement& pelem); - 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 int colStart, const int colCount, bool bStoreAtColumnPos) const; - 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, + const int colStart, const int colCount, bool bStoreAtColumnPos) const; + 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 printDefinitions (std::ostringstream& os) const; @@ -176,33 +169,33 @@ class Phantom const std::string& name() const {return m_name;} const int id() const {return m_id;} -#if HAVE_SGP +#ifdef HAVE_SGP void show () const; void show (SGP& sgp) const; void draw (SGP& sgp) const; #endif - + void addStdHerman (); - void addStdHermanBordered (); void addStdSheppLogan (); - void addStdSheppLoganBordered (); void print (std::ostream& os) const; void print (std::ostringstream& os) const; - double maxAxisLength () const + double maxAxisLength () const { return maxValue (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& listPElem() {return m_listPElem;} + std::list& listPElem() {return m_listPElem;} const std::list& listPElem() const {return m_listPElem;} const int nPElem() const {return m_nPElem;} + const bool isImagefile(void) const { return m_im != NULL; } + const ImageFile* getImagefile() const { return m_im; } static const int getPhantomCount() {return s_iPhantomCount;} static const char** getPhantomNameArray() {return s_aszPhantomName;} @@ -213,7 +206,7 @@ class Phantom 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 m_listPElem; // pelem lists std::string m_name; @@ -223,6 +216,7 @@ class Phantom static const char* s_aszPhantomName[]; static const char* s_aszPhantomTitle[]; static const int s_iPhantomCount; + ImageFile* m_im; // If defining a phantom from an ImageFile void init();