From: Kevin M. Rosenberg Date: Tue, 2 Jan 2001 05:33:37 +0000 (+0000) Subject: r327: Added textfile output X-Git-Tag: debian-4.5.3-3~690 X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=commitdiff_plain;h=9f7d379c2b03f3c09907cfd885072433e0428042 r327: Added textfile output --- diff --git a/include/phantom.h b/include/phantom.h index e30ce87..7d9b433 100644 --- a/include/phantom.h +++ b/include/phantom.h @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: phantom.h,v 1.17 2000/12/16 06:12:47 kevin Exp $ +** $Id: phantom.h,v 1.18 2001/01/02 05:33:37 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 @@ -64,8 +64,10 @@ class PhantomElement const int nOutlinePoints() const {return m_nPoints;} double* rectLimits() {return m_rectLimits;} - double* xOutline() {return m_xOutline;} - double* yOutline() {return m_yOutline;} + 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;} @@ -76,7 +78,9 @@ class PhantomElement 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;} + const double v() const {return m_v;} + + void printDefinition (std::ostream& os) const; private: PhmElemType m_type; // pelem type (box, ellipse, etc) @@ -97,7 +101,8 @@ class PhantomElement 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 PhmElemType convertNameToType (const char* const typeName); + static const char* const convertTypeToName (PhmElemType iType); void makeTransformMatrices (); @@ -153,6 +158,8 @@ class Phantom bool createFromPhantom (const int phmid); bool createFromFile (const char* const fname); + + bool fileWrite (const char* const fname); void addPElem (const PhantomElement& pelem); @@ -161,6 +168,8 @@ class Phantom void convertToImagefile (ImageFile& im, const int in_nsample, const int trace, const int colStart, const int colCount, bool bStoreAtColumnPos) const; void convertToImagefile (ImageFile& im, const int in_nsample, const int trace) const; + + void printDefinitions (std::ostream& os) const; bool fail() const {return m_fail;} const std::string& failMessage() const {return m_failMessage;} @@ -178,7 +187,7 @@ class Phantom void addStdSheppLogan (); void addStdSheppLoganBordered (); - void print () const; + void print (std::ostream& os) const; const double maxAxisLength () const {return (((m_xmax - m_xmin) > (m_ymax - m_ymin)) ? (m_xmax - m_xmin) : (m_ymax - m_ymin));} @@ -187,7 +196,7 @@ class Phantom 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;} diff --git a/libctsim/phantom.cpp b/libctsim/phantom.cpp index 9125e36..d8fa862 100644 --- a/libctsim/phantom.cpp +++ b/libctsim/phantom.cpp @@ -9,7 +9,7 @@ ** This is part of the CTSim program ** Copyright (C) 1983-2000 Kevin Rosenberg ** -** $Id: phantom.cpp,v 1.23 2000/12/21 03:40:58 kevin Exp $ +** $Id: phantom.cpp,v 1.24 2001/01/02 05:33:37 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 @@ -226,6 +226,15 @@ Phantom::createFromFile (const char* const fname) return (bGoodFile); } +bool +Phantom::fileWrite (const char* const fname) +{ + fstream file (fname, ios::out); + + if (! file.fail()) + printDefinitions (file); + return ! file.fail(); +} /* NAME * addPElem Add pelem @@ -274,26 +283,32 @@ Phantom::addPElem (const char *type, const double cx, const double cy, const dou */ void -Phantom::print () const +Phantom::print (std::ostream& os) const { - printf("PRINTING Phantom\n\n"); - printf("number of pelems in Phantom = %d\n", m_nPElem); - printf("limits: xmin=%8.2g ymin=%8.2g xmax=%8.2g ymax=%8.2g\n", - m_xmin, m_ymin, m_xmax, m_ymax); + os << "Number of PElements: " << m_nPElem << "\n"; + os << "Limits: xmin=" << m_xmin << ", ymin=" << m_ymin << ", xmax=" << m_xmax << ", ymax=" << m_ymax << "\n"; - for (PElemIterator i = m_listPElem.begin(); i != m_listPElem.end(); i++) { - printf("PELEM:\n"); - printf("# pts=%3d atten = %7.4f rot = %7.2f (deg)\n", - (*i)->nOutlinePoints(), (*i)->atten(), convertRadiansToDegrees ((*i)->rot())); - - printf("xmin=%7.3g ymin=%7.3g xmax=%7.3g ymax=%7.3g\n", - (*i)->xmin(), (*i)->ymin(), (*i)->xmax(), (*i)->ymax()); - - // for (int i = 0; i < m_nPoints; i++) - // printf("\t%8.3g %8.3g\n", i->xOutline()[i], i->yOutline()[i]); + for (PElemConstIterator i = m_listPElem.begin(); i != m_listPElem.end(); i++) { + const PhantomElement& rPE = **i; + os << "PhantomElement: nPoints=" << rPE.nOutlinePoints(); + os << ", atten=" << rPE.atten() << " rot=" << convertRadiansToDegrees (rPE.rot()) << "\n"; + os << "xmin=" << rPE.xmin() << ", ymin=" << rPE.ymin() << ", xmax=" << rPE.xmax() << ", ymax=" << rPE.ymax() << "\n"; + + if (false) + for (int i = 0; i < rPE.nOutlinePoints(); i++) + os << rPE.xOutline()[i] << "," << rPE.yOutline()[i] << "\n"; } } - + +void +Phantom::printDefinitions (std::ostream& os) const +{ + for (PElemConstIterator i = m_listPElem.begin(); i != m_listPElem.end(); i++) { + const PhantomElement& rPE = **i; + rPE.printDefinition (os); + } +} + /* NAME * show Show vector outline of Phantom to user @@ -553,12 +568,20 @@ PhantomElement::PhantomElement (const char *type, const double cx, const double m_rectLimits[2] = m_xmax; m_rectLimits[3] = m_ymax; } + PhantomElement::~PhantomElement () { delete m_xOutline; delete m_yOutline; } + +void +PhantomElement::printDefinition (std::ostream& os) const +{ + os << convertTypeToName (m_type) << " " << m_cx << " " << m_cy << " " << m_u << " " + << m_v << " " << convertRadiansToDegrees (m_rot) << " " << m_atten << "\n"; +} PhmElemType PhantomElement::convertNameToType (const char* const typeName) @@ -580,6 +603,26 @@ PhantomElement::convertNameToType (const char* const typeName) return (type); } + +const char* const +PhantomElement::convertTypeToName (PhmElemType iType) +{ + static char* pszType = "Unknown"; + + if (iType == PELEM_RECTANGLE) + pszType = "rectangle"; + else if (iType == PELEM_TRIANGLE) + pszType = "triangle"; + else if (iType == PELEM_ELLIPSE) + pszType = "ellipse"; + else if (iType == PELEM_SECTOR) + pszType = "sector"; + else if (iType == PELEM_SEGMENT) + pszType = "segment"; + + return pszType; +} + void PhantomElement::makeTransformMatrices ()