Panda3D
Public Member Functions | Static Public Member Functions | List of all members
EggMaterialCollection Class Reference

This is a collection of materials by MRef name. More...

Public Member Functions

 __init__ ()
 
 __init__ (const EggMaterialCollection copy)
 
bool addMaterial (EggMaterial material)
 Explicitly adds a new material to the collection. More...
 
 clear ()
 Removes all materials from the collection. More...
 
int collapseEquivalentMaterials (int eq, EggGroupNode node)
 Walks through the collection and collapses together any separate materials that are equivalent according to the indicated equivalence factor, eq (see EggMaterial::is_equivalent_to()). More...
 
int collapseEquivalentMaterials (int eq, EggMaterialCollection::MaterialReplacement removed)
 Walks through the collection and collapses together any separate materials that are equivalent according to the indicated equivalence factor, eq (see EggMaterial::is_equivalent_to()). More...
 
EggMaterial createUniqueMaterial (const EggMaterial copy, int eq)
 
int extractMaterials (EggGroupNode node)
 Walks the egg hierarchy beginning at the indicated node, and removes any EggMaterials encountered in the hierarchy, adding them to the collection. More...
 
EggMaterial findMref (str mref_name)
 Returns the material with the indicated MRef name, or NULL if no material matches. More...
 
int findUsedMaterials (EggNode node)
 Walks the egg hierarchy beginning at the indicated node, looking for materials that are referenced by primitives but are not already members of the collection, adding them to the collection. More...
 
EggMaterialCollection operator= (const EggMaterialCollection copy)
 
bool removeMaterial (EggMaterial material)
 Explicitly removes a material from the collection. More...
 
 removeUnusedMaterials (EggNode node)
 Removes any materials from the collection that aren't referenced by any primitives in the indicated egg hierarchy. More...
 
 sortByMref ()
 Sorts all the materials into alphabetical order by MRef name. More...
 
 uniquifyMrefs ()
 Guarantees that each material in the collection has a unique MRef name. More...
 

Static Public Member Functions

static replaceMaterials (EggGroupNode node, const EggMaterialCollection::MaterialReplacement replace)
 Walks the egg hierarchy, changing out any reference to a material appearing on the left side of the map with its corresponding material on the right side. More...
 

Detailed Description

This is a collection of materials by MRef name.

It can extract the materials from an egg file and sort them all together; it can also manage the creation of unique materials and the assignment of unique MRef names.

Member Function Documentation

◆ __init__() [1/2]

__init__ ( )

◆ __init__() [2/2]

__init__ ( const EggMaterialCollection  copy)

◆ addMaterial()

bool addMaterial ( EggMaterial  material)

Explicitly adds a new material to the collection.

Returns true if the material was added, false if it was already there or if there was some error.

◆ clear()

clear ( )

Removes all materials from the collection.

◆ collapseEquivalentMaterials() [1/2]

int collapseEquivalentMaterials ( int  eq,
EggGroupNode  node 
)

Walks through the collection and collapses together any separate materials that are equivalent according to the indicated equivalence factor, eq (see EggMaterial::is_equivalent_to()).

The return value is the number of materials removed.

This flavor of collapse_equivalent_materials() automatically adjusts all the primitives in the egg hierarchy to refer to the new material pointers.

◆ collapseEquivalentMaterials() [2/2]

int collapseEquivalentMaterials ( int  eq,
EggMaterialCollection::MaterialReplacement  removed 
)

Walks through the collection and collapses together any separate materials that are equivalent according to the indicated equivalence factor, eq (see EggMaterial::is_equivalent_to()).

The return value is the number of materials removed.

This flavor of collapse_equivalent_materials() does not adjust any primitives in the egg hierarchy; instead, it fills up the 'removed' map with an entry for each removed material, mapping it back to the equivalent retained material. It's up to the user to then call replace_materials() with this map, if desired, to apply these changes to the egg hierarchy.

◆ createUniqueMaterial()

EggMaterial createUniqueMaterial ( const EggMaterial  copy,
int  eq 
)

◆ extractMaterials()

int extractMaterials ( EggGroupNode  node)

Walks the egg hierarchy beginning at the indicated node, and removes any EggMaterials encountered in the hierarchy, adding them to the collection.

Returns the number of EggMaterials encountered.

◆ findMref()

EggMaterial findMref ( str  mref_name)

Returns the material with the indicated MRef name, or NULL if no material matches.

◆ findUsedMaterials()

int findUsedMaterials ( EggNode  node)

Walks the egg hierarchy beginning at the indicated node, looking for materials that are referenced by primitives but are not already members of the collection, adding them to the collection.

If this is called following extract_materials(), it can be used to pick up any additional material references that appeared in the egg hierarchy (but whose EggMaterial node was not actually part of the hierarchy).

If this is called in lieu of extract_materials(), it will fill up the collection with all of the referenced materials (and only the referenced materials), without destructively removing the EggMaterials from the hierarchy.

This also has the side effect of incrementing the internal usage count for a material in the collection each time a material reference is encountered. This side effect is taken advantage of by remove_unused_materials().

◆ operator=()

EggMaterialCollection operator= ( const EggMaterialCollection  copy)

◆ removeMaterial()

bool removeMaterial ( EggMaterial  material)

Explicitly removes a material from the collection.

Returns true if the material was removed, false if it wasn't there or if there was some error.

◆ removeUnusedMaterials()

removeUnusedMaterials ( EggNode  node)

Removes any materials from the collection that aren't referenced by any primitives in the indicated egg hierarchy.

This also, incidentally, adds materials to the collection that had been referenced by primitives but had not previously appeared in the collection.

◆ replaceMaterials()

static replaceMaterials ( EggGroupNode  node,
const EggMaterialCollection::MaterialReplacement  replace 
)
static

Walks the egg hierarchy, changing out any reference to a material appearing on the left side of the map with its corresponding material on the right side.

This is most often done following a call to collapse_equivalent_materials(). It does not directly affect the Collection.

◆ sortByMref()

sortByMref ( )

Sorts all the materials into alphabetical order by MRef name.

Subsequent operations using begin()/end() will traverse in this sorted order.

◆ uniquifyMrefs()

uniquifyMrefs ( )

Guarantees that each material in the collection has a unique MRef name.

This is essential before writing an egg file.