658 lines
15 KiB
C++
658 lines
15 KiB
C++
#pragma once
|
|
|
|
#ifndef SDCM_COMMON_STRUCTURE_H
|
|
#define SDCM_COMMON_STRUCTURE_H
|
|
|
|
#include "dcmtk/ofstd/ofstring.h"
|
|
#include "dcmtk/dcmdata/dcdeftag.h"
|
|
#include "dcmtk/dcmdata/dctag.h"
|
|
|
|
#include "csdcm.h"
|
|
#include "common.h"
|
|
|
|
typedef enum _SDCM_SCU_STATE
|
|
{
|
|
NONE = 0,
|
|
INITIALIZE_NETWORK,
|
|
CREATE_ASSOCIATION_PARAMETERS,
|
|
SET_AP_TITLES,
|
|
SET_TRANSPORT_LAYER_TYPE,
|
|
SET_PRESENTATION_ADDRESSES,
|
|
REQUEST_ASSOCIATION,
|
|
COUNT_ACCEPTED_PRESENTATION_CONTEXTS,
|
|
CHECK_USER_IDENTITY_RESPONSE,
|
|
RELEASE_ASSOCIATION,
|
|
DESTROY_ASSOCIATION,
|
|
DROP_NETWORK,
|
|
COMPLETED,
|
|
COMPLETE,
|
|
ADD_PRESENTATION_CONTEXT,
|
|
ABORT_ASSOCIATION,
|
|
REJECTED_ASSOCIATION,
|
|
UNKNOWN_ERROR_ASSOCIATION,
|
|
PEER_REQUESTED_RELEASE,
|
|
PEER_ABORTED_ASSOCIATION,
|
|
CONNECTION_ERROR,
|
|
CREATE_ASSOCIATION,
|
|
TRY_FINDSCU,
|
|
SET_APTITLES,
|
|
ADD_STORAGE_PRESENTATION_CONTEXTS,
|
|
TRY_STORE_SCU,
|
|
SDCM_ERROR=0x1000,
|
|
}SDCM_SCU_STATE;
|
|
|
|
struct SDATA_SCHEDULED_DATA
|
|
{
|
|
public:
|
|
QString strScheduledStationAETitle;
|
|
QString strScheduledProcedureStepStartDate;
|
|
QString strScheduledProcedureStepStartTime;
|
|
QString strScheduledPerformingPhysicianName;
|
|
QString strScheduledStepDescription;
|
|
QString strScheduledCodeValue;
|
|
|
|
SDATA_SCHEDULED_DATA()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
strScheduledStationAETitle = "";
|
|
strScheduledProcedureStepStartDate = "";
|
|
strScheduledProcedureStepStartTime = "";
|
|
strScheduledPerformingPhysicianName = "";
|
|
strScheduledStepDescription = "";
|
|
}
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
if (tag == DCM_ScheduledProcedureStepDescription)
|
|
{
|
|
SetData(strScheduledStepDescription, strData);
|
|
}
|
|
else if (tag == DCM_ScheduledStationAETitle)
|
|
{
|
|
SetData(strScheduledStationAETitle, strData);
|
|
}
|
|
else if (tag == DCM_PerformedProcedureStepStartDate)// || tag==DCM_ScheduledProcedureStepStartDate)
|
|
{
|
|
SetData(strScheduledProcedureStepStartDate, strData);
|
|
}
|
|
else if (tag == DCM_PerformedProcedureStepStartTime)
|
|
{
|
|
SetData(strScheduledProcedureStepStartTime, strData);
|
|
}
|
|
else if (tag == DCM_ScheduledPerformingPhysicianName)
|
|
{
|
|
SetData(strScheduledPerformingPhysicianName, strData);
|
|
}
|
|
else if (tag == DCM_ScheduledProcedureStepStartDate)
|
|
{
|
|
SetData(strScheduledProcedureStepStartDate, strData);
|
|
}
|
|
else if (tag == DCM_ScheduledProcedureStepStartTime)
|
|
{
|
|
SetData(strScheduledProcedureStepStartTime, strData);
|
|
}
|
|
else if (tag == DCM_CodeValue)
|
|
{
|
|
SetData(strScheduledCodeValue, strData);
|
|
}
|
|
}
|
|
|
|
void SetData(QString& strTagData, OFString strData)
|
|
{
|
|
if(strData.size()>0)
|
|
{
|
|
strTagData = strData.c_str();
|
|
}
|
|
}
|
|
|
|
};
|
|
|
|
struct SDATA_PATIENT
|
|
{
|
|
public:
|
|
QString strPatientID;
|
|
QString strPatientName;
|
|
QString strPatientSex;
|
|
QString strPatientAge;
|
|
|
|
//Database New
|
|
QString strPatientBirthDate;
|
|
QString strPatientBirthTime;
|
|
QString strPatientWeight;
|
|
QString strPatientComments;
|
|
QString strPatientLocation; //외래, 입원 구분
|
|
|
|
QString m_strTestString;
|
|
|
|
SDATA_PATIENT()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
strPatientID = "";
|
|
strPatientName = "";
|
|
strPatientSex = "";
|
|
strPatientBirthDate = "";
|
|
strPatientBirthTime = "";
|
|
strPatientWeight = "";
|
|
strPatientComments = "";
|
|
strPatientAge = "";
|
|
strPatientLocation = "";
|
|
}
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
if (tag == DCM_PatientID)
|
|
{
|
|
strPatientID = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientName)
|
|
{
|
|
strPatientName = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientAge)
|
|
{
|
|
strPatientAge = strData.c_str();
|
|
}
|
|
else if (tag == DCM_ScheduledProcedureStepLocation)
|
|
{
|
|
strPatientLocation = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientSex)
|
|
{
|
|
OFString strTmp;
|
|
strTmp = strData.c_str();
|
|
|
|
if(strTmp.size()>0)
|
|
{
|
|
if (strTmp.at(0) == 'M')
|
|
{
|
|
strPatientSex = "M";
|
|
}
|
|
else if (strTmp.at(0) == 'F')
|
|
{
|
|
strPatientSex = "F";
|
|
}
|
|
else if (strTmp.at(0) == 'O')
|
|
{
|
|
strPatientSex = "O";
|
|
}
|
|
else
|
|
{
|
|
strPatientSex = strData.c_str();
|
|
}
|
|
}
|
|
}
|
|
else if (tag == DCM_PatientBirthDate)
|
|
{
|
|
strPatientBirthDate = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientBirthTime)
|
|
{
|
|
strPatientBirthTime = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientWeight)
|
|
{
|
|
strPatientWeight = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientComments)
|
|
{
|
|
strPatientComments = strData.c_str();
|
|
}
|
|
}
|
|
};
|
|
|
|
struct SDATA_STUDY
|
|
{
|
|
public:
|
|
int nPatientIndex;
|
|
QString strStudyInstanceUID;
|
|
QString strStudyDate;
|
|
QString strStudyTime;
|
|
|
|
//Database New
|
|
QString strAccessionNumber;
|
|
QString strStudyDescription;
|
|
QString strReferringPhysiciansName;
|
|
|
|
SDATA_STUDY()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
strAccessionNumber = "";
|
|
strStudyInstanceUID = "";
|
|
strStudyDate = "";
|
|
strStudyTime = "";
|
|
strStudyDescription = "";
|
|
strReferringPhysiciansName = "";
|
|
nPatientIndex = 0;
|
|
}
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
if (tag == DCM_AccessionNumber)
|
|
{
|
|
strAccessionNumber = strData.c_str();
|
|
}
|
|
else if (tag == DCM_StudyInstanceUID)
|
|
{
|
|
strStudyInstanceUID = strData.c_str();
|
|
}
|
|
else if (tag == DCM_ScheduledProcedureStepDescription)
|
|
{
|
|
strStudyDescription = strData.c_str();
|
|
}
|
|
else if (tag == DCM_StudyDate)
|
|
{
|
|
strStudyDate = strData.c_str();
|
|
}
|
|
else if (tag == DCM_StudyTime)
|
|
{
|
|
strStudyTime = strData.c_str();
|
|
}
|
|
}
|
|
|
|
|
|
|
|
};
|
|
|
|
struct SDATA_SERIES
|
|
{
|
|
public:
|
|
int nStudyIndex;
|
|
int nSeriesNumber;
|
|
QString strSeriesInstanceUID;
|
|
QString strModality;
|
|
QString strLaterality;
|
|
QString strSeriesDate;
|
|
QString strSeriesTime;
|
|
|
|
//Database New
|
|
QString strBodyPartExamined;
|
|
QString strSeriesDescription;
|
|
QString strOperatorsName;
|
|
|
|
SDATA_SERIES()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
nStudyIndex = 0;
|
|
nSeriesNumber = 0;
|
|
strBodyPartExamined = "";
|
|
strSeriesInstanceUID = "";
|
|
strSeriesDescription = "";
|
|
strModality = "";
|
|
strOperatorsName = "";
|
|
strLaterality = "";
|
|
strSeriesDate = "";
|
|
strSeriesTime = "";
|
|
}
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
if (tag == DCM_RequestedProcedureDescription)
|
|
{
|
|
strSeriesDescription = strData.c_str();
|
|
}
|
|
else if (tag == DCM_BodyPartExamined)
|
|
{
|
|
strBodyPartExamined = strData.c_str();
|
|
}
|
|
else if (tag == DCM_Modality)
|
|
{
|
|
strModality = strData.c_str();
|
|
}
|
|
else if (tag == DCM_OperatorsName)
|
|
{
|
|
strOperatorsName = strData.c_str();
|
|
}
|
|
else if (tag == DCM_Laterality)
|
|
{
|
|
strLaterality = strData.c_str();
|
|
}
|
|
else if(tag == DCM_SeriesDate)
|
|
{
|
|
strSeriesDate = strData.c_str();
|
|
}
|
|
else if(tag == DCM_SeriesTime)
|
|
{
|
|
strSeriesTime = strData.c_str();
|
|
}
|
|
}
|
|
};
|
|
|
|
struct SDATA_IMAGE
|
|
{
|
|
public:
|
|
int nSeriesIndex;
|
|
int nImageIndex;
|
|
int nImageNumber;
|
|
int bDelete;
|
|
int nFileType;
|
|
QString strFileLocation;
|
|
QString strInstanceUID;
|
|
|
|
//Database New
|
|
QString strImageType;
|
|
QString strAcquisitionDate;
|
|
QString strAcquisitionTime;
|
|
QString strContentDate; // Pixel Creation Date
|
|
QString strContentTime; // Pixel Creation Time
|
|
int nAcquisitionNumber;
|
|
int nInstanceNumber;
|
|
QString strPatientOrientation;
|
|
QString strImageLaterality;
|
|
QString strImageComments; // Option
|
|
//(0088, 0200) Icon Image Sequence : usage or not
|
|
//Burned In Annotation
|
|
|
|
SDATA_IMAGE()
|
|
{
|
|
Init();
|
|
}
|
|
|
|
void Init()
|
|
{
|
|
nImageIndex = 0;
|
|
nSeriesIndex = 0;
|
|
nImageNumber = 0;
|
|
bDelete = 0;
|
|
nFileType = 0;
|
|
strFileLocation = "";
|
|
strInstanceUID = "";
|
|
{
|
|
strImageType = "DERIVED";
|
|
strImageType += char(0x5c);
|
|
strImageType += "PRIMARY";
|
|
}
|
|
|
|
strAcquisitionDate = "";
|
|
strAcquisitionTime = "";
|
|
strContentDate = ""; // Pixel Creation Date
|
|
strContentTime = ""; // Pixel Creation Time
|
|
nAcquisitionNumber = 0;
|
|
nInstanceNumber = 0;
|
|
strPatientOrientation = "";
|
|
strImageLaterality = "";
|
|
strImageComments = ""; // Option
|
|
//(0088, 0200) Icon Image Sequence : usage or not
|
|
//Burned In Annotation
|
|
}
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
if (tag == DCM_ImageLaterality)
|
|
{
|
|
strImageLaterality = strData.c_str();
|
|
}
|
|
else if (tag == DCM_ImageType)
|
|
{
|
|
strImageType = strData.c_str();
|
|
}
|
|
}
|
|
};
|
|
|
|
class WorklistResponseData
|
|
{
|
|
public:
|
|
WorklistResponseData()
|
|
{
|
|
strRequestedProcedureID = "";
|
|
strReferringPhysicianName = "";
|
|
strRequestingPhysician = "";
|
|
strRequestedProcedureDescription = "";
|
|
strAdmissionID = "";
|
|
strEnc = "";
|
|
|
|
m_Study.Init();
|
|
m_Series.Init();
|
|
m_Image.Init();
|
|
m_Patient.Init();
|
|
m_ScheduledData.Init();
|
|
|
|
strPatientOrientation = "";
|
|
}
|
|
|
|
|
|
void InsertData(DcmTag tag, OFString strData)
|
|
{
|
|
//Uint16 nGroup = tag.getGroup();
|
|
//Uint16 nElement = tag.getElement();
|
|
|
|
m_Study.InsertData(tag, strData);
|
|
m_Series.InsertData(tag, strData);
|
|
m_Image.InsertData(tag, strData);
|
|
m_Patient.InsertData(tag, strData);
|
|
m_ScheduledData.InsertData(tag, strData);
|
|
|
|
if(tag==DCM_RequestedProcedureID)
|
|
{
|
|
|
|
}
|
|
if (tag.getEVR() == EVR_DA)
|
|
{
|
|
OFString strTmp;
|
|
strTmp = strData.c_str();
|
|
|
|
/*
|
|
int nFind = strTmp.Find("-");
|
|
if (nFind > 0)
|
|
{
|
|
strTmp = strTmp.Left(nFind);
|
|
}
|
|
*/
|
|
strData = strTmp.c_str();
|
|
}
|
|
|
|
else if (tag == DCM_SpecificCharacterSet)
|
|
{
|
|
strEnc = strData.c_str();
|
|
}
|
|
else if (tag == DCM_RequestedProcedureDescription)
|
|
{
|
|
strRequestedProcedureDescription = strData.c_str();
|
|
}
|
|
else if (tag == DCM_RequestingPhysician)
|
|
{
|
|
strRequestingPhysician = strData.c_str();
|
|
}
|
|
|
|
else if (tag == DCM_RequestedProcedureID)
|
|
{
|
|
strRequestedProcedureID = strData.c_str();
|
|
}
|
|
else if (tag == DCM_ReferringPhysicianName)
|
|
{
|
|
strReferringPhysicianName = strData.c_str();
|
|
}
|
|
else if (tag == DCM_AdmissionID)
|
|
{
|
|
strAdmissionID = strData.c_str();
|
|
}
|
|
else if (tag == DCM_PatientOrientation)
|
|
{
|
|
strPatientOrientation = strData.c_str();
|
|
}
|
|
}
|
|
|
|
QString strPatientOrientation;
|
|
QString strRequestingPhysician;
|
|
QString strRequestedProcedureID;
|
|
QString strRequestedProcedureDescription;
|
|
QString strReferringPhysicianName;
|
|
QString strAdmissionID;
|
|
QString strEnc;
|
|
|
|
SDATA_PATIENT m_Patient;
|
|
SDATA_STUDY m_Study;
|
|
SDATA_SERIES m_Series;
|
|
SDATA_IMAGE m_Image;
|
|
SDATA_SCHEDULED_DATA m_ScheduledData;
|
|
|
|
|
|
};
|
|
|
|
struct MPPSRequestData
|
|
{
|
|
MPPSRequestData()
|
|
{
|
|
m_strPatientID.clear();
|
|
m_strPatientName.clear();
|
|
m_strPatientBirthDate.clear();
|
|
m_strPatientSex.clear();
|
|
m_strAccessionNumber.clear();
|
|
m_strReferencedSOPClassUID.clear();
|
|
m_strReferencedSOPInstanceUID.clear();
|
|
}
|
|
|
|
MPPSRequestData(const WorklistResponseData& wr, OFString strReferencedSOPClassUID="")
|
|
{
|
|
m_strPatientID = wr.m_Patient.strPatientID.toStdString().c_str();
|
|
m_strPatientName = wr.m_Patient.strPatientName.toStdString().c_str();
|
|
m_strPatientBirthDate = wr.m_Patient.strPatientBirthDate.toStdString().c_str();
|
|
m_strPatientSex = wr.m_Patient.strPatientSex.toStdString().c_str();
|
|
m_strAccessionNumber = wr.m_Study.strAccessionNumber.toStdString().c_str();
|
|
m_strReferencedSOPClassUID = strReferencedSOPClassUID;
|
|
m_strReferencedSOPInstanceUID = wr.m_Study.strStudyInstanceUID.toStdString().c_str();
|
|
}
|
|
|
|
OFString m_strPatientID;
|
|
OFString m_strPatientName;
|
|
OFString m_strPatientBirthDate;
|
|
OFString m_strPatientSex;
|
|
OFString m_strAccessionNumber;
|
|
OFString m_strReferencedSOPClassUID;
|
|
OFString m_strReferencedSOPInstanceUID;
|
|
};
|
|
|
|
typedef enum _STRENC_TYPE
|
|
{
|
|
STRENC_ANSI = 0,
|
|
STRENC_KOR,
|
|
STRENC_UTF8
|
|
}STRENC_TYPE;
|
|
|
|
typedef struct _SDCM_AGE
|
|
{
|
|
_SDCM_AGE()
|
|
{
|
|
m_nYears = -1;
|
|
m_nMonths = -1;
|
|
m_nDays = -1;
|
|
}
|
|
int m_nYears;
|
|
int m_nMonths;
|
|
int m_nDays;
|
|
}SDCM_AGE;
|
|
|
|
typedef struct _SDCM_SERVER_INFO
|
|
{
|
|
QString m_strServer_IP;
|
|
int m_nServer_Port;
|
|
QString m_strServer_AETitle;
|
|
QString m_strClient_AETitle;
|
|
}SDCM_SERVER_INFO;
|
|
|
|
typedef struct _ImageFormat
|
|
{
|
|
_ImageFormat()
|
|
{
|
|
m_pData = NULL;
|
|
m_nWidth = -1;
|
|
m_nHeight = -1;
|
|
}
|
|
|
|
_ImageFormat(int** pData, int nWidth, int nHeight)
|
|
{
|
|
m_pData = new int*;
|
|
*m_pData = (int*)*pData;
|
|
m_pData = pData;
|
|
m_nWidth = nWidth;
|
|
m_nHeight = nHeight;
|
|
}
|
|
|
|
_ImageFormat(unsigned char** pData, int nWidth, int nHeight)
|
|
{
|
|
m_pData = new int*;
|
|
*m_pData = (int*)*pData;
|
|
m_nWidth = nWidth;
|
|
m_nHeight = nHeight;
|
|
}
|
|
|
|
_ImageFormat(void** pData, int nWidth, int nHeight)
|
|
{
|
|
m_pData = new int*;
|
|
*m_pData = (int*)*pData;
|
|
m_nWidth = nWidth;
|
|
m_nHeight = nHeight;
|
|
}
|
|
|
|
~_ImageFormat()
|
|
{
|
|
if (m_pData != NULL)
|
|
{
|
|
if (*m_pData != NULL)
|
|
{
|
|
delete[] * m_pData;
|
|
*m_pData = NULL;
|
|
}
|
|
|
|
|
|
// delete m_pData;
|
|
m_pData = NULL;
|
|
}
|
|
m_nWidth = 0;
|
|
m_nHeight = 0;
|
|
}
|
|
int** m_pData;
|
|
int m_nWidth;
|
|
int m_nHeight;
|
|
}ImageFormat, *PImageFormat;
|
|
|
|
|
|
|
|
typedef struct _SDCM_GROUP_ELEMENT
|
|
{
|
|
#pragma pack(push)
|
|
#pragma pack(2)
|
|
WORD m_wGroup;
|
|
WORD m_wElement;
|
|
|
|
_SDCM_GROUP_ELEMENT()
|
|
{
|
|
m_wGroup = 0;
|
|
m_wElement = 0;
|
|
}
|
|
_SDCM_GROUP_ELEMENT(WORD wGroup, WORD wElement)
|
|
{
|
|
m_wGroup = wGroup;
|
|
m_wElement = wElement;
|
|
}
|
|
|
|
BOOL operator==(const _SDCM_GROUP_ELEMENT& rhs)
|
|
{
|
|
BOOL bSame = FALSE;
|
|
if(m_wGroup==rhs.m_wGroup && m_wElement==rhs.m_wElement)
|
|
{
|
|
bSame = TRUE;
|
|
}
|
|
return bSame;
|
|
}
|
|
#pragma pack(pop)
|
|
}SDCM_GROUP_ELEMENT, *PSDCM_GROUP_ELEMENT;
|
|
|
|
|
|
#endif
|