Sends a C-FIND-REQ message to a peer member of a connection defined by Scp.
public:
void Find(
DicomScp^ Scp,
FindQuery^ Query
)
Scp
The peer connection to send the C-FIND-REQ to.
Query
The query information that describes the DICOM datasets to be found.
This example queries a DICOM server and performs a Study Level C-FIND-REQ.
using Leadtools;
using Leadtools.Dicom.Scu;
using Leadtools.Dicom.Scu.Common;
using Leadtools.Dicom;
using Leadtools.Dicom.Common.DataTypes;
public void FindStudy()
{
DicomEngine.Startup();
DicomNet.Startup();
QueryRetrieveScu findStudy = new QueryRetrieveScu();
FindQuery query = new FindQuery();
DicomScp scp = new DicomScp();
//
// Change these parameters to reflect the calling AETitle.
//
findStudy.AETitle = "LEAD_CLIENT";
findStudy.HostPort = 1000;
findStudy.HostAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
//
// Change these parameters to reflect the called AETitle (server).
//
scp.AETitle = "MI_SERVER";
scp.Port = 104;
scp.Timeout = 60;
scp.PeerAddress = IPAddress.Parse("10.1.1.96");
scp.Secure = false;
//
// Find all studies
//
query.QueryLevel = QueryLevel.Study;
findStudy.BeforeConnect += new BeforeConnectDelegate(findStudy_BeforeConnect);
findStudy.AfterConnect += new AfterConnectDelegate(findStudy_AfterConnect);
findStudy.BeforeCFind += new BeforeCFindDelegate(findStudy_BeforeCFind);
findStudy.MatchStudy += new MatchStudyDelegate(findStudy_MatchStudy);
findStudy.AfterCFind += new AfterCFindDelegate(findStudy_AfterCFind);
findStudy.Find(scp, query);
findStudy = null;
query = null;
scp = null;
DicomNet.Shutdown();
DicomEngine.Shutdown();
}
void findStudy_BeforeConnect(object sender, BeforeConnectEventArgs e)
{
Console.WriteLine("Connecting to: " + e.Scp.PeerAddress.ToString());
}
void findStudy_AfterConnect(object sender, AfterConnectEventArgs e)
{
Console.WriteLine("Connection status: " + e.Error);
}
void findStudy_BeforeCFind(object sender, BeforeCFindEventArgs e)
{
Console.WriteLine("Before CFind: " + e.QueryLevel.ToString());
Console.WriteLine("Association supports relational queries: {0}", e.Scp.Relational);
Console.WriteLine("Association Information");
for (int i = 0; i < e.Scp.Association.PresentationContextCount; i++)
{
byte pid = e.Scp.Association.GetPresentationContextID(i);
string absSyntax = e.Scp.Association.GetAbstract(pid);
DicomAssociateAcceptResultType result = e.Scp.Association.GetResult(pid);
DicomUid uid = DicomUidTable.Instance.Find(absSyntax);
Console.WriteLine("\tPresentationContext ({0})", pid);
Console.WriteLine("\t\tAbstractSyntax: {0}", absSyntax);
if (uid != null)
Console.WriteLine("\t\tDescription: {0}", uid.Name);
Console.WriteLine("\t\tResult: {0}", result);
}
}
void findStudy_MatchStudy(object sender, MatchEventArgs<Study> e)
{
Console.WriteLine("Accession #: " + e.Info.AccessionNumber);
Console.WriteLine("Admitting Diagnosis Description: " + e.Info.AdmitDiagDescrp);
Console.WriteLine("Age: " + (e.Info.Age.HasValue ? e.Info.Age.Value.Number.ToString() + e.Info.Age.Value.Reference : "No Age"));
Console.WriteLine("Study Date: " + e.Info.Date);
Console.WriteLine("Study Time: " + e.Info.Time);
Console.WriteLine("Study Description: " + e.Info.Description);
Console.WriteLine("Study Id: " + e.Info.Id);
Console.WriteLine("Study Instance: " + e.Info.InstanceUID);
if (e.Info.ModalitiesInStudy != null)
Console.WriteLine("Modalities in Study: " + e.Info.ModalitiesInStudy.ToString());
if (e.Info.NameOfDrsReading != null)
Console.WriteLine("Name of drs reading Study: " + e.Info.NameOfDrsReading.ToString());
Console.WriteLine("Number of Related Instances: " + e.Info.NumberOfRelatedInstances);
Console.WriteLine("Number of Related Series: " + e.Info.NumberofRelatedSeries);
Console.WriteLine("Referring Dr Name: " + e.Info.ReferringPhysiciansName.Full);
Console.WriteLine("Patient Size: " + e.Info.Size);
Console.WriteLine("Patient Weight: " + e.Info.Weight);
Console.WriteLine("Patient Birth Date: " + e.Info.Patient.BirthDate);
Console.WriteLine("Patient Comments: " + e.Info.Patient.Comments);
Console.WriteLine("Patient Id: " + e.Info.Patient.Id);
Console.WriteLine("Patient Sex: " + e.Info.Patient.Sex);
Console.WriteLine("Patient Name");
Console.WriteLine("\tFamily Name: " + e.Info.Patient.Name.Family);
Console.WriteLine("\tGiven Name: " + e.Info.Patient.Name.Given);
Console.WriteLine("\tMiddle Name: " + e.Info.Patient.Name.Middle);
Console.WriteLine("\tName Prefix: " + e.Info.Patient.Name.Prefix);
Console.WriteLine("\tName Suffix: " + e.Info.Patient.Name.Suffix);
Console.WriteLine("\tFull Name: " + e.Info.Patient.Name.Full);
Console.WriteLine("\tFull Name Dicom Encoded: " + e.Info.Patient.Name.FullDicomEncoded);
Console.WriteLine("==========================================================\r\n");
}
void findStudy_AfterCFind(object sender, AfterCFindEventArgs e)
{
Debug.Assert(e.Status == DicomCommandStatusType.Success);
}
Imports Leadtools
Imports Leadtools.Dicom.Scu
Imports Leadtools.Dicom.Scu.Common
Imports Leadtools.Dicom
Imports Leadtools.Dicom.Common.DataTypes
Public Sub FindStudy()
DicomEngine.Startup()
DicomNet.Startup()
Dim cfindStudy As QueryRetrieveScu = New QueryRetrieveScu()
Dim query As FindQuery = New FindQuery()
Dim scp As DicomScp = New DicomScp()
'
' Change these parameters to reflect the calling AETitle.
'
cfindStudy.AETitle = "LEAD_CLIENT"
cfindStudy.HostPort = 1000
cfindStudy.HostAddress = Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(Function(ip) ip.AddressFamily = AddressFamily.InterNetwork)
'
' Change these parameters to reflect the called AETitle (server).
'
scp.AETitle = "MI_SERVER"
scp.Port = 104
scp.Timeout = 60
scp.PeerAddress = IPAddress.Parse("10.1.1.96")
scp.Secure = False
'
' Find all studies
'
query.QueryLevel = QueryLevel.Study
AddHandler cfindStudy.BeforeConnect, AddressOf cfindStudy_BeforeConnect
AddHandler cfindStudy.AfterConnect, AddressOf cfindStudy_AfterConnect
AddHandler cfindStudy.BeforeCFind, AddressOf cfindStudy_BeforeCFind
AddHandler cfindStudy.MatchStudy, AddressOf cfindStudy_MatchStudy
AddHandler cfindStudy.AfterCFind, AddressOf cfindStudy_AfterCFind
cfindStudy.Find(scp, query)
cfindStudy = Nothing
query = Nothing
scp = Nothing
DicomNet.Shutdown()
DicomEngine.Shutdown()
End Sub
Private Sub cfindStudy_BeforeConnect(ByVal sender As Object, ByVal e As BeforeConnectEventArgs)
Console.WriteLine("Connecting to: " & e.Scp.PeerAddress.ToString())
End Sub
Private Sub cfindStudy_AfterConnect(ByVal sender As Object, ByVal e As AfterConnectEventArgs)
Console.WriteLine("Connection status: " & e.Error)
End Sub
Private Sub cfindStudy_BeforeCFind(ByVal sender As Object, ByVal e As BeforeCFindEventArgs)
Console.WriteLine("Before CFind: " & e.QueryLevel.ToString())
Console.WriteLine("Association supports relational queries: {0}", e.Scp.Relational)
Console.WriteLine("Association Information")
Dim i As Integer = 0
Do While i < e.Scp.Association.PresentationContextCount
Dim pid As Byte = e.Scp.Association.GetPresentationContextID(i)
Dim absSyntax As String = e.Scp.Association.GetAbstract(pid)
Dim result As DicomAssociateAcceptResultType = e.Scp.Association.GetResult(pid)
Dim uid As DicomUid = DicomUidTable.Instance.Find(absSyntax)
Console.WriteLine(Constants.vbTab & "PresentationContext ({0})", pid)
Console.WriteLine(Constants.vbTab + Constants.vbTab & "AbstractSyntax: {0}", absSyntax)
If Not uid Is Nothing Then
Console.WriteLine(Constants.vbTab + Constants.vbTab & "Description: {0}", uid.Name)
End If
Console.WriteLine(Constants.vbTab + Constants.vbTab & "Result: {0}", result)
i += 1
Loop
End Sub
Private Sub cfindStudy_MatchStudy(ByVal sender As Object, ByVal e As MatchEventArgs(Of Study))
Console.WriteLine("Accession #: " & e.Info.AccessionNumber)
Console.WriteLine("Admitting Diagnosis Description: " & e.Info.AdmitDiagDescrp)
If e.Info.Age.HasValue Then
Console.WriteLine("Age: " & (e.Info.Age.Value.Number.ToString() & e.Info.Age.Value.Reference))
Else
Console.WriteLine("Age: " & ("No Age"))
End If
Console.WriteLine("Study Date: " & e.Info.Date.Value)
If (e.Info.Time.HasValue) Then
Console.WriteLine("Study Time: " & e.Info.Time.ToString())
End If
Console.WriteLine("Study Description: " & e.Info.Description)
Console.WriteLine("Study Id: " & e.Info.Id)
Console.WriteLine("Study Instance: " & e.Info.InstanceUID)
If Not e.Info.ModalitiesInStudy Is Nothing Then
Console.WriteLine("Modalities in Study: " & e.Info.ModalitiesInStudy.ToString())
End If
If Not e.Info.NameOfDrsReading Is Nothing Then
Console.WriteLine("Name of drs reading Study: " & e.Info.NameOfDrsReading.ToString())
End If
Console.WriteLine("Number of Related Instances: " & e.Info.NumberOfRelatedInstances)
Console.WriteLine("Number of Related Series: " & e.Info.NumberofRelatedSeries)
Console.WriteLine("Referring Dr Name: " & e.Info.ReferringPhysiciansName.Full)
Console.WriteLine("Patient Size: " & e.Info.Size.Value)
Console.WriteLine("Patient Weight: " & e.Info.Weight.Value)
Console.WriteLine("Patient Birth Date: " & e.Info.Patient.BirthDate.Value)
Console.WriteLine("Patient Comments: " & e.Info.Patient.Comments)
Console.WriteLine("Patient Id: " & e.Info.Patient.Id)
Console.WriteLine("Patient Sex: " & e.Info.Patient.Sex)
Console.WriteLine("Patient Name")
Console.WriteLine(Constants.vbTab & "Family Name: " & e.Info.Patient.Name.Family)
Console.WriteLine(Constants.vbTab & "Given Name: " & e.Info.Patient.Name.Given)
Console.WriteLine(Constants.vbTab & "Middle Name: " & e.Info.Patient.Name.Middle)
Console.WriteLine(Constants.vbTab & "Name Prefix: " & e.Info.Patient.Name.Prefix)
Console.WriteLine(Constants.vbTab & "Name Suffix: " & e.Info.Patient.Name.Suffix)
Console.WriteLine(Constants.vbTab & "Full Name: " & e.Info.Patient.Name.Full)
Console.WriteLine(Constants.vbTab & "Full Name Dicom Encoded: " & e.Info.Patient.Name.FullDicomEncoded)
Console.WriteLine("==========================================================" & Constants.vbCrLf)
End Sub
Private Sub cfindStudy_AfterCFind(ByVal sender As Object, ByVal e As AfterCFindEventArgs)
Debug.Assert(e.Status = DicomCommandStatusType.Success)
End Sub
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
Your email has been sent to support! Someone should be in touch! If your matter is urgent please come back into chat.
Chat Hours:
Monday - Friday, 8:30am to 6pm ET
Thank you for your feedback!
Please fill out the form again to start a new chat.
All agents are currently offline.
Chat Hours:
Monday - Friday
8:30AM - 6PM EST
To contact us please fill out this form and we will contact you via email.