Example #1
0
 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 + " | ");
 }
Example #2
0
        // 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);
        }
Example #3
0
        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);
        }
Example #4
0
 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");
     }
 }
Example #5
0
        // 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;
        }
Example #6
0
        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);
        }
Example #7
0
        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);
        }
Example #8
0
        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);
            }
        }