00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef DVPSSP_H
00032 #define DVPSSP_H
00033
00034 #include "dcmtk/config/osconfig.h"
00035
00036 #include "dcmtk/ofstd/ofstream.h"
00037 #include "dcmtk/ofstd/ofstring.h"
00038 #include "dcmtk/dcmpstat/dvpstyp.h"
00039 #include "dcmtk/dcmpstat/dvpspll.h"
00040 #include "dcmtk/dcmpstat/dvpsibl.h"
00041 #include "dcmtk/dcmpstat/dvpsabl.h"
00042 #include "dcmtk/dcmpstat/dvpstat.h"
00043 #include "dcmtk/dcmpstat/dvpspr.h"
00044
00045 class DicomImage;
00046 class DVPSPresentationLUT;
00047 class DVConfiguration;
00051 class DVPSStoredPrint
00052 {
00053 public:
00059 DVPSStoredPrint(Uint16 illumin, Uint16 reflection, const char *aetitle = NULL);
00060
00062 DVPSStoredPrint(const DVPSStoredPrint& copy);
00063
00068 DVPSStoredPrint *clone() { return new DVPSStoredPrint(*this); }
00069
00071 virtual ~DVPSStoredPrint();
00072
00077 void clear();
00078
00088 OFCondition read(DcmItem &dset);
00089
00106 OFCondition write(
00107 DcmItem &dset,
00108 OFBool writeRequestedImageSize,
00109 OFBool limitImages,
00110 OFBool updateDecimateCrop,
00111 OFBool ignoreEmptyImages);
00112
00117 OFCondition setOriginator(const char *aetitle);
00118
00122 OFCondition setDestination(const char *aetitle);
00123
00127 OFCondition setPrinterName(const char *name);
00128
00136 OFCondition setImageDisplayFormat(unsigned long columns, unsigned long rows);
00137
00144 OFCondition setFilmSizeID(const char *value);
00145
00152 OFCondition setMagnificationType(const char *value);
00153
00160 OFCondition setSmoothingType(const char *value);
00161
00168 OFCondition setConfigurationInformation(const char *value);
00169
00176 OFCondition setResolutionID(const char *value);
00177
00184 OFCondition setFilmOrientation(DVPSFilmOrientation value);
00185
00192 OFCondition setTrim(DVPSTrimMode value);
00193
00201 OFCondition setRequestedDecimateCropBehaviour(DVPSDecimateCropBehaviour value);
00202
00209 OFCondition setBorderDensity(const char *value);
00210
00217 OFCondition setEmtpyImageDensity(const char *value);
00218
00225 OFCondition setMaxDensity(const char *value);
00226
00233 OFCondition setMinDensity(const char *value);
00234
00245 OFCondition newPrinter(const char *name = NULL, const char *destinationAE = NULL);
00246
00250 const char *getOriginator();
00254 const char *getDestination();
00258 const char *getPrinterName();
00259
00263 unsigned long getImageDisplayFormatColumns();
00264
00268 unsigned long getImageDisplayFormatRows();
00269
00273 DVPSFilmOrientation getFilmOrientation();
00274
00278 DVPSTrimMode getTrim();
00279
00284 DVPSDecimateCropBehaviour getRequestedDecimateCropBehaviour()
00285 {
00286 return decimateCropBehaviour;
00287 }
00288
00292 const char *getStudyInstanceUID();
00293
00297 const char *getSeriesInstanceUID();
00298
00302 const char *getSOPInstanceUID();
00303
00307 const char *getFilmSizeID();
00308
00312 const char *getMagnificationType();
00313
00317 const char *getSmoothingType();
00318
00322 const char *getConfigurationInformation();
00323
00327 const char *getResolutionID();
00328
00332 const char *getBorderDensity();
00333
00337 const char *getEmtpyImageDensity();
00338
00344 const char *getMaxDensity();
00345
00351 const char *getMinDensity();
00352
00356 Uint16 getMaxDensityValue();
00357
00361 Uint16 getMinDensityValue();
00362
00366 size_t getNumberOfImages()
00367 {
00368 return imageBoxContentList.size();
00369 }
00370
00374 size_t getNumberOfAnnotations()
00375 {
00376 return annotationContentList.size();
00377 }
00378
00383 OFCondition deleteImage(size_t idx);
00384
00390 OFCondition deleteMultipleImages(size_t number);
00391
00398 OFCondition deleteSpooledImages();
00399
00405 OFBool imageHasAdditionalSettings(size_t idx)
00406 {
00407 return imageBoxContentList.imageHasAdditionalSettings(idx);
00408 }
00409
00415 OFCondition setImagePolarity(size_t idx, const char *value)
00416 {
00417 return imageBoxContentList.setImagePolarity(idx, value);
00418 }
00419
00425 OFCondition setImageRequestedSize(size_t idx, const char *value)
00426 {
00427 return imageBoxContentList.setImageRequestedSize(idx, value);
00428 }
00429
00437 OFCondition setImageMagnificationType(size_t idx, const char *value)
00438 {
00439 return imageBoxContentList.setImageMagnificationType(idx, value);
00440 }
00441
00449 OFCondition setImageSmoothingType(size_t idx, const char *value)
00450 {
00451 return imageBoxContentList.setImageSmoothingType(idx, value);
00452 }
00453
00461 OFCondition setImageConfigurationInformation(size_t idx, const char *value)
00462 {
00463 return imageBoxContentList.setImageConfigurationInformation(idx, value);
00464 }
00465
00470 const char *getImagePolarity(size_t idx)
00471 {
00472 return imageBoxContentList.getImagePolarity(idx);
00473 }
00474
00479 const char *getImageRequestedSize(size_t idx)
00480 {
00481 return imageBoxContentList.getImageRequestedSize(idx);
00482 }
00483
00488 const char *getImageMagnificationType(size_t idx)
00489 {
00490 return imageBoxContentList.getImageMagnificationType(idx);
00491 }
00492
00497 const char *getImageSmoothingType(size_t idx)
00498 {
00499 return imageBoxContentList.getImageSmoothingType(idx);
00500 }
00501
00506 const char *getImageConfigurationInformation(size_t idx)
00507 {
00508 return imageBoxContentList.getImageConfigurationInformation(idx);
00509 }
00510
00516 DVPSPresentationLUT *getImagePresentationLUT(size_t idx);
00517
00522 DVPSPresentationLUT *getPresentationLUT();
00523
00528 OFCondition setDefaultPresentationLUT();
00529
00535 OFCondition setPresentationLUTShape(DVPSPresentationLUTType shape);
00536
00545 OFCondition setPresentationLookupTable(DcmItem &dset);
00546
00555 Sint32 convertODtoPValue(Uint16 density, unsigned int bits = 8);
00556
00564 OFCondition writeHardcopyImageAttributes(DcmItem &dset);
00565
00578 OFCondition addImageBox(
00579 const char *retrieveaetitle,
00580 const char *refstudyuid,
00581 const char *refseriesuid,
00582 const char *refsopclassuid,
00583 const char *refsopinstanceuid,
00584 const char *requestedimagesize,
00585 const char *patientid,
00586 DVPSPresentationLUT *presentationlut,
00587 OFBool inversePLUT);
00588
00601 OFCondition addImageBox(
00602 const char *retrieveaetitle,
00603 const char *refsopinstanceuid,
00604 const char *requestedimagesize=NULL,
00605 const char *patientid=NULL,
00606 DVPSPresentationLUT *presentationlut=NULL,
00607 OFBool inversePLUT=OFFalse);
00608
00618 OFCondition setSingleAnnotation(
00619 const char *displayformat,
00620 const char *text,
00621 Uint16 position);
00622
00625 void deleteAnnotations();
00626
00631 OFCondition setInstanceUID(const char *uid);
00632
00636 void clearInstanceUID() { sOPInstanceUID.clear(); }
00637
00645 OFCondition getImageReference(size_t idx, const char *&studyUID, const char *&seriesUID, const char *&instanceUID)
00646 {
00647 return imageBoxContentList.getImageReference(idx, studyUID, seriesUID, instanceUID);
00648 }
00649
00655 DVPSPrintPresentationLUTAlignment getReferencedPresentationLUTAlignment() { return referencedPresentationLUTAlignment; }
00656
00663 OFCondition printSCUgetPrinterInstance(DVPSPrintMessageHandler& printHandler);
00664
00675 OFCondition printSCUpreparePresentationLUT(
00676 DVPSPrintMessageHandler& printHandler,
00677 OFBool printerRequiresMatchingLUT,
00678 OFBool printerLUTRenderingPreferred,
00679 OFBool printerSupports12Bit);
00680
00688 OFCondition printSCUcreateBasicFilmSession(
00689 DVPSPrintMessageHandler& printHandler,
00690 DcmDataset& dset,
00691 OFBool plutInSession);
00692
00701 OFCondition printSCUcreateBasicFilmBox(DVPSPrintMessageHandler& printHandler, OFBool plutInSession);
00702
00712 OFCondition printSCUsetBasicImageBox(
00713 DVPSPrintMessageHandler& printHandler,
00714 size_t idx,
00715 DicomImage& image,
00716 OFBool useMonochrome1=OFFalse);
00717
00724 OFCondition printSCUsetBasicAnnotationBox(
00725 DVPSPrintMessageHandler& printHandler,
00726 size_t idx);
00727
00732 OFCondition printSCUprintBasicFilmBox(DVPSPrintMessageHandler& printHandler);
00733
00738 OFCondition printSCUprintBasicFilmSession(DVPSPrintMessageHandler& printHandler);
00739
00744 OFCondition printSCUdelete(DVPSPrintMessageHandler& printHandler);
00745
00753 OFCondition setPrintIllumination(Uint16 value);
00754
00759 Uint16 getPrintIllumination();
00760
00768 OFCondition setPrintReflectedAmbientLight(Uint16 value);
00769
00774 Uint16 getPrintReflectedAmbientLight();
00775
00800 OFBool printSCPCreate(
00801 DVConfiguration& cfg,
00802 const char *cfgname,
00803 DcmDataset *rqDataset,
00804 T_DIMSE_Message& rsp,
00805 DcmDataset *& rspDataset,
00806 OFBool presentationLUTnegotiated,
00807 DVPSPresentationLUT_PList& globalPresentationLUTList,
00808 const char *filmSessionUID,
00809 DcmUniqueIdentifier& study,
00810 DcmUniqueIdentifier& psSeries,
00811 DcmUniqueIdentifier& imgSeries);
00812
00829 OFBool printSCPSet(
00830 DVConfiguration& cfg,
00831 const char *cfgname,
00832 DcmDataset *rqDataset,
00833 T_DIMSE_Message& rsp,
00834 DcmDataset *& rspDataset,
00835 OFBool presentationLUTnegotiated,
00836 DVPSPresentationLUT_PList& globalPresentationLUTList);
00837
00842 OFBool isFilmBoxInstance(const char *c) { if (c && (filmBoxInstanceUID == c)) return OFTrue; else return OFFalse; }
00843
00850 OFBool usesPresentationLUT(const char *c);
00851
00858 DVPSImageBoxContent *duplicateImageBox(const char *uid) { return imageBoxContentList.duplicateImageBox(uid); }
00859
00867 OFBool haveImagePositionClash(const char *uid, Uint16 position) { return imageBoxContentList.haveImagePositionClash(uid, position); }
00868
00874 void replaceImageBox(DVPSImageBoxContent *newImageBox) { imageBoxContentList.replace(newImageBox); }
00875
00883 void updatePresentationLUTList(DVPSPresentationLUT_PList& globalPresentationLUTList);
00884
00891 OFBool matchesPresentationLUT(DVPSPrintPresentationLUTAlignment align) const
00892 {
00893 return imageBoxContentList.matchesPresentationLUT(align);
00894 }
00895
00905 void overridePresentationLUTSettings(
00906 DcmUnsignedShort& newIllumination,
00907 DcmUnsignedShort& newReflectedAmbientLight,
00908 DcmUniqueIdentifier& newReferencedPLUT,
00909 DVPSPrintPresentationLUTAlignment newAlignment);
00910
00917 OFBool emptyPageWarning() { return imageBoxContentList.emptyPageWarning(); }
00918
00919 private:
00920
00922 DVPSStoredPrint& operator=(const DVPSStoredPrint&);
00923
00924
00925
00926
00927 OFBool isImageStorageSOPClass(OFString& sopclassuid);
00928
00933 OFCondition createDefaultValues();
00934
00940 OFCondition addReferencedPLUTSQ(DcmItem &dset);
00941
00949 OFCondition addPresentationLUTReference(DcmItem& dset);
00950
00953 void invalidateCache();
00954
00957 void updateCache();
00958
00959
00960
00962 DcmPersonName patientName;
00964 DcmLongString patientID;
00966 DcmDate patientBirthDate;
00968 DcmCodeString patientSex;
00969
00970
00971
00973 DcmUniqueIdentifier studyInstanceUID;
00975 DcmDate studyDate;
00977 DcmTime studyTime;
00979 DcmPersonName referringPhysicianName;
00981 DcmShortString studyID;
00983 DcmShortString accessionNumber;
00984
00985
00986
00988 DcmUniqueIdentifier seriesInstanceUID;
00990 DcmIntegerString seriesNumber;
00991
00992
00993
00995 DcmLongString manufacturer;
00996
00997
00998
00999
01000
01001
01003 DcmApplicationEntity originator;
01005 DcmApplicationEntity destination;
01007 DcmLongString printerName;
01008
01009
01010
01012 DcmIntegerString instanceNumber;
01013
01015 DcmShortText imageDisplayFormat;
01017 DcmCodeString annotationDisplayFormatID;
01019 DcmCodeString filmOrientation;
01021 DcmCodeString filmSizeID;
01023 DcmCodeString magnificationType;
01025 DcmCodeString smoothingType;
01027 DcmCodeString borderDensity;
01029 DcmCodeString emptyImageDensity;
01031 DcmUnsignedShort minDensity;
01033 DcmUnsignedShort maxDensity;
01035 DcmCodeString trim;
01037 DcmShortText configurationInformation;
01039 DcmUnsignedShort illumination;
01041 DcmUnsignedShort reflectedAmbientLight;
01043 DcmCodeString requestedResolutionID;
01045 DcmUniqueIdentifier referencedPresentationLUTInstanceUID;
01046
01052 DVPSPrintPresentationLUTAlignment referencedPresentationLUTAlignment;
01053
01054
01055
01057 DVPSImageBoxContent_PList imageBoxContentList;
01058
01059
01060
01062 DVPSAnnotationContent_PList annotationContentList;
01063
01064
01065
01066 DVPSPresentationLUT_PList presentationLUTList;
01067
01068
01069
01070
01072 DcmUniqueIdentifier sOPInstanceUID;
01074 DcmCodeString specificCharacterSet;
01076 DcmDate instanceCreationDate;
01078 DcmTime instanceCreationTime;
01079
01081 DcmUniqueIdentifier imageSeriesInstanceUID;
01082
01084 OFBool currentValuesValid;
01086 unsigned long currentNumCols;
01088 unsigned long currentNumRows;
01089
01091 DVPSDecimateCropBehaviour decimateCropBehaviour;
01092
01094 OFString filmSessionInstanceUID;
01095
01097 OFString filmBoxInstanceUID;
01098
01105 OFString presentationLUTInstanceUID;
01106
01108 DVPSPresentationLUT globalPresentationLUT;
01109
01111 OFBool globalPresentationLUTValid;
01112
01114 OFBool transmitImagesIn12Bit;
01115
01117 OFBool renderPresentationLUTinSCP;
01118
01120 OFString tempDensity;
01121
01122 };
01123
01124 #endif
01125
01126
01127
01128
01129
01130
01131
01132
01133
01134
01135
01136
01137
01138
01139
01140
01141
01142
01143
01144
01145
01146
01147
01148
01149
01150
01151
01152
01153
01154
01155
01156
01157
01158
01159
01160
01161
01162
01163
01164
01165
01166
01167
01168
01169
01170
01171
01172
01173
01174
01175
01176
01177
01178
01179
01180
01181
01182
01183
01184
01185
01186
01187
01188
01189
01190
01191
01192
01193
01194
01195
01196
01197
01198
01199
01200
01201
01202
01203
01204
01205
01206
01207
01208
01209
01210
01211
01212
01213
01214
01215
01216
01217
01218
01219
01220
01221
01222
01223
01224
01225
01226
01227
01228
01229
01230
01231
01232
01233
01234
01235
01236
01237
01238
01239
01240
01241
01242
01243
01244
01245
01246
01247
01248
01249
01250
01251
01252
01253
01254
01255
01256
01257
01258
01259
01260
01261
01262
01263
01264
01265
01266
01267
01268
01269
01270
01271
01272
01273
01274
01275
01276