DICOM @ OFFIS

Discussion Forum for OFFIS DICOM Tools - For registration, send email with desired user name to the OFFIS DICOM team
It is currently Thu, 2017-04-27, 00:23

All times are UTC + 1 hour




Post new topic This topic is locked, you cannot edit posts or make further replies.  [ 65 posts ]  Go to page 1, 2, 3, 4, 5  Next
Author Message
 Post subject: PACS connection
PostPosted: Mon, 2011-11-07, 11:26 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
Hello everybody,
I trying to connect my new application to PACS Network.
I found this code :

Code:
connection(QString qipAdress, QString qport, QString qaet)
{

T_ASC_Network *net; // network struct, contains DICOM upper layer FSM etc.
//ASC_initializeNetwork(NET_REQUESTOR, 0, 1000 /* timeout */, &net);
ASC_initializeNetwork(NET_REQUESTOR, 104, 1000, &net);

T_ASC_Parameters *params; // parameters of association request
ASC_createAssociationParameters(&params, ASC_DEFAULTMAXPDU);

// set calling and called AE titles
ASC_setAPTitles(params, "ECHOSCU", "ANY-SCP", NULL);

// the DICOM server accepts connections at server.nowhere.com port 104
QString XXX = "server.nowhere.com:"+qport;
ASC_setPresentationAddresses(params, qipAdress, XXX);

// list of transfer syntaxes, only a single entry here
const char* ts[] = { UID_LittleEndianImplicitTransferSyntax };

// add presentation context to association request
ASC_addPresentationContext(params, 1, UID_VerificationSOPClass, ts, 1);

// request DICOM association
T_ASC_Association *assoc;
if (ASC_requestAssociation(net, params, &assoc).good())
{
   QMessageBox::information(0,"","Parametre ok");
   if (ASC_countAcceptedPresentationContexts(params) == 1)
      {
         QMessageBox::information(0,"","Connexion ok");
         // the remote SCP has accepted the Verification Service Class
         DIC_US id = assoc->nextMsgID++; // generate next message ID
         DIC_US status; // DIMSE status of C-ECHO-RSP will be stored here
         DcmDataset *sd = NULL; // status detail will be stored here
         // send C-ECHO-RQ and handle response
         DIMSE_echoUser(assoc, id, DIMSE_BLOCKING, 0, &status, &sd);
         delete sd; // we don't care about status detail
      }
}
ASC_releaseAssociation(assoc); // release association
ASC_destroyAssociation(&assoc); // delete assoc structure
ASC_dropNetwork(&net); // delete net structure
return 0;
}


But I do not understand it.
What is "server.nowhere.com" ???

I suppose that I need to give who I am and where I want to be connected. So, in my example, "server.nowhere.com" could be qipAdress and qipAdress could be my ip adress ? Isn't it ?

--------
And (AFTER), with this code, how I can ask some question to the server and download some Dicom pictures ??

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Mon, 2011-11-07, 11:32 
Offline
DCMTK Developer

Joined: Fri, 2004-11-05, 13:47
Posts: 1543
Location: Oldenburg, Germany
Hi,

Quote:
I suppose that I need to give who I am and where I want to be connected. So, in my example, "server.nowhere.com" could be qipAdress and qipAdress could be my ip adress ? Isn't it ?


XXX is the server you want to connect to. qipAdress is your own adress.

This is the original example in the online documentation.

Also, instead, you might use the DcmSCU class which is more object-oriented. An example can be found in our support wiki.

Best regards,
Michael


Top
 Profile  
 
 Post subject:
PostPosted: Mon, 2011-11-07, 11:57 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
Thanks Michael,

But I don't understand :
With : ASC_setPresentationAddresses(params, "120.40.30.99:104", qipAdress+":"+qport); the connection is failded.

And with : ASC_setPresentationAddresses(params, qipAdress+":"+qport, "120.40.30.99:104"); the connection is done.

(I mine when it is done, I can read the ok message)

I will test now with your second option, the class DcmSCU, and I go back to keep you inform

***************
As for me, if I switch the two parameter, my ip address, and the server, the connection is done even if the network is broken. So maybe something listen on my computer, sorry...

_________________
Respectueusement,
MitMal


Last edited by Mitmal on Mon, 2011-11-07, 12:25, edited 1 time in total.

Top
 Profile  
 
 Post subject:
PostPosted: Mon, 2011-11-07, 12:11 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
And just before, can you explain to me what this line mines:
ASC_initializeNetwork(NET_REQUESTOR, 0, 1000 /* timeout */, &net);

0 is it my port or the server port ?

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Mon, 2011-11-07, 12:51 
Offline
DCMTK Developer

Joined: Fri, 2004-11-05, 13:47
Posts: 1543
Location: Oldenburg, Germany
Looking into the header file:
Code:
/** network instance creation function (constructor)
 *  @param role association acceptor, requestor or both
 *  @param acceptorPort acceptor port for incoming connections.
 *    For association requestors, zero should be passed here.
 *  @param timeout timeout for network operations, in seconds
 *  @param network T_ASC_Network will be allocated and returned in this parameter
 *  @param options network options. Only DUL_FULLDOMAINNAME is currently defined
 *    as a possible option.
 *  @return EC_Normal if successful, an error code otherwise
 */
OFCondition ASC_initializeNetwork(
    T_ASC_NetworkRole role,
    int acceptorPort,
    int timeout,
    T_ASC_Network ** network,
    unsigned long options = 0);


Top
 Profile  
 
 Post subject:
PostPosted: Mon, 2011-11-07, 12:54 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
Of course, thank you, know I will look every time in the header ;-)

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 11:06 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
I trying to use the DcmSCU example, but I don't understand this part :
Code:
int MedicTool2::connectionPacs(QString serverIpAdress, QString serverPort, QString serverAet, QString myIpAdress, QString myPort, QString myAet)
{
   QProgressDialog progressDialog ("Connecting\nPlease wait...",QString(),0,100);
   progressDialog.setWindowModality(Qt::WindowModal);
   progressDialog.show();

   /* Setup DICOM connection parameters */
   OFLog::configure(OFLogger::DEBUG_LOG_LEVEL);
   DcmTestSCU scu;
progressDialog.setValue(10);

   // set AE titles
   OFString ipAdresse = serverIpAdress;
   Uint16 port = serverPort.toUInt();
   OFString aet = serverAet;

   scu.setAETitle("TEST-SCU" );
   scu.setPeerHostName(ipAdresse);
   scu.setPeerPort(port);
   scu.setPeerAETitle(aet);


In setAETitle, setPeerHostName, setPeerPort, setPeerAETitle what kind of information I need to give ?


**********************
After looking in the header file , I saw:
Code:
/** Set SCU's AETitle to be used in association negotiation
   *  @param myAETtitle [in] The SCU's AETitle to be used
   */
  void setAETitle(const OFString &myAETtitle);

  /** Set SCP's host (hostname or IP address) to talk to in association negotiation
   *  @param peerHostName [in] The SCP's hostname or IP address to be used
   */
  void setPeerHostName(const OFString &peerHostName);

  /** Set SCP's AETitle to talk to in association negotiation
   *  @param peerAETitle [in] The SCP's AETitle to be used
   */
  void setPeerAETitle(const OFString &peerAETitle);


So I add this lines :
Code:
// set AE titles
   OFString OFmyAet = myAet;
   OFString OFipAdresse = serverIpAdress;
   Uint16 OFport = serverPort.toUInt();
   OFString OFaet = serverAet;

   scu.setAETitle(OFmyAet);
   scu.setPeerHostName(OFipAdresse);
   scu.setPeerPort(OFport);
   scu.setPeerAETitle(OFaet);


But the process failed, I can read the display 40 but after it's write "Unable to negotiate association: " :
Code:
   /* Initialize network */
   OFCondition result = scu.initNetwork();
   if (result.bad())
   {
      QMessageBox::information(0,"","Unable to set up the network: ");
      return 1;
   }
progressDialog.setValue(40);
 
   /* Negotiate Association */
   result = scu.negotiateAssociation();
   if (result.bad())
   {
      QMessageBox::information(0,"","Unable to negotiate association: ");
      return 1;
   }
progressDialog.setValue(50);


I will search how to add the result.text() but maybe have you some ideas ?

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 11:26 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
The message is :
Quote:
Unable to negociate association: DUL Association Rejected


Can you explain me what is it ?


***********************
Ok, it was my fault (logically), i was make a fault in my AETitle...lol

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 14:14 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
Great, now I can run a ECHO test on my connection to the PACS.
Now I need to search (name, first name, number, date ...) and after download the images on my hard drive.

Do you know how to do this?

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 14:21 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
For those who are interested, my function ECHO is :
Code:
/***
Connexion et tentative de requete ECHO vers le noeud DICOM spécifié
 -serverIpAdress represente l'adresse IP nécéssaire à la connexion
 -serverPort represente le numero du port nécéssaire à la connexion, coté serveur
 -serverAet represente l'AET nécéssaire à la connexion
 -monIpAdress represente l'adresse IP de la machine
 -monPort represente le numero du port nécéssaire à la connexion coté client
 -monAet represente l'AET de la machine
*/
bool MedicTool2::echoDicomNode(QString serverIpAdress, QString serverPort, QString serverAet, QString monIpAdress, QString monPort, QString monAet)
{
   QProgressDialog progressDialog ("Connexion ECHO en cours\nVeuillez patienter...",QString(),0,60);
   progressDialog.setWindowModality(Qt::WindowModal);
   progressDialog.show();

   //Mise en place des parametre pour établire la connexion DICOM
   OFLog::configure(OFLogger::DEBUG_LOG_LEVEL);
   DcmTestSCU scu;
progressDialog.setValue(10);

   //Mise en place des parametres AET
   OFString OFmonAet = monAet;            scu.setAETitle(OFmonAet);
   OFString OFipAdresse = serverIpAdress;   scu.setPeerHostName(OFipAdresse);
   Uint16 OFport = serverPort.toUInt();   scu.setPeerPort(OFport);
   OFString OFaet = serverAet;            scu.setPeerAETitle(OFaet);
progressDialog.setValue(20);

   //Utilisation du contexte de présentation FIND / MOVE dans la racine des series, pour proposer toutes les syntaxes de transfert compressées (Use presentation context for FIND/MOVE in study root, propose all uncompressed transfer syntaxes)
   OFList<OFString> ts;
   ts.push_back(UID_LittleEndianExplicitTransferSyntax);
   ts.push_back(UID_BigEndianExplicitTransferSyntax);
   ts.push_back(UID_LittleEndianImplicitTransferSyntax);
   scu.addPresentationContext(UID_FINDStudyRootQueryRetrieveInformationModel, ts);
   scu.addPresentationContext(UID_MOVEStudyRootQueryRetrieveInformationModel, ts);
   scu.addPresentationContext(UID_VerificationSOPClass, ts);
progressDialog.setValue(30);
 
   //Initialisation du reseau
   OFCondition result = scu.initNetwork();
   if (result.bad())
   {//PROBLEME DE CONNEXION
      QString add = result.text();
      QMessageBox::information(0,"Test ECHO","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nImpossible d'initialiser le reseau: "+add);
      return false;
   }
progressDialog.setValue(40);
 
   //TENTATIVE D'ASSOCIATION
   result = scu.negotiateAssociation();
   if (result.bad())
   {//PROBLEME D'IDENTIFICATION
      QString add = result.text();
      QMessageBox::information(0,"Test ECHO","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nImpossible de negocier l'association: "+add);
      return false;
   }
progressDialog.setValue(50);
 
   //Voyons si le serveur est en écoute: Contruction et envoi d'une demande C-ECHO (Let's look whether the server is listening: Assemble and send C-ECHO request)
   result = scu.sendECHORequest(0);
   if (result.bad())
   {//PROBLEME, LE SERVER NE REPOND PAS
      QString add = result.text();
      QMessageBox::information(0,"Test ECHO","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nImpossible d'utiliser le processus E-ECHO avec le serveur: "+add);
      return false;
   }
   else return true;
progressDialog.setValue(60);
   return false;
}


I am looking how to add a specific request now, may it be here, right?
Code:
//Construction et envoi d'une requete C-FIND, pour trouver les examens
   FINDResponses findResponses;
   DcmDataset req;
   req.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "STUDY");
   req.putAndInsertOFStringArray(DCM_StudyInstanceUID, "DUMONT^NICOLAS");
   T_ASC_PresentationContextID presID = findUncompressedPC(UID_FINDStudyRootQueryRetrieveInformationModel, scu);
   if (presID == 0)
   {//PROBLEME avec le contexte de présentation
      QMessageBox::information(0,"CONNEXION","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nIl n'y a pas de contexte de présentation non compressé pour Study Root FIND");
      return 1;
   }


But that does not work ... I am looking for, if you have ideas :wink:

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 14:23 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
Problem, I have FINDResponses but I do not have MOVEResponses...do you know why ???? :cry:

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Tue, 2011-11-08, 18:00 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
I tested with:
Code:
req.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "STUDY");
req.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
   
req.putAndInsertOFStringArray(DCM_PatientName, "DUMONT");
req.putAndInsertOFStringArray(DCM_Modality, "CT");
req.putAndInsertOFStringArray(DCM_PatientID,"001578802");


But that does not seem correct. The results are not correct in with my PACS data (when I use an other viewer)

Can you tell me if this is the right approach?
I want to search according to some criteria:
- Patient's name
- The patient's first name (or name and surname together)
- modality
- Earlier
- Date posterior
- And also the type of sequence can be (but it may be difficult)


************************
Here is my code now:

Code:
//Construction et envoi d'une requete C-FIND, pour trouver les examens
   FINDResponses findResponses;
   DcmDataset req;
   req.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
   //req.putAndInsertOFStringArray(DCM_StudyInstanceUID, "");
   
   QString nom = "RADERANIRINA Sendrison";
   nom.replace(" ","^");
   OFString OFNom = nom;
   req.putAndInsertOFStringArray(DCM_PatientName, OFNom);
   //req.putAndInsertOFStringArray(DCM_Modality, "CT");
   //req.putAndInsertOFStringArray(DCM_PatientID,"001578802");


The search takes me back out the number 10, which corresponds to the number of series to my patients the on PACS.
Only now I wish I could find the patient starting with a beginning, or have a string in their name.
A little like in SQL, when I try using% xxx%

Do you know how to do this?

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Wed, 2011-11-09, 10:38 
Offline
DCMTK Developer

Joined: Fri, 2004-11-05, 13:47
Posts: 1543
Location: Oldenburg, Germany
Hi,

Quote:
Problem, I have FINDResponses but I do not have MOVEResponses...do you know why ????


Maybe you have a version installed that is not depending on the latest snapshots? See also note at the end of the DcmSCU example on the wiki.

Quote:
Can you tell me if this is the right approach?


Query/Retrieve requests need to follow specific rules, laid down in part 4 of the DICOM standard. I explained the most basic ones several times in the forum; please try to understand by reading the standard and searching the forum.

Best regards,
Michael

P.S: Sorry to interrupt your thread :-)


Top
 Profile  
 
 Post subject:
PostPosted: Wed, 2011-11-09, 11:53 
Offline

Joined: Mon, 2011-04-18, 19:36
Posts: 112
Location: France
hum hum thank you Michael but it does not help me ^ ^
But that's OK, here is my code with which I can get my info:
Code:
req.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "STUDY");
   //req.putAndInsertOFStringArray(DCM_QueryRetrieveLevel, "SERIES");
   
   //CONSTRUCTION DE LA REQUETE
   //AVEC LES CHAMPS DU FILTRE
   QString nom = MedicUi.m_lineEditName->text()+"*"; nom.replace(" ","^"); OFString OFNom = nom; req.putAndInsertOFStringArray(DCM_PatientName, OFNom);
   QString d1 =  MedicUi.m_lineEditExamD1->text();
   QString d2 =  MedicUi.m_lineEditExamD1->text();

   //CHAMPS INDISPENSEMBLE
   req.putAndInsertOFStringArray(DCM_Modality, "MR");
   //req.putAndInsertOFStringArray(DCM_SeriesDescription, "PERFUSION");

   //INFORMATIONS NECESSAIRE POUR IDENTIFIER L'EXAMEN
   DcmElement *dcmelementStudyDate = new DcmAttributeTag(DCM_StudyDate); req.insert(dcmelementStudyDate);
   DcmElement *dcmelementPatientName = new DcmAttributeTag(DCM_PatientName); req.insert(dcmelementPatientName);
   DcmElement *dcmelementModality = new DcmAttributeTag(DCM_Modality); req.insert(dcmelementModality);
   DcmElement *dcmelementNaissancePatient = new DcmAttributeTag(DCM_PatientBirthDate); req.insert(dcmelementNaissancePatient);
   DcmElement *dcmelementIDPatient = new DcmAttributeTag(DCM_PatientID); req.insert(dcmelementIDPatient);
   DcmElement *dcmelementStudyDescription = new DcmAttributeTag(DCM_StudyDescription); req.insert(dcmelementStudyDescription);
   DcmElement *dcmelementCommentairePatient = new DcmAttributeTag(DCM_PatientComments); req.insert(dcmelementCommentairePatient);
   DcmElement *dcmelementSexePatient = new DcmAttributeTag(DCM_PatientSex); req.insert(dcmelementSexePatient);
   DcmElement *dcmelementStudyId = new DcmAttributeTag(DCM_StudyID); req.insert(dcmelementStudyId);

   T_ASC_PresentationContextID presID = findUncompressedPC(UID_FINDStudyRootQueryRetrieveInformationModel, scu);
   if (presID == 0)
   {//PROBLEME avec le contexte de présentation
      QMessageBox::information(0,"CONNEXION","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nIl n'y a pas de contexte de présentation non compressé pour Study Root FIND");
      return res;
   }
progressDialog.setValue(70);

   result = scu.sendFINDRequest(presID, &req, &findResponses);
   if (result.bad())
   {//PROBLEME AVEC LE RESULTAT DE LA RECHERCHE, il n'y a pas de serie disponnible
      QString add = result.text();
      QMessageBox::information(0,"CONNEXION","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nIl n'y a pas de series disponnibles: "+add);
      return res;
   }
   else
   { //La connexion est opérationnelle et il y a des series à récupérer
      //QMessageBox::information(0,"CONNEXION","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nIl y a des series disponnibles");
   }
 progressDialog.setValue(80);

   //Construction et envoi d'une requete C-MOVE, pour tous les examens identifiés au dessus
   presID = findUncompressedPC(UID_MOVEStudyRootQueryRetrieveInformationModel, scu);
   if (presID == 0)
   {//PROBLEME avec le contexte de présentation
      QMessageBox::information(0,"CONNEXION","TENTATIVE DE CONNEXION :\nJe suis : "+monIpAdress+":"+monPort+" ("+monAet+")\nEt je veux parler à : "+serverIpAdress+":"+serverPort+" ("+serverAet+")\n\nIl n'y a pas de contexte de présentation non compressé pour Study Root MOVE");
      return res;
   }
progressDialog.setValue(90);

   OFListIterator(FINDResponse*) study = findResponses.begin();
   Uint32 studyCount = 1;
   OFBool failed = OFFalse;
   int nbr = 0;
   while (study != findResponses.end() && result.good())
   {
      
      //Chaque boucle exécuté récupère toutes l'image
      //MOVEResponses moveResponses;

      //Etre sûr que ce n'est pas la dernière réponse, car elle n'a pas de données
      if ( (*study)->m_dataset != NULL)
      {
         OFString studyInstanceUID;
         result = (*study)->m_dataset->findAndGetOFStringArray(DCM_StudyInstanceUID, studyInstanceUID);
         //On essaye seulement de récupérer la série si il y a effectivement un ID d'instance de série, sinon on l'ignore
         if (result.good())
         {
            //req.putAndInsertOFStringArray(DCM_StudyInstanceUID, studyInstanceUID);
            // On récupère toutes les images de cette série particulière
            QString val = "";
            OFString OFStrin;
            (*study)->m_dataset->findAndGetOFString(DCM_StudyDate, OFStrin); val = val +"Date examen: "+OFStrin.c_str()+""+Outils::separateur;
            (*study)->m_dataset->findAndGetOFString(DCM_PatientName, OFStrin); val = val +"Nom patient: "+OFStrin.c_str()+""+Outils::separateur;
            (*study)->m_dataset->findAndGetOFString(DCM_Modality, OFStrin); val = val +"Modalité: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_PatientBirthDate, OFStrin); val = val +"Date de Naissance patient: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_PatientID, OFStrin); val = val +"ID patient: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_StudyDescription, OFStrin); val = val +"Description Examen: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_PatientComments, OFStrin); val = val +"Commentaire patient: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_PatientSex, OFStrin); val = val +"Sexe: "+OFStrin.c_str()+"\n";
            (*study)->m_dataset->findAndGetOFString(DCM_StudyID, OFStrin); val = val +"ID examen: "+OFStrin.c_str()+"\n";
            res = res + val;
            QMessageBox::information(0,"RESULTAT",val);

            /*result = scu.sendMOVERequest(presID, "MOVESCP", &req, &moveResponses);
            if (result.good())
            {
               QMessageBox::information(0,"","Received study #");
               studyCount++;
            }*/

            nbr++;
            if (nbr>1000) break;
         }
      }
      study++;
   }
   //QString val = ""; val.sprintf("%d",nbr); QMessageBox::information(0,"CONNEXION","Il y a "+val+" réponse");

   if (result.bad())


I must specify in the request what attributes I want it back.
(As QSL, after the SELECT, I must say what I want fields to return)

-------------

For MOVEResponses I saw the comment at the bottom of the wiki, only it does not explain (or I do not understand) what to do

_________________
Respectueusement,
MitMal


Top
 Profile  
 
 Post subject:
PostPosted: Wed, 2011-11-09, 11:58 
Offline
DCMTK Developer

Joined: Fri, 2004-11-05, 13:47
Posts: 1543
Location: Oldenburg, Germany
For the MOVEResponse: If it is not part of your DCMTK installation, then you need to get a newer version, e.g. the latest snapshot.

Michael


Top
 Profile  
 
Display posts from previous:  Sort by  
Post new topic This topic is locked, you cannot edit posts or make further replies.  [ 65 posts ]  Go to page 1, 2, 3, 4, 5  Next

All times are UTC + 1 hour


Who is online

Users browsing this forum: Google [Bot] and 0 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group