X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=include%2Fphantom.h;h=ca13f36f99f39a6bdca83d06d83d3fcb6e70bfa5;hp=56a8007f72a87c2a02dabb0936087cd7b86a58ee;hb=40ef0ef58e4d5617d7ddb7b1d145e8981b61215f;hpb=1e88cf0f7fa4f690ea9f110e8ed3f2b5338d0a10 diff --git a/include/phantom.h b/include/phantom.h index 56a8007..ca13f36 100644 --- a/include/phantom.h +++ b/include/phantom.h @@ -7,9 +7,9 @@ ** Date Started: July 1, 1984 ** ** This is part of the CTSim program -** Copyright (C) 1983-2000 Kevin Rosenberg +** Copyright (c) 1983-2001 Kevin Rosenberg ** -** $Id: phantom.h,v 1.13 2000/08/25 15:59:13 kevin Exp $ +** $Id: phantom.h,v 1.26 2003/03/15 14:52:36 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 @@ -28,11 +28,9 @@ #ifndef PHANTOM_H #define PHANTOM_H -#include +#include #include "ctsupport.h" -using namespace std; - typedef enum { PELEM_INVALID, PELEM_RECTANGLE, @@ -68,8 +66,9 @@ class PhantomElement double* rectLimits() {return m_rectLimits;} double* xOutline() {return m_xOutline;} double* yOutline() {return m_yOutline;} + double* const xOutline() const {return m_xOutline;} + double* const yOutline() const {return m_yOutline;} 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;} @@ -80,6 +79,9 @@ class PhantomElement const double u() const {return m_u;} const double v() const {return m_v;} + 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 @@ -89,17 +91,17 @@ class PhantomElement 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 - double m_diameter; GRFMTX_2D m_xformPhmToObj; // map from phantom to normalized pelem 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 = 360; - static const double SCALE_PELEM_EXTENT=0.005; // increase pelem limits by 0.5% + static const int POINTS_PER_CIRCLE; + static const double SCALE_PELEM_EXTENT; // increase pelem limits by 0.5% - static PhmElemType PhantomElement::convertNameToType (const char* const typeName); + static const char* const convertTypeToName (PhmElemType iType); + static PhmElemType convertNameToType (const char* const typeName); void makeTransformMatrices (); @@ -134,9 +136,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 (); @@ -156,41 +156,50 @@ class Phantom bool createFromFile (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, const int in_nsample, const int trace, const int colStart, const int colCount) 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 convertToImagefile (ImageFile& im, const int in_nsample, const int trace) const; + void printDefinitions (std::ostream& os) const; + void printDefinitions (std::ostringstream& os) const; bool fail() const {return m_fail;} - const string& failMessage() const {return m_failMessage;} - const string& name() const {return m_name;} + const std::string& failMessage() const {return m_failMessage;} + 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 () const; + void print (std::ostream& os) const; + void print (std::ostringstream& os) const; - const double maxAxisLength () const {return (((m_xmax - m_xmin) > (m_ymax - m_ymin)) ? (m_xmax - m_xmin) : (m_ymax - m_ymin));} + double maxAxisLength () const + { return maxValue (m_xmax - m_xmin, m_ymax - m_ymin); } + + double getDiameterBoundaryCircle() const + { return SQRT2 * maxAxisLength(); } - 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& listPElem() {return m_listPElem;} - const slist& listPElem() const {return m_listPElem;} + std::list& listPElem() {return m_listPElem;} + const std::list& listPElem() const {return m_listPElem;} const int nPElem() const {return m_nPElem;} static const int getPhantomCount() {return s_iPhantomCount;} @@ -204,13 +213,11 @@ class Phantom PhantomComposition m_composition; int m_nPElem; // number of pelems in phantom double m_xmin, m_xmax, m_ymin, m_ymax; // extent of pelems in pelem coordinates - double m_diameter; // diameter of object - mutable slist m_listPElem; // pelem lists - string m_name; + mutable std::list m_listPElem; // pelem lists + std::string m_name; int m_id; bool m_fail; - string m_failMessage; - + std::string m_failMessage; static const char* s_aszPhantomName[]; static const char* s_aszPhantomTitle[]; static const int s_iPhantomCount; @@ -221,7 +228,7 @@ class Phantom Phantom& operator= (const Phantom&); // assignment operator }; -typedef slist::iterator PElemIterator; -typedef slist::const_iterator PElemConstIterator; +typedef std::list::iterator PElemIterator; +typedef std::list::const_iterator PElemConstIterator; #endif