
GetMatMembership()
******************


FUNKTION
========

   string *GetMatMembership(string mat)


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

   /p/daemon/materialdb.c (MATERIALDB)


ARGUMENTE
=========

   string mat - ein Material


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

   Gibt alle Gruppen, denen das Material angehoert zurueck. Geeignet, um
   die Eigenschaften eines Materials zu ueberpruefen.


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

   Array von Strings mit Materialiengruppen oder ({})


BEISPIELE
=========

   // 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 etwas besser erkannt (zu 5%), aber
    // alles aus Metall wird zu +100% besser erkannt ...
    mname=MATERIALDB->MaterialName(mat[i], WER,
           ({5, ([MATRGROUP_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(),
                GroupName(), MaterialName(),
                GetGroupMembers()

7. Mai 2004 Gloinson
