[Dcmlib] Re : VM

Mathieu Malaterre mathieu.malaterre at kitware.com
Mon Sep 27 14:54:48 CEST 2004


Jean-Pierre ROUX wrote:
> Bonjour.
> 
> Pas de probleme pour ajouter le champ V(alue) M(ultiplicity) dans de dicom
> dictionary.
> 
> Question : je n'ai pas tt a fait capter ce que tu veux en faire.
> Son contenu est (comme tout le reste) sujet à caution.
> Ex : Pixel Spacing :<<normalement>> la VM vaut 2 (pixelSizeX, pixelSizeY)
> Tu te souviens sans doute de l'image ou il y avait en fait 3 valeurs :
> pixelSizeX, 0, pixelSizeY.
> (j'en ai d'autres avec une seule valeur, d'autres enccore avec ZERO valeur
> (le champ existe, avec une longueur = 0)
> On a pris l'option implicite de ramener ce qu'il y a sur disque (on compte
> le nb de black slash lorsque c'est une chaine de caract, on divise la
> longueur totale du champ par la longueur nominale de l'onbet stocké -ex un
> US de longueur 8 est compris par gdcm comme etant 4 US qui se suivent.
> Cest à l'utilisateur de savoir ce qu'il en fait -dans qq cas (rares) il y a
> un accesseur '"a valeur ajoutee" qui le decortique pour lui-
> 
> Lorsqu'on aura stocké la VM dans le dictionnaire, elle pourra servir a
> verifier que l'utilisateur de stocke pas des choses 'illégales'. Ex :
> actuellement, un utilisateur pourrait stocker un Pixel Spacing contenant 4
> champs elementaires, par exemple  pixelSizeX, pixelSizeY, pixelSizeZ,
> pixelSizeT, ce qui n'aurait pas de sens par rapport a la norme.
> 
> Ma question, en fait etait au sujet des accesseurs que tu te proposes de
> générer automatiquement ...
> tu Get quoi, et tu Set quoi, avec ca?

Tiens c'est vrai que j'ai pas vraiment penser aux problemes que l'on 
peut rencontrer quelque chose du genre:

//GET

//ca c'est ecris a la main
void gdcmHeader::GetGeneric(float/int *s, string name, int vm);
{
   string value = GetByName(name); //spacing
   if( nb de slash == vm - 1)
    {
    s[0] = value[0];
    s[1] = value[1];
    }
   else
    {
    //bon ben va falloir improviser...
    }
}

//generated:
void gdcmHeader::GetSpacing(float *s)
{
   GetGeneric(s, "Spacing", 2); //created from dicomV3.dic
}



//SET


//ca c'est ecris a la main
string FormatString(float* vec_of_float/int, int vm)
{
   string += vec_of_float[0];  //vm > 1 ??
   for(i=1)
    {
    string += '\';	//
    string += vec_of_float[i];
    }
   return string;
}

   //generated don't edit
gdcmHeader::SetSpacing(float a, float b)
{
   float vec[2] = {a, b};
   string value = FormatString(vec, 2);
   SetByName("Spacing", value);
}


J'essai cette semaine d'implementer le machin ca sera sans doute plus clair.

Mathieu





More information about the Dcmlib mailing list