Products | Support | Email a link to this topic. | Send comments on this topic. | Back to Introduction - All Topics | Help Version 19.0.3.25
|
Leadtools.Dicom Namespace > DicomDataSet Class : CreateCompoundGraphic Method |
public void CreateCompoundGraphic( DicomElement graphicAnnSQItem, DicomCompoundGraphic compoundGraphic, bool checkLayer )
'Declaration
Public Sub CreateCompoundGraphic( _ ByVal graphicAnnSQItem As DicomElement, _ ByVal compoundGraphic As DicomCompoundGraphic, _ ByVal checkLayer As Boolean _ )
'Usage
Dim instance As DicomDataSet Dim graphicAnnSQItem As DicomElement Dim compoundGraphic As DicomCompoundGraphic Dim checkLayer As Boolean instance.CreateCompoundGraphic(graphicAnnSQItem, compoundGraphic, checkLayer)
public void CreateCompoundGraphic( DicomElement graphicAnnSQItem, DicomCompoundGraphic compoundGraphic, bool checkLayer )
function Leadtools.Dicom.DicomDataSet.CreateCompoundGraphic( graphicAnnSQItem , compoundGraphic , checkLayer )
public: void CreateCompoundGraphic( DicomElement^ graphicAnnSQItem, DicomCompoundGraphic^ compoundGraphic, bool checkLayer )
This example will initialize create two compound graphic objects (ruler, rectangle), add them to a presentation state, and then perform tests on the presentation state.
Imports Leadtools Imports Leadtools.Dicom ''' ' Creates a RULER compound graphic Private Function CreateCompoundGraphicRuler(ByVal layerName As String) As DicomCompoundGraphic ' Create a compound graphic Dim compoundGraphic As New DicomCompoundGraphic() compoundGraphic.LayerName = layerName compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Ruler Dim pts(1) As DicomAnnotationPoint pts(0) = New DicomAnnotationPoint(300, 100) pts(1) = New DicomAnnotationPoint(450, 100) compoundGraphic.SetAnnotationPoints(pts, pts.Length) compoundGraphic.CompoundGraphicInstanceId = 100 compoundGraphic.GraphicGroupId = 0 compoundGraphic.RotationAngle = 0.0 compoundGraphic.RotationPoint = New DicomAnnotationPoint(0, 0) compoundGraphic.GapLength = 0.0F compoundGraphic.DiameterOfVisibility = 0 compoundGraphic.TickAlignment = DicomAnnotationTickAlignmentType.Center compoundGraphic.TickLabelAlignment = DicomAnnotationTickLabelAlignmentType.Bottom compoundGraphic.ShowTickLabel = True compoundGraphic.Filled = False compoundGraphic.Options = DicomAnnotationOptions.Line Or DicomAnnotationOptions.Text Or DicomAnnotationOptions.CompoundGraphicInstanceId ' TextStyle compoundGraphic.TextStyle = New DicomTextStyle() compoundGraphic.TextStyle.TextOptions = DicomAnnotationTextOptions.FontName compoundGraphic.TextStyle.FontName = "Arial" compoundGraphic.TextStyle.CssFontName = "serif" compoundGraphic.TextStyle.TextColorCieLabValue = New UShort(2) {34866, 53484, 50171} ' Red compoundGraphic.TextStyle.HorizontalAlign = DicomAnnotationHorizontalAlignmentType.Center compoundGraphic.TextStyle.VerticalAlign = DicomAnnotationVerticalAlignmentType.Center compoundGraphic.TextStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off compoundGraphic.TextStyle.Shadow.ShadowOffsetX = 0 compoundGraphic.TextStyle.Shadow.ShadowOffsetY = 0 compoundGraphic.TextStyle.Shadow.ShadowColorCieLabValue = New UShort(2) {0, 0, 0} compoundGraphic.TextStyle.Shadow.ShadowOpacity = 0.0F compoundGraphic.TextStyle.Underlined = False compoundGraphic.TextStyle.Italic = False compoundGraphic.TextStyle.Bold = False ' LineStyle compoundGraphic.LineStyle = New DicomLineStyle() compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.PatternOffColorCielabValue Or DicomAnnotationLineOptions.PatternOffOpacity compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0F compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0F compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0F compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = New UShort(2) {0, 0, 0} compoundGraphic.LineStyle.PatternOnColorCieLabValue = New UShort(2) {21169, 53249, 5175} ' This is 'blue' compoundGraphic.LineStyle.PatternOffColorCieLabValue = New UShort(2) {0, 0, 0} compoundGraphic.LineStyle.LineThickness = 1.0F compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid compoundGraphic.LineStyle.LinePattern = &HFFFF compoundGraphic.LineStyle.PatternOnOpacity = 1.0F compoundGraphic.LineStyle.PatternOffOpacity = 0.0F ' RULER does not have a fill style ' Major Ticks Sequence Dim nTickCount As Integer = 4 Dim fTickIncrement As Single = CSng(1.0 / CSng(nTickCount)) compoundGraphic.MajorTicks.Clear() For i As Integer = 0 To nTickCount - 1 Dim majorTickItem As New DicomMajorTick(i * fTickIncrement, "Label " & i.ToString()) compoundGraphic.MajorTicks.Add(majorTickItem) Next i Return compoundGraphic End Function ' Creates a RECTANGLE compound graphic (rotated, filled) Private Function CreateCompoundGraphicRectangle(ByVal layerName As String) As DicomCompoundGraphic ' Create a compound graphic Dim compoundGraphic As New DicomCompoundGraphic() compoundGraphic.LayerName = layerName compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Rectangle Dim pts(1) As DicomAnnotationPoint pts(0) = New DicomAnnotationPoint(100, 100) pts(1) = New DicomAnnotationPoint(200, 200) compoundGraphic.SetAnnotationPoints(pts, pts.Length) compoundGraphic.CompoundGraphicInstanceId = 200 compoundGraphic.GraphicGroupId = 0 compoundGraphic.RotationAngle = 45.0 compoundGraphic.RotationPoint = New DicomAnnotationPoint(150, 150) compoundGraphic.Filled = True compoundGraphic.Options = DicomAnnotationOptions.Fill Or DicomAnnotationOptions.Line Or DicomAnnotationOptions.CompoundGraphicInstanceId ' LineStyle compoundGraphic.LineStyle = New DicomLineStyle() compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0F compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0F compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0F compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = New UShort(2) {1, 2, 3} compoundGraphic.LineStyle.PatternOnColorCieLabValue = New UShort(2) {24886, 53484, 50171} ' red compoundGraphic.LineStyle.PatternOffColorCieLabValue = New UShort(2) {0, 0, 0} compoundGraphic.LineStyle.LineThickness = 2.0F compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid compoundGraphic.LineStyle.LinePattern = &HFFFF compoundGraphic.LineStyle.PatternOnOpacity = 1.0F compoundGraphic.LineStyle.PatternOffOpacity = 0.0F ' FillStyle compoundGraphic.FillStyle = New DicomFillStyle() compoundGraphic.FillStyle.FillOptions = DicomAnnotationFillOptions.None compoundGraphic.FillStyle.PatternOnColorCieLabValue = New UShort(2) {21169, 53249, 5175} ' blue compoundGraphic.FillStyle.PatternOffColorCieLabValue = New UShort(2) {0, 0, 0} compoundGraphic.FillStyle.PatternOnOpacity = 1.0F compoundGraphic.FillStyle.PatternOffOpacity = 0.0F compoundGraphic.FillStyle.FillMode = DicomAnnotationFillModeType.Solid Return compoundGraphic End Function Private Sub DicomCompoundGraphicTest(ByVal layerName As String, ByVal outFile As String) Dim ds As New DicomDataSet() ds.Initialize(DicomClassType.GrayscaleSoftcopyPresentationState, DicomDataSetInitializeFlags.AddMandatoryModulesOnly Or DicomDataSetInitializeFlags.AddMandatoryElementsOnly) ds.CreateGraphicAnnSQItem(0, layerName) Dim firstGraphicAnnSQItem As DicomElement = ds.FindFirstGraphicAnnSQItem() Dim ruler As DicomCompoundGraphic = CreateCompoundGraphicRuler(layerName) ds.CreateCompoundGraphic(firstGraphicAnnSQItem, ruler, False) Dim rotatedFilledRectangle As DicomCompoundGraphic = CreateCompoundGraphicRectangle(layerName) ds.CreateCompoundGraphic(firstGraphicAnnSQItem, rotatedFilledRectangle, False) ' Save the presentation state (with annotations) ds.Save(outFile, DicomDataSetSaveFlags.None) MessageBox.Show("Presentation State Saved: " & outFile) ' Find the second CompoundGraphicElement item -- this should be the rectangle Dim element As DicomElement = ds.GetCompoundGraphicElement(firstGraphicAnnSQItem, 0) Dim type As String = ds.GetValue(Of String)(element, False, DicomTag.CompoundGraphicType, String.Empty) Debug.Assert(type = "RULER") ' Now we have two compound graphic items: ruler, rectangle ' Count should be 2 Dim nCount As Integer = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem) Debug.Assert(nCount = 2) ' Get the number of points of the first item (ruler) -- this should be 2 nCount = ds.GetCompoundGraphicPointCount(firstGraphicAnnSQItem, 0) Debug.Assert(nCount = 2) ' Get the number of major ticks in the ruler -- this should be 4 nCount = ds.GetCompoundGraphicMajorTickCount(firstGraphicAnnSQItem, 0) Debug.Assert(nCount = 4) ' Remove the first compound graphic (the ruler) ds.RemoveCompoundGraphic(firstGraphicAnnSQItem, 0) ' Read the first compound graphic -- this should now be the rectangle Dim compoundGraphic As DicomCompoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0) Debug.Assert(compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Rectangle) ' Change the rectangle from filled, to non-filled compoundGraphic.Filled = False ds.SetCompoundGraphicInformation(firstGraphicAnnSQItem, 0, compoundGraphic) ' Verify that the rectangle is non-filled compoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0) Debug.Assert(compoundGraphic.Filled = False) ' Remove ALL compund graphics ds.RemoveAllCompoundGraphics(firstGraphicAnnSQItem) ' Get the compound graphic count -- it should now be zero nCount = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem) Debug.Assert(nCount = 0) End Sub
using Leadtools; using Leadtools.Dicom; /// // Creates a RULER compound graphic private DicomCompoundGraphic CreateCompoundGraphicRuler(string layerName) { // Create a compound graphic DicomCompoundGraphic compoundGraphic = new DicomCompoundGraphic(); compoundGraphic.LayerName = layerName; compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel; compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Ruler; DicomAnnotationPoint[] pts = new DicomAnnotationPoint[2]; pts[0] = new DicomAnnotationPoint(300, 100); pts[1] = new DicomAnnotationPoint(450, 100); compoundGraphic.SetAnnotationPoints(pts, pts.Length); compoundGraphic.CompoundGraphicInstanceId = 100; compoundGraphic.GraphicGroupId = 0; compoundGraphic.RotationAngle = 0.0; compoundGraphic.RotationPoint = new DicomAnnotationPoint(0,0); compoundGraphic.GapLength = 0.0f; compoundGraphic.DiameterOfVisibility = 0; compoundGraphic.TickAlignment = DicomAnnotationTickAlignmentType.Center; compoundGraphic.TickLabelAlignment = DicomAnnotationTickLabelAlignmentType.Bottom; compoundGraphic.ShowTickLabel = true; compoundGraphic.Filled = false; compoundGraphic.Options = DicomAnnotationOptions.Line | DicomAnnotationOptions.Text | DicomAnnotationOptions.CompoundGraphicInstanceId; // TextStyle compoundGraphic.TextStyle = new DicomTextStyle(); compoundGraphic.TextStyle.TextOptions = DicomAnnotationTextOptions.FontName; compoundGraphic.TextStyle.FontName = "Arial"; compoundGraphic.TextStyle.CssFontName = "serif"; compoundGraphic.TextStyle.TextColorCieLabValue = new ushort[3]{34866, 53484, 50171}; // Red compoundGraphic.TextStyle.HorizontalAlign = DicomAnnotationHorizontalAlignmentType.Center; compoundGraphic.TextStyle.VerticalAlign = DicomAnnotationVerticalAlignmentType.Center; compoundGraphic.TextStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.TextStyle.Shadow.ShadowOffsetX = 0; compoundGraphic.TextStyle.Shadow.ShadowOffsetY = 0; compoundGraphic.TextStyle.Shadow.ShadowColorCieLabValue = new ushort[3]{0,0,0}; compoundGraphic.TextStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.TextStyle.Underlined = false; compoundGraphic.TextStyle.Italic = false; compoundGraphic.TextStyle.Bold = false; // LineStyle compoundGraphic.LineStyle = new DicomLineStyle(); compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None; compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.PatternOffColorCielabValue | DicomAnnotationLineOptions.PatternOffOpacity; compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = new ushort[3] { 0,0,0}; compoundGraphic.LineStyle.PatternOnColorCieLabValue = new ushort[3] {21169, 53249, 5175}; // This is 'blue' compoundGraphic.LineStyle.PatternOffColorCieLabValue= new ushort[3] {0,0,0}; compoundGraphic.LineStyle.LineThickness = 1.0f; compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid; compoundGraphic.LineStyle.LinePattern = 0xFFFF; compoundGraphic.LineStyle.PatternOnOpacity = 1.0f; compoundGraphic.LineStyle.PatternOffOpacity = 0.0f; // RULER does not have a fill style // Major Ticks Sequence int nTickCount = 4; float fTickIncrement = (float)(1.0 / (float)nTickCount); compoundGraphic.MajorTicks.Clear(); for (int i = 0; i < nTickCount; i++) { DicomMajorTick majorTickItem = new DicomMajorTick(i * fTickIncrement, "Label " + i.ToString()); compoundGraphic.MajorTicks.Add(majorTickItem); } return compoundGraphic; } // Creates a RECTANGLE compound graphic (rotated, filled) private DicomCompoundGraphic CreateCompoundGraphicRectangle(string layerName) { // Create a compound graphic DicomCompoundGraphic compoundGraphic = new DicomCompoundGraphic(); compoundGraphic.LayerName = layerName; compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel; compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Rectangle; DicomAnnotationPoint[] pts = new DicomAnnotationPoint[2]; pts[0] = new DicomAnnotationPoint(100, 100); pts[1] = new DicomAnnotationPoint(200, 200); compoundGraphic.SetAnnotationPoints(pts, pts.Length); compoundGraphic.CompoundGraphicInstanceId = 200; compoundGraphic.GraphicGroupId = 0; compoundGraphic.RotationAngle = 45.0; compoundGraphic.RotationPoint = new DicomAnnotationPoint(150,150); compoundGraphic.Filled = true; compoundGraphic.Options = DicomAnnotationOptions.Fill | DicomAnnotationOptions.Line | DicomAnnotationOptions.CompoundGraphicInstanceId; // LineStyle compoundGraphic.LineStyle = new DicomLineStyle(); compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None; compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = new ushort[3] { 1, 2, 3 }; compoundGraphic.LineStyle.PatternOnColorCieLabValue = new ushort[3] {24886, 53484, 50171}; // red compoundGraphic.LineStyle.PatternOffColorCieLabValue= new ushort[3] {0,0,0}; compoundGraphic.LineStyle.LineThickness = 2.0f; compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid; compoundGraphic.LineStyle.LinePattern = 0xFFFF; compoundGraphic.LineStyle.PatternOnOpacity = 1.0f; compoundGraphic.LineStyle.PatternOffOpacity = 0.0f; // FillStyle compoundGraphic.FillStyle = new DicomFillStyle(); compoundGraphic.FillStyle.FillOptions = DicomAnnotationFillOptions.None; compoundGraphic.FillStyle.PatternOnColorCieLabValue = new ushort[3] { 21169, 53249, 5175 }; // blue compoundGraphic.FillStyle.PatternOffColorCieLabValue = new ushort[3] { 0,0,0 }; compoundGraphic.FillStyle.PatternOnOpacity = 1.0f; compoundGraphic.FillStyle.PatternOffOpacity = 0.0f; compoundGraphic.FillStyle.FillMode = DicomAnnotationFillModeType.Solid; return compoundGraphic; } private void DicomCompoundGraphicTest(string layerName, string outFile) { DicomDataSet ds = new DicomDataSet(); ds.Initialize(DicomClassType.GrayscaleSoftcopyPresentationState, DicomDataSetInitializeFlags.AddMandatoryModulesOnly | DicomDataSetInitializeFlags.AddMandatoryElementsOnly); ds.CreateGraphicAnnSQItem(0, layerName); DicomElement firstGraphicAnnSQItem = ds.FindFirstGraphicAnnSQItem(); DicomCompoundGraphic ruler = CreateCompoundGraphicRuler(layerName); ds.CreateCompoundGraphic(firstGraphicAnnSQItem, ruler, false); DicomCompoundGraphic rotatedFilledRectangle = CreateCompoundGraphicRectangle(layerName); ds.CreateCompoundGraphic(firstGraphicAnnSQItem, rotatedFilledRectangle, false); // Save the presentation state (with annotations) ds.Save(outFile, DicomDataSetSaveFlags.None); MessageBox.Show("Presentation State Saved: " + outFile); // Find the second CompoundGraphicElement item -- this should be the rectangle DicomElement element = ds.GetCompoundGraphicElement(firstGraphicAnnSQItem, 0); string type = ds.GetValue<string>(element,false, DicomTag.CompoundGraphicType, string.Empty); Debug.Assert(type == "RULER"); // Now we have two compound graphic items: ruler, rectangle // Count should be 2 int nCount = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem); Debug.Assert(nCount == 2); // Get the number of points of the first item (ruler) -- this should be 2 nCount = ds.GetCompoundGraphicPointCount(firstGraphicAnnSQItem, 0); Debug.Assert(nCount == 2); // Get the number of major ticks in the ruler -- this should be 4 nCount = ds.GetCompoundGraphicMajorTickCount(firstGraphicAnnSQItem, 0); Debug.Assert(nCount == 4); // Remove the first compound graphic (the ruler) ds.RemoveCompoundGraphic(firstGraphicAnnSQItem, 0); // Read the first compound graphic -- this should now be the rectangle DicomCompoundGraphic compoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0); Debug.Assert(compoundGraphic.Type == DicomAnnotationCompoundGraphicType.Rectangle); // Change the rectangle from filled, to non-filled compoundGraphic.Filled = false; ds.SetCompoundGraphicInformation(firstGraphicAnnSQItem, 0, compoundGraphic); // Verify that the rectangle is non-filled compoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0); Debug.Assert(compoundGraphic.Filled == false); // Remove ALL compund graphics ds.RemoveAllCompoundGraphics(firstGraphicAnnSQItem); // Get the compound graphic count -- it should now be zero nCount = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem); Debug.Assert(nCount == 0); }
using Leadtools.Dicom.Constants; using Leadtools; using Leadtools.Dicom; /// // Creates a RULER compound graphic private DicomCompoundGraphic CreateCompoundGraphicRuler(string layerName) { // Create a compound graphic DicomCompoundGraphic compoundGraphic = new DicomCompoundGraphic(); compoundGraphic.LayerName = layerName; compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel; compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Ruler; DicomAnnotationPoint[] pts = new DicomAnnotationPoint[2]; pts[0] = DicomAnnotationPointHelper.Create(300, 100); pts[1] = DicomAnnotationPointHelper.Create(450, 100); compoundGraphic.SetAnnotationPoints(pts, pts.Length); compoundGraphic.CompoundGraphicInstanceId = 100; compoundGraphic.GraphicGroupId = 0; compoundGraphic.RotationAngle = 0.0; compoundGraphic.RotationPoint = DicomAnnotationPointHelper.Create(0, 0); compoundGraphic.GapLength = 0.0f; compoundGraphic.DiameterOfVisibility = 0; compoundGraphic.TickAlignment = DicomAnnotationTickAlignmentType.Center; compoundGraphic.TickLabelAlignment = DicomAnnotationTickLabelAlignmentType.Bottom; compoundGraphic.ShowTickLabel = true; compoundGraphic.Filled = false; compoundGraphic.Options = DicomAnnotationOptions.Line | DicomAnnotationOptions.Text | DicomAnnotationOptions.CompoundGraphicInstanceId; // TextStyle compoundGraphic.TextStyle = new DicomTextStyle(); compoundGraphic.TextStyle.TextOptions = DicomAnnotationTextOptions.FontName; compoundGraphic.TextStyle.FontName = "Arial"; compoundGraphic.TextStyle.CssFontName = "serif"; compoundGraphic.TextStyle.TextColorCieLabValue = new ushort[3] { 34866, 53484, 50171 }; // Red compoundGraphic.TextStyle.HorizontalAlign = DicomAnnotationHorizontalAlignmentType.Center; compoundGraphic.TextStyle.VerticalAlign = DicomAnnotationVerticalAlignmentType.Center; compoundGraphic.TextStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.TextStyle.Shadow.ShadowOffsetX = 0; compoundGraphic.TextStyle.Shadow.ShadowOffsetY = 0; compoundGraphic.TextStyle.Shadow.ShadowColorCieLabValue = new ushort[3] { 0, 0, 0 }; compoundGraphic.TextStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.TextStyle.Underlined = false; compoundGraphic.TextStyle.Italic = false; compoundGraphic.TextStyle.Bold = false; // LineStyle compoundGraphic.LineStyle = new DicomLineStyle(); compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None; compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.PatternOffColorCielabValue | DicomAnnotationLineOptions.PatternOffOpacity; compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = new ushort[3] { 0, 0, 0 }; compoundGraphic.LineStyle.PatternOnColorCieLabValue = new ushort[3] { 21169, 53249, 5175 }; // This is 'blue' compoundGraphic.LineStyle.PatternOffColorCieLabValue = new ushort[3] { 0, 0, 0 }; compoundGraphic.LineStyle.LineThickness = 1.0f; compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid; compoundGraphic.LineStyle.LinePattern = 0xFFFF; compoundGraphic.LineStyle.PatternOnOpacity = 1.0f; compoundGraphic.LineStyle.PatternOffOpacity = 0.0f; // RULER does not have a fill style // Major Ticks Sequence int nTickCount = 4; float fTickIncrement = (float)(1.0 / (float)nTickCount); compoundGraphic.MajorTicks.Clear(); for (int i = 0; i < nTickCount; i++) { DicomMajorTick majorTickItem = new DicomMajorTick(i * fTickIncrement, "Label " + i.ToString()); compoundGraphic.MajorTicks.Add(majorTickItem); } return compoundGraphic; } // Creates a RECTANGLE compound graphic (rotated, filled) private DicomCompoundGraphic CreateCompoundGraphicRectangle(string layerName) { // Create a compound graphic DicomCompoundGraphic compoundGraphic = new DicomCompoundGraphic(); compoundGraphic.LayerName = layerName; compoundGraphic.Units = DicomAnnotationUnitsRelativityType.Pixel; compoundGraphic.Type = DicomAnnotationCompoundGraphicType.Rectangle; DicomAnnotationPoint[] pts = new DicomAnnotationPoint[2]; pts[0] = DicomAnnotationPointHelper.Create(100, 100); pts[1] = DicomAnnotationPointHelper.Create(200, 200); compoundGraphic.SetAnnotationPoints(pts, pts.Length); compoundGraphic.CompoundGraphicInstanceId = 200; compoundGraphic.GraphicGroupId = 0; compoundGraphic.RotationAngle = 45.0; compoundGraphic.RotationPoint = DicomAnnotationPointHelper.Create(150, 150); compoundGraphic.Filled = true; compoundGraphic.Options = DicomAnnotationOptions.Fill | DicomAnnotationOptions.Line | DicomAnnotationOptions.CompoundGraphicInstanceId; // LineStyle compoundGraphic.LineStyle = new DicomLineStyle(); compoundGraphic.LineStyle.LineOptions = DicomAnnotationLineOptions.None; compoundGraphic.LineStyle.Shadow.ShadowStyle = DicomAnnotationShadowStyleType.Off; compoundGraphic.LineStyle.Shadow.ShadowOpacity = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetX = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowOffsetY = 0.0f; compoundGraphic.LineStyle.Shadow.ShadowColorCieLabValue = new ushort[3] { 1, 2, 3 }; compoundGraphic.LineStyle.PatternOnColorCieLabValue = new ushort[3] { 24886, 53484, 50171 }; // red compoundGraphic.LineStyle.PatternOffColorCieLabValue = new ushort[3] { 0, 0, 0 }; compoundGraphic.LineStyle.LineThickness = 2.0f; compoundGraphic.LineStyle.LineDashingStyle = DicomAnnotationDashStyleType.Solid; compoundGraphic.LineStyle.LinePattern = 0xFFFF; compoundGraphic.LineStyle.PatternOnOpacity = 1.0f; compoundGraphic.LineStyle.PatternOffOpacity = 0.0f; // FillStyle compoundGraphic.FillStyle = new DicomFillStyle(); compoundGraphic.FillStyle.FillOptions = DicomAnnotationFillOptions.None; compoundGraphic.FillStyle.PatternOnColorCieLabValue = new ushort[3] { 21169, 53249, 5175 }; // blue compoundGraphic.FillStyle.PatternOffColorCieLabValue = new ushort[3] { 0, 0, 0 }; compoundGraphic.FillStyle.PatternOnOpacity = 1.0f; compoundGraphic.FillStyle.PatternOffOpacity = 0.0f; compoundGraphic.FillStyle.FillMode = DicomAnnotationFillModeType.Solid; return compoundGraphic; } private async void DicomCompoundGraphicTest(string layerName, string outFile) { DicomDataSet ds = new DicomDataSet(); ds.Initialize(DicomClassType.GrayscaleSoftcopyPresentationState, DicomDataSetInitializeFlags.AddMandatoryModulesOnly | DicomDataSetInitializeFlags.AddMandatoryElementsOnly); ds.CreateGraphicAnnSQItem(0, layerName); DicomElement firstGraphicAnnSQItem = ds.FindFirstGraphicAnnSQItem(); DicomCompoundGraphic ruler = CreateCompoundGraphicRuler(layerName); ds.CreateCompoundGraphic(firstGraphicAnnSQItem, ruler, false); DicomCompoundGraphic rotatedFilledRectangle = CreateCompoundGraphicRectangle(layerName); ds.CreateCompoundGraphic(firstGraphicAnnSQItem, rotatedFilledRectangle, false); // Save the presentation state (with annotations) string dicomFileNameOutput = outFile; StorageFile saveFile = await Tools.AppLocalFolder.CreateFileAsync(dicomFileNameOutput); ILeadStream streamOutput = LeadStreamFactory.Create(saveFile); using (IDisposable disposableOUT = streamOutput as IDisposable) { await ds.SaveAsync(streamOutput, DicomDataSetSaveFlags.None); } Debug.WriteLine("Presentation State Saved: " + outFile); // Find the second CompoundGraphicElement item -- this should be the rectangle DicomElement element = ds.GetCompoundGraphicElement(firstGraphicAnnSQItem, 0); string type = ds.GetStringValue(element, 0); Debug.Assert(type == "RULER"); // Now we have two compound graphic items: ruler, rectangle // Count should be 2 int nCount = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem); Debug.Assert(nCount == 2); // Get the number of points of the first item (ruler) -- this should be 2 nCount = ds.GetCompoundGraphicPointCount(firstGraphicAnnSQItem, 0); Debug.Assert(nCount == 2); // Get the number of major ticks in the ruler -- this should be 4 nCount = ds.GetCompoundGraphicMajorTickCount(firstGraphicAnnSQItem, 0); Debug.Assert(nCount == 4); // Remove the first compound graphic (the ruler) ds.RemoveCompoundGraphic(firstGraphicAnnSQItem, 0); // Read the first compound graphic -- this should now be the rectangle DicomCompoundGraphic compoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0); Debug.Assert(compoundGraphic.Type == DicomAnnotationCompoundGraphicType.Rectangle); // Change the rectangle from filled, to non-filled compoundGraphic.Filled = false; ds.SetCompoundGraphicInformation(firstGraphicAnnSQItem, 0, compoundGraphic); // Verify that the rectangle is non-filled compoundGraphic = ds.GetCompoundGraphicInformation(firstGraphicAnnSQItem, 0); Debug.Assert(compoundGraphic.Filled == false); // Remove ALL compund graphics ds.RemoveAllCompoundGraphics(firstGraphicAnnSQItem); // Get the compound graphic count -- it should now be zero nCount = ds.GetCompoundGraphicCount(firstGraphicAnnSQItem); Debug.Assert(nCount == 0); }
DicomDataSet Class
DicomDataSet Members
FindFirstGraphicAnnSQItem Method
CreateGraphicAnnSQItem Method
RemoveCompoundGraphic Method
GetCompoundGraphicInformation Method
SetCompoundGraphicInformation Method
GetCompoundGraphicCount Method
RemoveAllCompoundGraphics Method
GetCompoundGraphicPointCount Method
GetCompoundGraphicElement Method