r1985: *** empty log message ***
[ctsim.git] / libctsim / ctndicom.cpp
index f9a311bb2175364e1b9d752973192fc13885022d..fff3f77edbe4dc2c980591b32892e53b6e491868 100644 (file)
@@ -9,7 +9,7 @@
 **  This is part of the CTSim program
 **  Copyright (c) 1983-2001 Kevin Rosenberg
 **
-**  $Id: ctndicom.cpp,v 1.9 2001/03/07 17:33:38 kevin Exp $
+**  $Id: ctndicom.cpp,v 1.13 2002/05/08 07:00:07 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
@@ -37,7 +37,7 @@
 
 
 DicomImporter::DicomImporter (const char* const pszFile)
-  : m_strFilename(pszFile), m_bFail(false), m_iContents(DICOM_CONTENTS_INVALID), 
+  : 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;
@@ -191,7 +191,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,6 +319,12 @@ DicomExporter::createDicomObject()
   char szIDImageType[] = "ORIGINAL";
   char szIDManufacturerModel[65] = "";
 
+  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);
   snprintf (szRelFrameOfReferenceUID, sizeof(szRelFrameOfReferenceUID), "%s.99", szCTSimRoot);
@@ -378,13 +384,13 @@ 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(pszPatComments), pszPatComments},
   };
   int nElemRequired = sizeof (aElemRequired) / sizeof(DCM_ELEMENT);
 
   int iUpdateCount;
   cond = DCM_ModifyElements (&m_pObject, aElemRequired, nElemRequired, NULL, 0, &iUpdateCount);
 
-
   DCM_ELEMENT elemPixelData = {DCM_PXLPIXELDATA, DCM_OT, "", 1, 0, NULL};
 
   unsigned long lRealLength = 2 * m_pImageFile->nx() * m_pImageFile->ny();
@@ -405,6 +411,8 @@ DicomExporter::createDicomObject()
   cond = DCM_ModifyElements (&m_pObject, &elemPixelData, 1, NULL, 0, &iUpdateCount);
   delete pRawPixels;
 
+  delete pszPatComments;
+
   if (cond != DCM_NORMAL || iUpdateCount != 1) {
     m_bFail = true;
     m_strFailMessage = "Error modifying pixel data";