[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