
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
