I am trying to make a DcmDataset containing sequences. I am reusing some revised code in DcmTK (with error code removed):
Where am I wrong??? Please!
DcmElement * delem = NULL;
DcmSequenceOfItems * dseq = NULL;
DcmItem * ditem = NULL;
DcmItem * dset = NULL;
int idx;
DcmDataset * imageDataSet = new DcmDataset();
bzero ((char*)&request, sizeof ( request ));
bzero ((char*)&response, sizeof ( response ));
//First construct the message to report commit result
request.CommandField = DIMSE_N_EVENT_REPORT_RQ;
request.msg.NEventReportRQ.MessageID = 1; /* M */
sprintf ( request.msg.NEventReportRQ.AffectedSOPClassUID,
"%s", UID_StorageCommitmentPushModelSOPClass ); /* M */
sprintf ( request.msg.NEventReportRQ.AffectedSOPInstanceUID,
"%s", UID_StorageCommitmentPushModelSOPInstance ); /* M */
request.msg.NEventReportRQ.DataSetType = DIMSE_DATASET_NULL; /* M */
request.msg.NEventReportRQ.EventTypeID = 1; /* M */
dset = new DcmItem ();
for ( idx = 0; idx < UIDCount; idx++ )//UIDCount=numberofsequences
{
ditem = new DcmItem ();
if ( ditem )
{
dseq = new DcmSequenceOfItems ( DCM_ReferencedInstanceSequence );
if ( dseq )
{
delem = new DcmUniqueIdentifier ( DCM_ReferencedSOPClassUID );
if ( delem )
{
cond = delem->putOFStringArray ( CommittedImagesArray [ idx ].RefSOPClassUID );}
ditem->insert ( delem, OFTrue /*replaceOld */ );
};
delem = new DcmUniqueIdentifier ( DCM_ReferencedSOPInstanceUID );
if ( delem )
{
cond = delem->putOFStringArray ( CommittedImagesArray [ idx ].RefSOPClassUID );
ditem->insert ( delem, OFTrue /*replaceOld */ );
}
delem = new DcmUnsignedShort ( DCM_FailureReason );
if ( delem )
{
cond = delem->putUint16 ( CommittedImagesArray [ idx ].FailureReason );
ditem->insert ( delem, OFTrue /*replaceOld */ );
}
cond = dseq->insert ( ditem, OFFalse );
cond = dset->insert ( dseq, OFFalse );
}
}
cond = imageDataSet->insert ( ( DcmSequenceOfItems * )dset, OFFalse );
DcmFileFormat * FFormat = new DcmFileFormat ( imageDataSet ) ;
cond =
FFormat->saveFile( "C:/testfile.dcm",
EXS_LittleEndianExplicit,
EET_ExplicitLength,
EGL_recalcGL,
EPD_withoutPadding,
0,
0,
true );
I get an empty file!
Code: Select all