LDicomDS::GetDateRangeValue

#include "Ltdic.h"

L_INT LDicomDS::GetDateRangeValue(pElement, nIndex, pValue)

pDICOMELEMENT pElement;

/* pointer to a DICOMELEMENT structure */

L_UINT32 nIndex;

/* index used when multiple values are stored */

pVALUEDATERANGE pValue;

/* pointer to a VALUEDATERANGE structure */

Fills the VALUEDATERANGE structure, with the date range information stored in the Value Field of the specified element.

Parameter

Description

pElement

Pointer to a DICOMELEMENT structure within the Data Set.

nIndex

Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.

pValue

Pointer to a VALUEDATERANGE structure that will be filled with the date range value.

Returns

0

SUCCESS

>0

An error occurred. Refer to Return Codes.

Comments

This function can be called only if the Value Representation of the Data Element is VR_DA. For more information about Value Representations, refer to Default Value Representation Table.

Required DLLs and Libraries

LTDIC

For a listing of the exact DLLs and Libraries needed, based on the toolkit version, refer to Files To Be Included With Your Application

See Also

Functions:

LDicomDS::SetDateRangeValue, LDicomDS::GetDateValue, LDicomDS::SetDateValue

Topics:

Working with Data Sets

 

How to Disable the Automatic Loading of the default DICOM IOD Table

Example

This example gets the range value for an element.

L_VOID ShowRangeValue(LDicomDS *pDS, pDICOMELEMENT pElement)
{
   L_INT32              i;
   L_INT32              nCount;
   L_TCHAR              szText[256];
   VALUEDATERANGE       DateRange;
   VALUETIMERANGE       TimeRange;
   VALUEDATETIMERANGE   DateTimeRange;
   L_INT                nRet;
   nCount = pDS->GetCountValue(pElement);
   if (((pElement->nLength == ELEMENT_LENGTH_MAX)) || 
      (pElement->nLength > 1024) || 
      (nCount == 0))
   {
      return;
   }
   switch (pElement->nVR)
   {
   case VR_DA:    // Date Range
      for (i = 0; i < nCount; i++)
      {
         nRet = pDS->GetDateRangeValue(pElement, i, &DateRange);
         if(nRet == DICOM_SUCCESS)
         {
            wsprintf(szText, TEXT("Type: %ld - Date1: %02u/%02u/%u - Date2: %02u/%02u/%u"),
                     DateRange.nFlags,
                     DateRange.Date1.nMonth, DateRange.Date1.nDay, DateRange.Date1.nYear,
                     DateRange.Date2.nMonth, DateRange.Date2.nDay, DateRange.Date2.nYear);
            AfxMessageBox(szText);
         }
      }
      break;
   case VR_TM:    // Time Range
      for (i = 0; i < nCount; i++)
      {
         nRet = pDS->GetTimeRangeValue(pElement, i, &TimeRange);
         if(nRet == DICOM_SUCCESS)
         {
            wsprintf(szText, TEXT("Type: %ld - Time1: %02u:%02u:%u.%lu - Time2: %02u:%02u:%u.%lu"),
                     TimeRange.nFlags,
                     TimeRange.Time1.nHours, TimeRange.Time1.nMinutes, TimeRange.Time1.nSeconds, TimeRange.Time1.nFractions,
                     TimeRange.Time2.nHours, TimeRange.Time2.nMinutes, TimeRange.Time2.nSeconds, TimeRange.Time2.nFractions);
            AfxMessageBox(szText);
         }
      }
      break;
   case VR_DT:    // Date Time
      for (i = 0; i < nCount; i++)
      {
         nRet = pDS->GetDateTimeRangeValue(pElement, i, &DateTimeRange);
         if(nRet == DICOM_SUCCESS)
         {
            wsprintf(szText, TEXT("Type: %ld - DateTime1: %02u/%02u/%u  %02u:%02u:%u.%lu&%lu - DateTime2: %02u/%02u/%u  %02u:%02u:%u.%lu&%lu"), 
                     DateTimeRange.nFlags,
            DateTimeRange.DateTime1.nMonth, DateTimeRange.DateTime1.nDay, DateTimeRange.DateTime1.nYear,
            DateTimeRange.DateTime1.nHours, DateTimeRange.DateTime1.nMinutes, DateTimeRange.DateTime1.nSeconds, DateTimeRange.DateTime1.nFractions, DateTimeRange.DateTime1.nOffset,
            DateTimeRange.DateTime2.nMonth, DateTimeRange.DateTime2.nDay, DateTimeRange.DateTime2.nYear,
            DateTimeRange.DateTime2.nHours, DateTimeRange.DateTime2.nMinutes, DateTimeRange.DateTime2.nSeconds, DateTimeRange.DateTime2.nFractions, DateTimeRange.DateTime2.nOffset);
            AfxMessageBox(szText);
         }
      }
      break;
   default:
      wsprintf(szText, TEXT("Element is not a range value element!"));
      AfxMessageBox(szText);
      break;
   }
   pDS->FreeValue(pElement);
}
L_INT LDicomDS_GetDateRangeValueExample()
{
   L_INT          nRet;
   LDicomDS      *pDS;
   pDICOMELEMENT  pElement;
   pDS = new LDicomDS(NULL);
   nRet = pDS->LoadDS(TEXT("%UserProfile%\\My Documents\\LEADTOOLS Images\\Medical Images\\image1.dic"), 0);
   if(nRet != DICOM_SUCCESS)
      return nRet;
   pElement = pDS->FindFirstElement(NULL, TAG_STUDY_DATE, FALSE);
   pDS->DeleteElement(pElement);
   pElement = pDS->FindFirstElement(NULL, TAG_STUDY_TIME, FALSE);
   pDS->DeleteElement(pElement);
   pElement = pDS->FindFirstElement(NULL, TAG_CONTRIBUTION_DATETIME, FALSE);
   pDS->DeleteElement(pElement);
   pElement = pDS->InsertElement(NULL, FALSE, TAG_STUDY_DATE, VR_DA, FALSE, 0); 
   VALUEDATERANGE DateRange;
   DateRange.nFlags = VALUE_RANGE_BOTH;
   DateRange.Date1.nDay = 1;
   DateRange.Date1.nMonth = 2;
   DateRange.Date1.nYear = 2005;
   DateRange.Date2.nDay = 10;
   DateRange.Date2.nMonth = 25;
   DateRange.Date2.nYear = 2005;
   pDS->SetDateRangeValue(pElement, &DateRange, 1); 
   ShowRangeValue(pDS, pElement);
   pElement = pDS->InsertElement(NULL, FALSE, TAG_STUDY_TIME, VR_TM, FALSE, 0); 
   VALUETIMERANGE TimeRange;
   TimeRange.nFlags = VALUE_RANGE_BOTH;
   TimeRange.Time1.nHours = 12;
   TimeRange.Time1.nMinutes = 0;
   TimeRange.Time1.nSeconds = 0;
   TimeRange.Time1.nFractions = 0;
   TimeRange.Time2.nHours = 24;
   TimeRange.Time2.nMinutes = 30;
   TimeRange.Time2.nSeconds = 0;
   TimeRange.Time2.nFractions = 0;
   pDS->SetTimeRangeValue(pElement, &TimeRange, 1); 
   ShowRangeValue(pDS, pElement);
   pElement = pDS->InsertElement(NULL, FALSE, TAG_CONTRIBUTION_DATETIME, VR_DT, FALSE, 0); 
   VALUEDATETIMERANGE DateTimeRange;
   DateTimeRange.nFlags = VALUE_RANGE_BOTH;
   DateTimeRange.DateTime1.nDay = 1;
   DateTimeRange.DateTime1.nMonth = 2;
   DateTimeRange.DateTime1.nYear = 2005;
   DateTimeRange.DateTime1.nHours = 12;
   DateTimeRange.DateTime1.nMinutes = 0;
   DateTimeRange.DateTime1.nSeconds = 0;
   DateTimeRange.DateTime1.nFractions = 0;
   DateTimeRange.DateTime1.nOffset = 0;
   DateTimeRange.DateTime2.nDay = 25;
   DateTimeRange.DateTime2.nMonth = 12;
   DateTimeRange.DateTime2.nYear = 2005;
   DateTimeRange.DateTime2.nHours = 12;
   DateTimeRange.DateTime2.nMinutes = 0;
   DateTimeRange.DateTime2.nSeconds = 0;
   DateTimeRange.DateTime2.nFractions = 0;
   DateTimeRange.DateTime2.nOffset = 0;
   pDS->SetDateTimeRangeValue(pElement, &DateTimeRange, 1);
   ShowRangeValue(pDS, pElement);
   pDS->SaveDS(L_TEXT("d:\\temp\\test.dcm"), 0);
   delete pDS;
   return DICOM_SUCCESS;
}