Skip to content

Commit

Permalink
Made it easier to get data from private elements
Browse files Browse the repository at this point in the history
Tags.AddEntry for DICOM data dictionary entry
or DCM.GetUnknownVRAs<> method
  • Loading branch information
Rex Cardan, PhD committed Feb 26, 2015
1 parent c980f4e commit 54cc4c0
Show file tree
Hide file tree
Showing 36 changed files with 3,925 additions and 3,656 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
*.pdb
*.pdb
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@
<Compile Include="DataTests.cs" />
<Compile Include="DICOMWriteTests.cs" />
<Compile Include="TagTests.cs" />
<Compile Include="PrivateTagTests.cs" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\EvilDICOM.Core\EvilDICOM.Core.csproj">
Expand Down
44 changes: 44 additions & 0 deletions EvilDICOM.Core/EvilDICOM.Core.Tests/PrivateTagTests.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
using System;
using System.Linq;
using EvilDICOM.Core.Dictionaries;
using EvilDICOM.Core.Element;
using EvilDICOM.Core.IO.Data;
using Microsoft.VisualStudio.TestTools.UnitTesting;

namespace EvilDICOM.Core.Tests
{
[TestClass]
public class PrivateTagTests
{
[TestMethod]
public void ReadUnknownFP()
{
var dcm = new DICOMObject();
var fs = new FloatingPointSingle(new Tag("30091047"), 25.0f);
dcm.Add(fs);
dcm.Write("test.dcm", new EvilDICOM.Core.IO.Writing.DICOMWriteSettings() { TransferSyntax = EvilDICOM.Core.Enums.TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN });


dcm = DICOMObject.Read("test.dcm");
var found = dcm.GetUnknownTagAs<FloatingPointSingle>("30091047");


Assert.IsTrue(found.First() is FloatingPointSingle);
}

[TestMethod]
public void ReadUnknownFP2()
{
var dcm = new DICOMObject();
var fs = new FloatingPointSingle(new Tag("30091047"), 25.0f);
dcm.Add(fs);
dcm.Write("test.dcm", new EvilDICOM.Core.IO.Writing.DICOMWriteSettings() { TransferSyntax = EvilDICOM.Core.Enums.TransferSyntax.IMPLICIT_VR_LITTLE_ENDIAN });

TagDictionary.AddEntry<FloatingPointSingle>("30091047", "MyCustomType");
dcm = DICOMObject.Read("test.dcm");
var found = dcm.FindAll("30091047");

Assert.IsTrue(found.First() is FloatingPointSingle);
}
}
}
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
54 changes: 54 additions & 0 deletions EvilDICOM.Core/EvilDICOM.Core.Tests/bin/Release/EvilDICOM.Core.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Binary file not shown.
Binary file not shown.
Original file line number Diff line number Diff line change
Expand Up @@ -75,14 +75,14 @@ C:\Users\rcardan\OneDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Ev
C:\Users\rcardan\OneDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.csproj.GenerateResource.Cache
C:\Users\rcardan\OneDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.dll
C:\Users\rcardan\OneDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.pdb
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.Properties.Resources.resources
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.csproj.GenerateResource.Cache
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\OrderedTest1.orderedtest
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\EvilDICOM.Core.Tests.dll
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\EvilDICOM.Core.Tests.pdb
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\EvilDICOM.Core.dll
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\EvilDICOM.Core.pdb
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\bin\Release\EvilDICOM.Core.xml
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.csprojResolveAssemblyReference.cache
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.Properties.Resources.resources
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.csproj.GenerateResource.Cache
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.dll
C:\Users\Rex\SkyDrive\Cardan.Code\Frameworks\EvilDICOM\_EvilDICOM_GitRepo\Evil-DICOM\EvilDICOM.Core\EvilDICOM.Core.Tests\obj\Release\EvilDICOM.Core.Tests.pdb
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file modified EvilDICOM.Core/EvilDICOM.Core.v12.suo
Binary file not shown.
34 changes: 34 additions & 0 deletions EvilDICOM.Core/EvilDICOM.Core/DICOMObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,40 @@ public List<IDICOMElement> FindAll(VR vrToFind)
return AllElements.Where(el => el.IsVR(vrToFind)).ToList();
}

/// <summary>
/// Returns elements of a certain tag that are of the unknown VR type (because they are not
/// in the DICOM dictionary) and reads them as the specified VR type
/// </summary>
/// <typeparam name="T">the VR type to read as</typeparam>
/// <param name="toFind">the tag of this element</param>
/// <returns>the unknown elements strongly typed to T</returns>
public List<T> GetUnknownTagAs<T>(Tag toFind) where T: IDICOMElement
{
return FindAll(toFind)
.Select(e => e as Unknown)
.Where(u=>u!=null)
.Select(u =>
{
T t;
var success = u.TryReadAs<T>(out t);
return new { success, t };
}).
Where(u => u.success)
.Select(u => u.t).ToList();
}

/// <summary>
/// Returns elements of a certain tag that are of the unknown VR type (because they are not
/// in the DICOM dictionary) and reads them as the specified VR type
/// </summary>
/// <typeparam name="T">the VR type to read as</typeparam>
/// <param name="toFind">the tag of this element</param>
/// <returns>the unknown elements strongly typed to T</returns>
public List<T> GetUnknownTagAs<T>(string toFind) where T : IDICOMElement
{
return GetUnknownTagAs<T>(new Tag(toFind));
}

/// <summary>
/// Finds all DICOM elements that match an element type
/// </summary>
Expand Down
Loading

0 comments on commit 54cc4c0

Please sign in to comment.