GroupName()
***********


FUNKTION
========

   string GroupName(string grp)


DEFINIERT IN
============

   /p/daemon/materialdb.c (MATERIALDB)


ARGUMENTE
=========

   string grp - ein Gruppenname


BESCHREIBUNG
============

   Gibt die Langbeschreibung des Gruppennamens zurueck.


RUECKGABEWERT
=============

   Die Gruppenbeschreibung oder "Unbekanntes"


BEISPIELE
=========

   // simpel
   tmp=m_indices(ob->QueryProp(P_MATERIAL));
   write("Dieses Objekt gehoert u.a. zur Gruppe "+
         MATERIALDB->GroupName(MATERIALDB->GetMatMembership(tmp[0])[0])+
         ".\n");
   // gibt die erste Gruppenzugehoerigkeit des erste Materials in
   // P_MATERIAL zurueck (bei MATGROUP_METAL z.B. "... zur Gruppe Metalle.")

   // ein weiser Schmied:
   int i;
   string *mat, mname, mgroup;
   mat=m_indices(ob->QueryProp(P_MATERIAL));
   i=sizeof(mat);

   write("Der Schmied sagt: "+ob->Name(WER)+" besteht aus ...\n");
   while(i--) {
    // den Namen erkennen/aussprechen:
    // Materialien werden allgemein ganz schlecht erkannt (zu 5%), aber
    // alles aus Metall wird zu +100% gut erkannt ...
    mname=MATERIALDB->MaterialName(mat[i], WER,
           ({5, ([MATERIAL_SYMMETRIC_RECOGNIZABILITY:
                      ({MATGROUP_METAL, 100})])}));

    // und nur Metalle analysieren ...
    if(MATERIALDB->MaterialGroup(([mat[i]:100]),MATGROUP_METAL)>=100) {
     int j;
     string *mgr;
     mgr=MATERIALDB->GetMatMembership(mat[i]);
     j=sizeof(mgr);
     mgroup=" gehoert zu ";
     while(j--) {
      mgroup+=MATERIALDB->GroupName(mgr[j]);
      if(j>0) mgroup+=", ";
     }
    } else mgroup=" kenne ich nicht";
    printf("%-12.12s: %s\n",mname, mgroup);
   }


SIEHE AUCH
==========

   Konzepte:    material, materialerkennung
   Grundlegend: P_MATERIAL, /sys/thing/material.h
   Master:      AddMaterial(), ConvMaterialList(), MaterialGroup(),
                MaterialName(),
                GetGroupMembers(), GetMatMembership()

7. Mai 2004 Gloinson
