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