#include "Ltdic.h"
L_INT LDicomDS::GetDateRangeValue(pElement, nIndex, pValue)
Fills the VALUEDATERANGE structure, with the date range information stored in the Value Field of the specified element.
Pointer to a DICOMELEMENT structure within the Data Set.
Index value that indicates which value to retrieve when more than one value is stored in the Value Field. The index is zero-based.
Pointer to a VALUEDATERANGE structure that will be filled with the date range value.
Value | Meaning |
---|---|
0 | SUCCESS |
>0 | An error occurred. Refer to Return Codes. |
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
Win32, x64
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(MAKE_IMAGE_PATH(TEXT("image1.dcm")), 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(MAKE_IMAGE_PATH(L_TEXT("test.dcm")), 0);
delete pDS;
return DICOM_SUCCESS;
}