public override DcmItem Clone() { DcmItemSequence sq = new DcmItemSequence(Tag, StreamPosition, StreamLength, Endian); foreach (DcmItemSequenceItem si in SequenceItems) { sq.AddSequenceItem((DcmItemSequenceItem)si.Clone()); } return(sq); }
private static void Save(XElement parent, DcmDataset dataset) { foreach (XElement attr in parent.Elements("attr")) { DicomTag tag = DicomTag.Parse(attr.Attribute("tag").Value); DicomVR vr = DicomVR.Lookup(attr.Attribute("vr").Value); int len = int.Parse(attr.Attribute("len").Value, CultureInfo.InvariantCulture); if (vr == DicomVR.SQ) { DcmItemSequence seq = new DcmItemSequence(tag); foreach (XElement itm in attr.Elements("item")) { DcmItemSequenceItem item = new DcmItemSequenceItem(); Save(itm, item.Dataset); seq.AddSequenceItem(item); } dataset.AddItem(seq); } else if (len == -1) { DcmFragmentSequence seq = new DcmFragmentSequence(tag, vr); bool first = true; foreach (XElement itm in attr.Elements("item")) { if (first) { SaveFragmentOffsetTable(itm, seq); first = false; } else { SaveFragmentItem(itm, seq); } } dataset.AddItem(seq); } else { DcmElement element = DcmElement.Create(tag, vr); element.SetValueString(attr.FirstText()); dataset.AddItem(element); } } }
/// <summary> /// Original Attributes Sequence (0400,0561) /// Sequence of Items containing all attributes that were /// removed or replaced by other values in the main dataset. /// One or more Items may be permitted in this sequence. /// </summary> /// <param name="originalAttributesSource"> /// Source of Previous Values (0400,0564) /// The source that provided the SOP Instance prior to the /// removal or replacement of the values. For example, this /// might be the Institution from which imported SOP Instances /// were received. /// </param> /// <param name="modifyingSystem"> /// Modifying System (0400,0563) /// Identification of the system which removed and/or replaced /// the attributes. /// </param> /// <param name="reasonForModification"> /// Reason for the Attribute Modification (0400,0565) /// Reason for the attribute modification. Defined terms are: /// COERCE = Replace values of attributes such as Patient /// Name, ID, Accession Number, for example, during import /// of media from an external institution, or reconciliation /// against a master patient index. /// CORRECT = Replace incorrect values, such as Patient /// Name or ID, for example, when incorrect worklist item /// was chosen or operator input error. /// </param> /// <param name="tagsToModify"> /// Tags from this dataset to be removed or modified. /// </param> public void CreateOriginalAttributesSequence(string originalAttributesSource, string modifyingSystem, string reasonForModification, IEnumerable<DicomTag> tagsToModify) { DcmItemSequenceItem item = new DcmItemSequenceItem(); item.Dataset.AddElementWithValue(DicomTags.SourceOfPreviousValues, originalAttributesSource); item.Dataset.AddElementWithValue(DicomTags.AttributeModificationDateTime, DateTime.Now); item.Dataset.AddElementWithValue(DicomTags.ModifyingSystem, modifyingSystem); item.Dataset.AddElementWithValue(DicomTags.ReasonForTheAttributeModification, reasonForModification); DcmItemSequence sq = new DcmItemSequence(DicomTags.ModifiedAttributesSequence); item.Dataset.AddItem(sq); DcmItemSequenceItem modified = new DcmItemSequenceItem(); sq.AddSequenceItem(modified); foreach (DicomTag tag in tagsToModify) { DcmItem modifiedItem = GetItem(tag); if (modifiedItem == null) modified.Dataset.AddItem(modifiedItem.Clone()); } DcmItemSequence oasq = GetSQ(DicomTags.OriginalAttributesSequence); if (oasq == null) { oasq = new DcmItemSequence(DicomTags.OriginalAttributesSequence); AddItem(oasq); } oasq.AddSequenceItem(item); }
protected override void OnReceiveNGetRequest(byte presentationID, ushort messageID, DicomUID requestedClass, DicomUID requestedInstance, DicomTag[] attributes) { if (requestedClass == DicomUID.PrinterSOPClass && requestedInstance == DicomUID.PrinterSOPInstance) { DcmDataset ds = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL"); ds.AddElementWithValue(DicomTags.PrinterStatus, "NORMAL"); ds.AddElementWithValue(DicomTags.PrinterName, _config.PrinterName); ds.AddElementWithValue(DicomTags.Manufacturer, "N/A"); ds.AddElementWithValue(DicomTags.ManufacturersModelName, "N/A"); ds.AddElementWithValue(DicomTags.DeviceSerialNumber, "N/A"); ds.AddElementWithValue(DicomTags.SoftwareVersions, "N/A"); ds.SetDateTime(DicomTags.DateOfLastCalibration, DicomTags.TimeOfLastCalibration, DateTime.Now); SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success); return; } if (requestedClass == DicomUID.PrintJobSOPClass) { DcmPrintJob job = null; foreach (DcmPrintJob pj in _jobs) { if (pj.SOPInstanceUID == requestedInstance) { job = pj; break; } } if (job == null) { job = new DcmPrintJob(requestedInstance); job.ExecutionStatus = "DONE"; job.CreationDateTime = DateTime.Today; job.PrintPriority = _session.PrintPriority; job.PrinterName = _config.PrinterName; job.Originator = Associate.CallingAE; } SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, job.Dataset, DcmStatus.Success); return; } if (requestedClass == DicomUID.PrinterConfigurationRetrievalSOPClass && requestedInstance == DicomUID.PrinterConfigurationRetrievalSOPInstance) { DcmDataset ds = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); DcmDataset config = new DcmDataset(DicomTransferSyntax.ImplicitVRLittleEndian); DcmItemSequence sq = new DcmItemSequence(DicomTags.PrinterConfigurationSequence); sq.AddSequenceItem(config); ds.AddItem(sq); SendNGetResponse(presentationID, messageID, requestedClass, requestedInstance, ds, DcmStatus.Success); return; } SendAbort(DcmAbortSource.ServiceProvider, DcmAbortReason.NotSpecified); }
public override DcmItem Clone() { DcmItemSequence sq = new DcmItemSequence(Tag, StreamPosition, StreamLength, Endian); foreach (DcmItemSequenceItem si in SequenceItems) { sq.AddSequenceItem((DcmItemSequenceItem)si.Clone()); } return sq; }