X-Git-Url: http://git.kpe.io/?p=ctsim.git;a=blobdiff_plain;f=libctsim%2Fphantom.cpp;h=2b969e87e25128808cc399a2cd23bd95aa5d709a;hp=bf1165499445375848e475861060d00a8762c443;hb=747a2ec9e0f3c49723b36da0cc77270fbecc9dfe;hpb=728543fba0d875b2977ea2b6562df1ee4a6af8f7 diff --git a/libctsim/phantom.cpp b/libctsim/phantom.cpp index bf11654..2b969e8 100644 --- a/libctsim/phantom.cpp +++ b/libctsim/phantom.cpp @@ -78,6 +78,7 @@ Phantom::init () m_composition = P_PELEMS; m_fail = false; m_id = PHM_INVALID; + m_im = NULL; } Phantom::~Phantom () @@ -85,9 +86,10 @@ Phantom::~Phantom () for (PElemIterator i = m_listPElem.begin(); i != m_listPElem.end(); i++) { delete *i; } + if (m_im) + delete m_im; } - const char* Phantom::convertPhantomIDToName (int phmID) { @@ -171,10 +173,10 @@ Phantom::createFromPhantom (const int phmid) /* METHOD IDENTIFICATION -* createFromFile Add PhantomElements from file +* createFromPhmFile Add PhantomElements from file * * SYNOPSIS -* createFromFile (filename) +* createFromPhmFile (filename) * * RETURNS * true if pelem were added @@ -182,7 +184,7 @@ Phantom::createFromPhantom (const int phmid) */ bool -Phantom::createFromFile (const char* const fname) +Phantom::createFromPhmFile (const char* const fname) { bool bGoodFile = true; FILE *fp; @@ -201,7 +203,7 @@ Phantom::createFromFile (const char* const fname) if (status == static_cast(EOF)) break; else if (status != 7) { - sys_error (ERR_WARNING, "Insufficient fields reading phantom file %s [Phantom::createFromFile]", fname); + sys_error (ERR_WARNING, "Insufficient fields reading phantom file %s [Phantom::createFromPhmFile]", fname); bGoodFile = false; } addPElem (pelemtype, cx, cy, u, v, rot, dens); @@ -212,6 +214,32 @@ Phantom::createFromFile (const char* const fname) return (bGoodFile); } +bool +Phantom::createFromImageFile (const char* const fname) +{ + bool bGoodFile = true; + + m_im = new ImageFile (); + if (! m_im || ! m_im->fileRead (fname)) { + sys_error (ERR_SEVERE, "Unable to read image file %s", fname); + bGoodFile = false; + delete m_im; + m_im = NULL; + m_fail = true; + } else { + m_name = fname; + m_id = -1; + m_fail = false; + + if (! m_im->getAxisExtent(m_xmin, m_xmax, m_ymin, m_ymax)) { + m_xmax = m_im->nx() / 2.; m_xmin = -m_xmax; + m_ymax = m_im->ny() / 2.; m_ymin = -m_ymax; + } + } + + return (bGoodFile); +} + bool Phantom::fileWrite (const char* const fname) {