SVG5/SDCMCommonStructure.h
2025-10-12 13:55:56 +09:00

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