A delegate used with some overloads of GetValue<T> to get a value of an element.
public delegate object GetValueDelegate(
string value
)
Public Delegate Function GetValueDelegate( _
ByVal value As String _
) As Object
public delegate Object^ GetValueDelegate(
String^ value
)
value
a string representation of the DICOM element value that is to be converted
An Object of the desired type.
This delegate is used with certain overloads of GetValue<T>.
The delegate takes a string as input, and converts it into any desired class type. It is used with the GetValue<T> that take GetValueDelegate parameter.
This example will retrieve a value from a data set as a PersonName type using a delegate
using Leadtools;
using Leadtools.Dicom;
///
public class PersonName
{
private string[] _innerArray = new string[5] {string.Empty, string.Empty, string.Empty, string.Empty,
string.Empty };
/// Access this person name instance as array. Index range is
/// bounded between 0 (family name) and 4 (name suffix).
public string this[int index]
{
set
{
if (value == null || value.Length < 64)
_innerArray[index] = value;
else
throw new DicomException("Length of new entry exceeds 64 characters.");
}
get { return _innerArray[index]; }
}
private const int _familyNameIndex = 0;
private const int _givenNameIndex = 1;
private const int _middleNameIndex = 2;
private const int _namePrefixIndex = 3;
private const int _nameSuffixIndex = 4;
/// Access person name part family name.
public string FamilyName
{
set
{
if (value == null || value.Length < 64)
{
_fullName = null;
_innerArray[_familyNameIndex] = value;
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
get { return _innerArray[_familyNameIndex]; }
}
/// Access person name part given name.
public string GivenName
{
set
{
if (value == null || value.Length < 64)
{
_fullName = string.Empty;
_innerArray[_givenNameIndex] = value;
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
get { return _innerArray[_givenNameIndex]; }
}
/// Access person name part middle name.
public string MiddleName
{
set
{
if (value == null || value.Length < 64)
{
_fullName = string.Empty;
_innerArray[_middleNameIndex] = value;
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
get { return _innerArray[_middleNameIndex]; }
}
/// Access person name part name prefix.
public string NamePrefix
{
set
{
if (value == null || value.Length < 64)
{
_fullName = string.Empty;
_innerArray[_namePrefixIndex] = value;
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
get { return _innerArray[_namePrefixIndex]; }
}
/// Access person name part name suffix.
public string NameSuffix
{
set
{
if (value == null || value.Length < 64)
{
_fullName = string.Empty;
_innerArray[_nameSuffixIndex] = value;
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
get { return _innerArray[_nameSuffixIndex]; }
}
private string _fullName = string.Empty;
/// Access full person name string representation. According
/// to the DICOM standard "^" is used as separator of different
/// person name parts.
public string FullName
{
set
{
_fullName = value;
if (_fullName != null)
{
string[] s;
int i;
if (_fullName.Contains("^"))
s = _fullName.Split('^');
else
s = _fullName.Split(' ');
for (i = 0; i < s.Length; i++)
{
if (s[i].Length < 64)
{
if (i < _innerArray.Length)
_innerArray[i] = s[i];
}
else
throw new DicomException("Length of family name exceeds 64 characters.");
}
for (int k = i; k < _innerArray.Length; k++)
_innerArray[k] = string.Empty;
}
}
get
{
if (_fullName == string.Empty)
{
_fullName = _innerArray[0];
bool isNotNull = _fullName != string.Empty;
int i = 1;
while (isNotNull && i < _innerArray.Length)
{
isNotNull = _innerArray[i] != string.Empty;
if (isNotNull)
_fullName += "^" + _innerArray[i];
i++;
}
}
return _fullName;
}
}
/// Creates a new empty person name instance.
public PersonName() { }
/// Creates a new person name instance from specified full name.
/// All person name parts have to be separated by "^" according to
/// the DICOM standard.
public PersonName(string fullName)
{
FullName = fullName;
}
/// Creates a new person name instance from the different person name parts.
public PersonName(string familyName, string givenName,
string middleName, string namePrefix, string nameSuffix)
{
FamilyName = familyName;
GivenName = givenName;
MiddleName = middleName;
NamePrefix = namePrefix;
NameSuffix = nameSuffix;
}
/// Return this person name instance's.
public override string ToString()
{
return FullName;
}
}
void DumpPersonName(PersonName pn)
{
String sMsg =
string.Format("Family Name: {0}\nGiven Name: {1}\nMiddle Name: {2}\nName Prefix: {3}\nName Suffix: {4}",
pn.FamilyName,
pn.GivenName,
pn.MiddleName,
pn.NamePrefix,
pn.NameSuffix);
Console.WriteLine(sMsg);
}
private void DicomDataSet_GetValueWithDelegateExample()
{
// Create a DicomDataSet and add a PatientName
// Dicom Spec for Value Representation PN (Person Name)
// Elements are in this order:
// * family name complex
// * given name complex
// * middle name
// * name prefix
// * name suffix.
DicomDataSet ds = new DicomDataSet();
ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III");
// Get a PersonName value of an element by specifying a tag, and using a delegate
// Use this form when the type is not native to the dataset
// The data is extracted from the field as a string and passed to the provided method.
PersonName pn = null;
pn = ds.GetValue<PersonName>(
DicomTag.PatientName,
null,
delegate (string data)
{
PersonName t = new PersonName(data);
return t;
}
);
DumpPersonName(pn);
// Another overload, specifying parent element
pn = ds.GetValue<PersonName>(
null,
true,
DicomTag.PatientName,
null,
delegate (string data)
{
PersonName t = new PersonName(data);
return t;
}
);
DumpPersonName(pn);
// Another overload, this time passing in the DICOM element instead of a tag
DicomElement element = ds.FindFirstElement(null, DicomTag.PatientName, true);
pn = ds.GetValue<PersonName>(
element,
null,
delegate (string data)
{
PersonName t = new PersonName(data);
return t;
}
);
DumpPersonName(pn);
}
Imports Leadtools
Imports Leadtools.Dicom
'''
Public Class PersonName
Private _innerArray As String() = New String(4) {String.Empty, String.Empty, String.Empty, String.Empty, String.Empty}
''' Access this person name instance as array. Index range is
''' bounded between 0 (family name) and 4 (name suffix).
Default Public Property Item(ByVal index As Integer) As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_innerArray(index) = value
Else
Throw New DicomException("Length of new entry exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(index)
End Get
End Property
Private Const _familyNameIndex As Integer = 0
Private Const _givenNameIndex As Integer = 1
Private Const _middleNameIndex As Integer = 2
Private Const _namePrefixIndex As Integer = 3
Private Const _nameSuffixIndex As Integer = 4
''' Access person name part family name.
Public Property FamilyName() As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_fullName = Nothing
_innerArray(_familyNameIndex) = value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_familyNameIndex)
End Get
End Property
''' Access person name part given name.
Public Property GivenName() As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_fullName = String.Empty
_innerArray(_givenNameIndex) = value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_givenNameIndex)
End Get
End Property
''' Access person name part middle name.
Public Property MiddleName() As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_fullName = String.Empty
_innerArray(_middleNameIndex) = value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_middleNameIndex)
End Get
End Property
''' Access person name part name prefix.
Public Property NamePrefix() As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_fullName = String.Empty
_innerArray(_namePrefixIndex) = value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_namePrefixIndex)
End Get
End Property
''' Access person name part name suffix.
Public Property NameSuffix() As String
Set(ByVal value As String)
If value Is Nothing OrElse value.Length < 64 Then
_fullName = String.Empty
_innerArray(_nameSuffixIndex) = value
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
End Set
Get
Return _innerArray(_nameSuffixIndex)
End Get
End Property
Private _fullName As String = String.Empty
''' Access full person name string representation. According
''' to the DICOM standard "^" is used as separator of different
''' person name parts.
Public Property FullName() As String
Set(ByVal value As String)
_fullName = value
If Not _fullName Is Nothing Then
Dim s As String()
Dim i As Integer
If _fullName.Contains("^") Then
s = _fullName.Split("^"c)
Else
s = _fullName.Split(" "c)
End If
i = 0
Do While i < s.Length
If s(i).Length < 64 Then
If i < _innerArray.Length Then
_innerArray(i) = s(i)
End If
Else
Throw New DicomException("Length of family name exceeds 64 characters.")
End If
i += 1
Loop
Dim k As Integer = i
Do While k < _innerArray.Length
_innerArray(k) = String.Empty
k += 1
Loop
End If
End Set
Get
If _fullName = String.Empty Then
_fullName = _innerArray(0)
Dim isNotNull As Boolean = _fullName <> String.Empty
Dim i As Integer = 1
Do While isNotNull AndAlso i < _innerArray.Length
isNotNull = _innerArray(i) <> String.Empty
If isNotNull Then
_fullName &= "^" & _innerArray(i)
End If
i += 1
Loop
End If
Return _fullName
End Get
End Property
''' Creates a new empty person name instance.
Public Sub New()
End Sub
''' Creates a new person name instance from specified full name.
''' All person name parts have to be separated by "^" according to
''' the DICOM standard.
Public Sub New(ByVal fullNameIn As String)
FullName = fullNameIn
End Sub
''' Creates a new person name instance from the different person name parts.
Public Sub New(ByVal familyNameIn As String, ByVal givenNameIn As String, ByVal middleNameIn As String, ByVal namePrefixIn As String, ByVal nameSuffixIn As String)
FamilyName = familyNameIn
GivenName = givenNameIn
MiddleName = middleNameIn
NamePrefix = namePrefixIn
NameSuffix = nameSuffixIn
End Sub
''' Return this person name instance's.
Public Overrides Function ToString() As String
Return FullName
End Function
End Class
Private Sub DumpPersonName(ByVal pn As PersonName)
Dim sMsg As String = String.Format("Family Name: {0}" & Constants.vbLf & "Given Name: {1}" & Constants.vbLf & "Middle Name: {2}" &
Constants.vbLf & "Name Prefix: {3}" & Constants.vbLf & "Name Suffix: {4}", pn.FamilyName, pn.GivenName,
pn.MiddleName, pn.NamePrefix, pn.NameSuffix)
MessageBox.Show(sMsg)
End Sub
Public Function MyGetValueDelegate(ByVal s As String) As Object
Dim pn As PersonName = New PersonName(s)
MyGetValueDelegate = pn
End Function
Private Sub DicomDataSet_GetValueWithDelegateExample()
' Create a DicomDataSet and add a PatientName
' Dicom Spec for Value Representation PN (Person Name)
' Elements are in this order:
' * family name complex
' * given name complex
' * middle name
' * name prefix
' * name suffix.
Dim ds As DicomDataSet = New DicomDataSet()
ds.InsertElementAndSetValue(DicomTag.PatientName, "Smith^John^MiddleName^Mr.^III")
' Get a PersonName value of an element by specifying a tag, and using a delegate
' Use this form when the type is not native to the dataset
' The data is extracted from the field as a string and passed to the provided method.
Dim pn As PersonName = Nothing
Dim myDelegate As GetValueDelegate
myDelegate = AddressOf MyGetValueDelegate
pn = ds.GetValue(Of PersonName)(DicomTag.PatientName, Nothing, myDelegate)
DumpPersonName(pn)
' Another overload, specifying parent element
pn = ds.GetValue(Of PersonName)(Nothing, True, DicomTag.PatientName, Nothing, myDelegate)
DumpPersonName(pn)
' Another overload, this time passing in the DICOM element instead of a tag
Dim element As DicomElement = ds.FindFirstElement(Nothing, DicomTag.PatientName, True)
pn = ds.GetValue(Of PersonName)(element, Nothing, myDelegate)
DumpPersonName(pn)
End Sub
GetValueDelegate Members
DicomDataSet.GetValue{T}(DicomElement, bool, long, T, GetValueDelegate )
Help Collections
Raster .NET | C API | C++ Class Library | HTML5 JavaScript
Document .NET | C API | C++ Class Library | HTML5 JavaScript
Medical .NET | C API | C++ Class Library | HTML5 JavaScript
Medical Web Viewer .NET
Multimedia
Direct Show .NET | C API | Filters
Media Foundation .NET | C API | Transforms
Supported Platforms
.NET, Java, Android, and iOS/macOS Assemblies
Imaging, Medical, and Document
C API/C++ Class Libraries
Imaging, Medical, and Document
HTML5 JavaScript Libraries
Imaging, Medical, and Document