static String stampa(DCXOBJ currObj, int elementNumber) { try { currElem = currObj.getElementByTag(elementNumber); } catch (Exception e) { Console.WriteLine(e.Message); } //Tag Not Found return(elementName(elementNumber) + ": " + currElem.Value + " | "); }
// to do before calling server public static DCXOBJ encodeQuery(Dictionary <int, string> searchMap) { DCXOBJ obj = new DCXOBJ(); DCXELM el = new DCXELM(); foreach (var pair in searchMap) { el.Init(pair.Key); // ad esempio (int)QueryRetrieveLevel if (pair.Value != "") { el.Value = pair.Value; // ad esempio "STUDY" } obj.insertElement(el); } return(obj); }
public static String extractValue(DCXOBJ currObj, int dicomTagNumber) { string ret = ""; DCXELM currElem = new DCXELM(); try { currElem = currObj.getElementByTag(dicomTagNumber); ret = currElem.Value; } catch (Exception) { errorMessage("Nel risultato della query non è contenuto il tag DICOM '" + dicomTagName(dicomTagNumber) + "'"); } return(ret); }
private string TryGetString(DCXOBJ obj, DICOM_TAGS_ENUM tag) { try { DCXELM e = obj.getElementByTag((int)tag); if (e != null && e.Value != null) { return(obj.getElementByTag((int)tag).Value.ToString()); } else { return("N/A"); } } catch (COMException) { return("N/A"); } }
// evento: arrivato il file (lo controllo e rispondo se è ok) private void OnStoreDoneEventHandler(string filename, bool status, ref bool accept) { // if status, file saved! if (!status) { errorCount++; errorMessage("errore nel salvataggio del file!"); } // check if file already exists string sop_instance_uid = null; DCXOBJ o = new DCXOBJ(); o.openFile(filename); DCXELM e = o.getElementByTag((int)DICOM_TAGS_ENUM.sopInstanceUID); if (e != null) { sop_instance_uid = e.Value.ToString(); } ReleaseComObject(e); ReleaseComObject(o); if (sop_instance_uid != null) { String destinationFilename = storageDirectory + sop_instance_uid + ".dcm"; if (!File.Exists(destinationFilename)) { File.Move(filename, destinationFilename); } else { errorMessage("file gia esiste"); File.Delete(filename); } } accept = true; }
public static String find(Association ass, Selector sel) { DCXOBJ obj = fillData(sel); String ret = ""; // Create the requester object DCXREQ req = new DCXREQ(); // send the query DCXOBJIterator it = req.Query(ass.myAET, ass.TargetAET, ass.TargetIp, ass.TargetPort, "1.2.840.10008.5.1.4.1.2.1.1", obj); DCXOBJ currObj = null; try { int index = 1; // Iterate over the query results for (; !it.AtEnd(); it.Next()) { currObj = it.Get(); string message = ""; message += stampa(currObj, (int)DICOM_TAGS_ENUM.patientName); if (level == "STUDY" || level == "SERIES" || level == "IMAGE") { message += stampa(currObj, (int)DICOM_TAGS_ENUM.StudyDescription); } if (level == "SERIES" || level == "IMAGE") { message += stampa(currObj, (int)DICOM_TAGS_ENUM.SeriesDescription); } if (level == "IMAGE") { message += stampa(currObj, (int)DICOM_TAGS_ENUM.sopClassUid); message += stampa(currObj, (int)DICOM_TAGS_ENUM.sopInstanceUID); } if (level == "STUDY") { message += stampa(currObj, (int)DICOM_TAGS_ENUM.studyInstanceUID); } if (level == "SERIES") { message += stampa(currObj, (int)DICOM_TAGS_ENUM.seriesInstanceUID); if (index == 1) // l'UID della serie è il primo dello studio // non uso la funzione stampa, se no mi aggiunge altro testo oltre all'id { try { currElem = currObj.getElementByTag((int)DICOM_TAGS_ENUM.seriesInstanceUID); } catch (Exception e) { Console.WriteLine(e.Message); } //Tag Not Found ret = currElem.Value; Console.WriteLine(ret); } } index++; Console.WriteLine(message); } } catch (Exception ex) { MessageBox.Show(ex.Message); } return(ret); }
static DCXOBJ fillData(Selector sel) { DCXOBJ obj = new DCXOBJ(); DCXELM el = new DCXELM(); level = sel.QueryRetrieveLevel; el.Init((int)DICOM_TAGS_ENUM.QueryRetrieveLevel); el.Value = level; obj.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.patientName); if (sel.patientName != "") { el.Value = sel.patientName; } obj.insertElement(el); if (level == "STUDY" || level == "SERIES" || level == "IMAGE") { el.Init((int)DICOM_TAGS_ENUM.StudyDescription); obj.insertElement(el); } if (level == "SERIES" || level == "IMAGE") { el.Init((int)DICOM_TAGS_ENUM.SeriesDescription); obj.insertElement(el); } if (level == "IMAGE") { el.Init((int)DICOM_TAGS_ENUM.sopClassUid); if (sel.sopClassUid != "") { el.Value = sel.sopClassUid; } obj.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.sopInstanceUID); if (sel.sopInstanceUID != "") { el.Value = sel.sopInstanceUID; } obj.insertElement(el); } if (level == "STUDY" || level == "SERIES") { el.Init((int)DICOM_TAGS_ENUM.studyInstanceUID); if (sel.studyInstanceUID != "") { el.Value = sel.studyInstanceUID; } obj.insertElement(el); } if (level == "SERIES") { el.Init((int)DICOM_TAGS_ENUM.seriesInstanceUID); obj.insertElement(el); } return(obj); }
public void Query() { DCXOBJIterator it = null; DCXREQ req = new DCXREQClass(); DCXOBJ rp = new DCXOBJ(); DCXELM el = new DCXELM(); try { //el.Init((int)DICOM_TAGS_ENUM.studyInstanceUID); //rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.AccessionNumber); // el.Value = "34*"; rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.PatientsName); rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.patientID); rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.PatientBirthDate); rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.PatientSex); rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.PatientsWeight); rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.Modality); rp.insertElement(el); // A lot of code to handle all the cases of date and time matching // that eventually goes into the elements: ScheduledProcedureStepStartDate and ScheduledProcedureStepStartTime el.Init((int)DICOM_TAGS_ENUM.ScheduledProcedureStepSequence); rp.insertElement(el); //el.Init((int)DICOM_TAGS_ENUM.ScheduledProcedureStepStartDate); //rp.insertElement(el); //el.Init((int)DICOM_TAGS_ENUM.NameOfPhysiciansReadingStudy); //rp.insertElement(el); el.Init((int)DICOM_TAGS_ENUM.ReferringPhysicianName); rp.insertElement(el); // Connect the requester object's callback to our method req.OnQueryResponseRecieved += new IDCXREQEvents_OnQueryResponseRecievedEventHandler(OnQueryResponseRecievedAction); rp.Dump("query.txt"); // send the query command it = req.Query(config.localAETitle, config.targetAETitle, config.serverIp, config.serverPort, "1.2.840.10008.5.1.4.31", /// Modality Worklist SOP Class rp); LoadResultsToGrid(it); } catch (Exception ex) { MessageBox.Show("Query failed: " + ex.Message); } finally { ReleaseComObject(req); ReleaseComObject(rp); ReleaseComObject(it); ReleaseComObject(el); } }