public static PresentationContext GetCompatiblePresentationContext(
DicomDataSet ds
)
ds
The Leadtools.Dicom.DicomDataSet that is used to generate the Leadtools.Dicom.Scu.Common.PresentationContext
a Leadtools.Dicom.Scu.Common.PresentationContext that contains the abstract syntax and transfer syntax of a Leadtools.Dicom.DicomDataSet
Since the C-GET requests and retrieves information on the same DICOM association, you must the SOP Class UID of the DICOM instances that are to be retrieved prior to the DICOM assocation. If you have access to a Leadtools.Dicom.DicomDataSet that is compatible with the instances that you are trying to retrieve, then you can use this method to generate a compatible Leadtools.Dicom.Scu.Common.PresentationContext. This presentation context can then be added to the last parameter (a List of Leadtools.Dicom.Scu.Common.PresentationContext) of any of the Get(DicomScp,DicomDataSet) methods.
using Leadtools;
using Leadtools.Dicom.Scu;
using Leadtools.Dicom.Scu.Common;
using Leadtools.Dicom;
using Leadtools.Dicom.Common.DataTypes;
using Leadtools.Dicom.Common.DataTypes.Status;
public void QueryRetrieveScu_Get1()
{
DicomEngine.Startup();
DicomNet.Startup();
//
// Change these parameters to reflect the calling AETitle.
//
QueryRetrieveScu getScu = new QueryRetrieveScu();
getScu.AETitle = "LEAD_CLIENT";
getScu.HostPort = 1000;
getScu.HostAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
//
// Change these parameters to reflect the called AETitle (server).
//
DicomScp scp = new DicomScp();
scp.AETitle = "LEAD_GET_SCP";
scp.Port = 404;
scp.Timeout = 60;
scp.PeerAddress = IPAddress.Parse("192.168.0.168");
getScu.BeforeCGet += new BeforeCGetDelegate(getStudy_BeforeCGet);
getScu.AfterCGet += new AfterCGetDelegate(getStudy_AfterCGet);
getScu.ReceivedStoreRequest += new ReceivedStoreRequestDelegate(getStudy_ReceivedStoreRequest);
// The C-GET must know the Media Storage SOP Class UID of the DICOM Datasets that you want to retrieve
// In this example, the five SMITH^TERRY instances are retrieved
// SOP Class UID of the instances is:
// MR Image Storage
// 1.2.840.10008.5.1.4.1.1.4
// StudyInstanceUid of the study is:
// 1.3.12.2.1107.5.2.31.30563.30000008120313112035900000034
// SeriesInstanceUid of the series is:
// 1.3.12.2.1107.5.2.31.30563.2008120317404292381631917.0.0.0
// SOPInstanceUid of one of the five instances is:
// 1.3.12.2.1107.5.2.31.30563.2008120317404382714631941
string studyInstanceUid = "1.3.12.2.1107.5.2.31.30563.30000008120313112035900000034";
string seriesInstanceUid = "1.3.12.2.1107.5.2.31.30563.2008120317404292381631917.0.0.0";
string sopInstanceUid = "1.3.12.2.1107.5.2.31.30563.2008120317404382714631941";
PresentationContext pc = new PresentationContext(DicomUidType.MRImageStorage);
pc.TransferSyntaxes.Add(DicomUidType.ImplicitVRLittleEndian);
// Alternatively, you can create the presentation context if you have a compatible DicomDataSet
// This is illustrated, but 'pc' will be used
PresentationContext pcAnotherWay;
string compatibleDicomName = @"D:\erase\dicom\compatible.dcm";
if (File.Exists(compatibleDicomName))
{
DicomDataSet dsCompatible = new DicomDataSet();
dsCompatible.Load(compatibleDicomName, DicomDataSetLoadFlags.None);
pcAnotherWay = QueryRetrieveScu.GetCompatiblePresentationContext(dsCompatible);
}
List<PresentationContext> pcList = new List<PresentationContext>();
pcList.Add(pc);
// There are four overloads for Get
// This examples illustrates how to use three of the overloads (study leve, series level, instance level)
// Uncomment whichever overload you want to use
// StudyLevel -- retrieves five instances
// getStudy.Get(scp, studyInstanceUid, pcList);
// SeriesLevel -- retrieves three instances
// getStudy.Get(scp, studyInstanceUid, seriesInstanceUid, pcList);
// InstanceLevel -- retrieves one instance
getScu.Get(scp, studyInstanceUid, seriesInstanceUid, sopInstanceUid, pcList);
DicomNet.Shutdown();
DicomEngine.Shutdown();
}
void getStudy_BeforeCGet(object sender, BeforeCGetEventArgs e)
{
Console.WriteLine("Before CGet");
}
void getStudy_ReceivedStoreRequest(object sender, ReceivedStoreRequestEventArgs e)
{
Console.WriteLine("==========================================");
Console.WriteLine("Patient Name:\t{0}", e.Patient.Name.Full);
Console.WriteLine("SOPInstanceUID:\t{0}", e.Instance.SOPInstanceUID);
}
void getStudy_AfterCGet(object sender, AfterCGetEventArgs e)
{
Console.WriteLine("After CGet");
Console.WriteLine("\t{0} Completed", e.Completed);
Console.WriteLine("\t{0} Failed", e.Failed);
Console.WriteLine("\t{0} Warning", e.Warning);
Console.WriteLine("\tStatus: {0}", e.Status);
if (e.Status != DicomCommandStatusType.Success)
{
string statusAllString = e.StatusAll.ToString(StatusFormatFlags.IgnoreStatus, "\n", "\t");
Console.WriteLine(statusAllString);
}
}