r2130: *** empty log message ***
[ctsim.git] / libctsim / ctndicom.cpp
index 50d3a7dd6ffd843ec56e052c734e41a943f3bc5a..4a96d02bd1470bc097dcb2c9bf57e000b52a48f6 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctndicom.cpp,v 1.11 2001/03/13 10:35:06 kevin Exp $
+**  $Id: ctndicom.cpp,v 1.14 2002/05/08 08:55:45 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
@@ -40,12 +40,21 @@ DicomImporter::DicomImporter (const char* const pszFile)
   : m_pFile(NULL), m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID), 
   m_pImageFile(NULL), m_pProjections(NULL)
 {
-  unsigned long lOptions = DCM_ORDERLITTLEENDIAN;
+  unsigned long lOptions = DCM_ORDERLITTLEENDIAN | DCM_FORMATCONVERSION;
   DCM_Debug (FALSE);
-  if (DCM_OpenFile (pszFile, lOptions, &m_pFile) != DCM_NORMAL) {
-    m_bFail = true;;
-    m_strFailMessage = "Can't open file ";
-    m_strFailMessage += m_strFilename;
+
+  CONDITION cond = DCM_OpenFile (pszFile, lOptions, &m_pFile);
+  if (cond != DCM_NORMAL) {
+    m_bFail = true;
+    char textbuf [2048]; 
+    CONDITION cond2 = COND_TopCondition (&cond, textbuf, sizeof(textbuf));
+    cond2 = DCM_NORMAL; // testing
+    if (cond2 != DCM_NORMAL) {
+      m_strFailMessage = "DCM_OpenFile failure: ";
+      m_strFailMessage += m_strFilename;
+    } else
+      m_strFailMessage = textbuf;
+
     return;
   }
 
@@ -191,7 +200,7 @@ DicomImporter::loadProjections()
   }
 
   DCM_TAG somatomTag = DCM_MAKETAG(TAG_GROUP_SOMATOM, TAG_MEMBER_SOMATOM_DATA);
-  DCM_ELEMENT elemProjections = {somatomTag, DCM_UNKNOWN, "", 1, 0, NULL};
+  DCM_ELEMENT elemProjections = {somatomTag, DCM_UN, "", 1, 0, NULL};
   if (DCM_GetElementSize (&m_pFile, elemProjections.tag, &lRtnLength) != DCM_NORMAL) {
     m_bFail = true;
     m_strFailMessage = "Can't find projection data";
@@ -319,11 +328,11 @@ DicomExporter::createDicomObject()
   char szIDImageType[] = "ORIGINAL";
   char szIDManufacturerModel[65] = "";
 
-  std::ostringstream osComments;
-  m_pImageFile->printLabelsBrief (osComments);
-  size_t sizeIDComments = osComments.str().length();
-  char* pszIDComments = new char [sizeIDComments+1];
-  strncpy (pszIDComments, osComments.str().c_str(), sizeIDComments);
+  std::ostringstream osPatComments;
+  m_pImageFile->printLabelsBrief (osPatComments);
+  size_t sizePatComments = osPatComments.str().length();
+  char* pszPatComments = new char [sizePatComments+1];
+  strncpy (pszPatComments, osPatComments.str().c_str(), sizePatComments);
 
   snprintf (szIDSOPInstanceUID, sizeof(szIDSOPInstanceUID), "%s.2.1.6.1", szCTSimRoot);
   snprintf (szRelStudyInstanceUID, sizeof(szRelStudyInstanceUID), "%s.2.1.6.1.1", szCTSimRoot);
@@ -384,7 +393,7 @@ DicomExporter::createDicomObject()
     {DCM_IDMODALITY, DCM_CS, "", 1, strlen(szModality), szModality},
     {DCM_IDSOPCLASSUID, DCM_UI, "", 1, strlen(szSOPClassUID), szSOPClassUID},
     {DCM_IDMANUFACTURERMODEL, DCM_LO, "", 1, strlen(szIDManufacturerModel), szIDManufacturerModel},
-    {DCM_PATCOMMENTS, DCM_LT, "", 1, strlen(pszIDComments), pszIDComments},
+    {DCM_PATCOMMENTS, DCM_LT, "", 1, strlen(pszPatComments), pszPatComments},
   };
   int nElemRequired = sizeof (aElemRequired) / sizeof(DCM_ELEMENT);
 
@@ -411,7 +420,7 @@ DicomExporter::createDicomObject()
   cond = DCM_ModifyElements (&m_pObject, &elemPixelData, 1, NULL, 0, &iUpdateCount);
   delete pRawPixels;
 
-  delete pszIDComments;
+  delete pszPatComments;
 
   if (cond != DCM_NORMAL || iUpdateCount != 1) {
     m_bFail = true;