#include <ImFusion/Core/Filesystem/Url.h>
#include <ImFusion/Core/Log.h>
#include <ImFusion/Dicom/DicomPacsCommunication.h>
#include <dcmtk/dcmdata/dctk.h>
int main(int argc, char** argv)
{
if (argc < 3)
{
return 1;
}
int loadSeries = -1;
if (argc >= 4)
OFLog::configure(OFLogger::LogLevel::ERROR_LOG_LEVEL);
{
return 2;
}
if (serverAeTitle.
empty())
{
return 3;
}
{
return 4;
}
else
{
return 5;
}
DcmDataset request;
request.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
request.putAndInsertOFStringArray(DCM_StudyID, "");
request.putAndInsertOFStringArray(DCM_StudyTime, "");
request.putAndInsertOFStringArray(DCM_StudyDate, "");
request.putAndInsertOFStringArray(DCM_StudyDescription, "");
request.putAndInsertOFStringArray(DCM_PatientID, "");
request.putAndInsertOFStringArray(DCM_PatientName, "");
request.putAndInsertOFStringArray(DCM_PatientSex, "");
request.putAndInsertOFStringArray(DCM_PatientBirthDate, "");
request.putAndInsertOFStringArray(DCM_PatientComments, "");
{
request.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "PATIENT");
dcp.
sendFindRequest(ImFusion::DicomPacsCommunication::PatientRootRetrieveInformationModel, request, [&](
auto dataset) {
if (dataset)
});
for (const auto& dataset : datasets)
}
{
request.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "STUDY");
dcp.
sendFindRequest(ImFusion::DicomPacsCommunication::StudyRootRetrieveInformationModel, request, [&](
auto dataset) {
if (dataset)
});
for (const auto& dataset : datasets)
}
{
request.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
request.putAndInsertOFStringArray(DCM_SeriesInstanceUID, "");
request.putAndInsertOFStringArray(DCM_SeriesNumber, "");
request.putAndInsertOFStringArray(DCM_SeriesTime, "");
request.putAndInsertOFStringArray(DCM_SeriesDate, "");
request.putAndInsertOFStringArray(DCM_SeriesDescription, "");
dcp.
sendFindRequest(ImFusion::DicomPacsCommunication::StudyRootRetrieveInformationModel, request, [&](
auto dataset) {
if (dataset)
{
dataset->findAndGetOFString(DCM_SeriesInstanceUID, seriesUID);
}
});
for (const auto& dataset : datasets)
}
if (loadSeries >= 0 && loadSeries < seriesUIDs.
size())
{
DcmDataset moveRequest;
moveRequest.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
moveRequest.putAndInsertOFStringArray(DCM_SeriesInstanceUID, seriesUIDs[loadSeries]);
dcp.
sendMoveRequest(ImFusion::DicomPacsCommunication::StudyRootRetrieveInformationModel, moveRequest, [&](
auto dataset) {
if (dataset)
});
for (const auto& dataset : datasets)
dataset->print(
std::cout, DCMTypes::PF_shortenLongTagValues);
}
return 0;
}
Class facilitating the communication with DICOM PACS servers.
Definition DicomPacsCommunication.h:94
void sendFindRequest(RetrieveInformationModel queryModel, DcmDataset &request, std::function< void(std::unique_ptr< DcmDataset >)> responseItemCallback, std::atomic< bool > *abortFlag=nullptr)
Synchronously sends a C-FIND request to the currently connected PACS server.
void sendMoveRequest(RetrieveInformationModel queryModel, DcmDataset &request, std::function< void(std::unique_ptr< DcmDataset >)> responseItemCallback)
Synchronously sends a C-MOVE request to the currently connected PACS server.
bool sendEchoRequest()
Connects to the configured PACS and sends a C-ECHO message in order to test the association.
Entity representing a URL (Uniform Resource Locator).
Definition Url.h:83
bool isValid() const
Checks if the URL can be interpreted as valid.
std::string host() const
Returns the host of the URL (part of the authority).
std::string port() const
Returns the port of the URL (part of the authority).
void init(Level globalMinimumLevel, Mode operationMode)
Initialize the logging framework.
void deinit()
Deinitialize the logging framework.
@ Warning
Error messages where the emitting code can continue but the result might be unexpected/bad.
Definition Log.h:28
@ Synchronous
All log events are synchronously forwarded to all registered loggers.
Definition Log.h:38
Structure encapsulating all information needed to connect to a PACS instance.
Definition DicomPacsCommunication.h:27
std::string clientAETitle
Application Entity to use by the DICOM SCP server for receiving images.
Definition DicomPacsCommunication.h:57
bool isValid() const
Returns true if the configuration is valid, e.g.
int connectionTimeout
Connection Timeout (seconds)
Definition DicomPacsCommunication.h:60
unsigned int clientPort
Port to use by the DICOM SCP server for receiving images.
Definition DicomPacsCommunication.h:56