Panda3D
|
This is a collection of materials by MRef name. More...
#include "eggMaterialCollection.h"
Public Types | |
typedef iterator | const_iterator |
typedef OrderedMaterials::const_iterator | iterator |
typedef pmap< PT_EggMaterial, PT_EggMaterial > | MaterialReplacement |
typedef OrderedMaterials::size_type | size_type |
Public Member Functions | |
EggMaterialCollection (const EggMaterialCollection ©) | |
bool | add_material (EggMaterial *material) |
Explicitly adds a new material to the collection. | |
iterator | begin () const |
void | clear () |
Removes all materials from the collection. | |
int | collapse_equivalent_materials (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()). | |
int | collapse_equivalent_materials (int eq, 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()). | |
EggMaterial * | create_unique_material (const EggMaterial ©, int eq) |
Creates a new material if there is not already one equivalent (according to eq, see EggMaterial::is_equivalent_to()) to the indicated material, or returns the existing one if there is. | |
bool | empty () const |
iterator | end () const |
int | extract_materials (EggGroupNode *node) |
Walks the egg hierarchy beginning at the indicated node, and removes any EggMaterials encountered in the hierarchy, adding them to the collection. | |
EggMaterial * | find_mref (const std::string &mref_name) const |
Returns the material with the indicated MRef name, or NULL if no material matches. | |
int | find_used_materials (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. | |
EggGroupNode::iterator | insert_materials (EggGroupNode *node) |
Adds a series of EggMaterial nodes to the beginning of the indicated node to reflect each of the materials in the collection. | |
EggGroupNode::iterator | insert_materials (EggGroupNode *node, EggGroupNode::iterator position) |
Adds a series of EggMaterial nodes to the beginning of the indicated node to reflect each of the materials in the collection. | |
EggMaterialCollection & | operator= (const EggMaterialCollection ©) |
bool | remove_material (EggMaterial *material) |
Explicitly removes a material from the collection. | |
void | remove_unused_materials (EggNode *node) |
Removes any materials from the collection that aren't referenced by any primitives in the indicated egg hierarchy. | |
size_type | size () const |
void | sort_by_mref () |
Sorts all the materials into alphabetical order by MRef name. | |
void | uniquify_mrefs () |
Guarantees that each material in the collection has a unique MRef name. | |
Static Public Member Functions | |
static void | replace_materials (EggGroupNode *node, const 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. | |
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.
Definition at line 30 of file eggMaterialCollection.h.
typedef iterator EggMaterialCollection::const_iterator |
Definition at line 42 of file eggMaterialCollection.h.
typedef OrderedMaterials::const_iterator EggMaterialCollection::iterator |
Definition at line 41 of file eggMaterialCollection.h.
typedef pmap<PT_EggMaterial, PT_EggMaterial > EggMaterialCollection::MaterialReplacement |
Definition at line 45 of file eggMaterialCollection.h.
typedef OrderedMaterials::size_type EggMaterialCollection::size_type |
Definition at line 43 of file eggMaterialCollection.h.
EggMaterialCollection::EggMaterialCollection | ( | ) |
Definition at line 27 of file eggMaterialCollection.cxx.
EggMaterialCollection::EggMaterialCollection | ( | const EggMaterialCollection & | copy | ) |
Definition at line 34 of file eggMaterialCollection.cxx.
EggMaterialCollection::~EggMaterialCollection | ( | ) |
Definition at line 54 of file eggMaterialCollection.cxx.
bool EggMaterialCollection::add_material | ( | 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.
Definition at line 310 of file eggMaterialCollection.cxx.
Referenced by collapse_equivalent_materials(), and create_unique_material().
|
inline |
Definition at line 14 of file eggMaterialCollection.I.
void EggMaterialCollection::clear | ( | ) |
Removes all materials from the collection.
Definition at line 61 of file eggMaterialCollection.cxx.
Referenced by collapse_equivalent_materials(), and remove_unused_materials().
int EggMaterialCollection::collapse_equivalent_materials | ( | 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.
Definition at line 184 of file eggMaterialCollection.cxx.
References collapse_equivalent_materials(), and replace_materials().
Referenced by EggData::collapse_equivalent_materials(), and collapse_equivalent_materials().
int EggMaterialCollection::collapse_equivalent_materials | ( | 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.
Definition at line 208 of file eggMaterialCollection.cxx.
References add_material(), and clear().
EggMaterial * EggMaterialCollection::create_unique_material | ( | const EggMaterial & | copy, |
int | eq ) |
Creates a new material if there is not already one equivalent (according to eq, see EggMaterial::is_equivalent_to()) to the indicated material, or returns the existing one if there is.
Definition at line 363 of file eggMaterialCollection.cxx.
References add_material(), and EggMaterial::is_equivalent_to().
Referenced by XFileToEggConverter::create_unique_material().
|
inline |
Definition at line 26 of file eggMaterialCollection.I.
|
inline |
Definition at line 21 of file eggMaterialCollection.I.
int EggMaterialCollection::extract_materials | ( | 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.
Definition at line 72 of file eggMaterialCollection.cxx.
EggMaterial * EggMaterialCollection::find_mref | ( | const std::string & | mref_name | ) | const |
Returns the material with the indicated MRef name, or NULL if no material matches.
Definition at line 385 of file eggMaterialCollection.cxx.
int EggMaterialCollection::find_used_materials | ( | 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().
Definition at line 125 of file eggMaterialCollection.cxx.
References find_used_materials(), EggPrimitive::get_material, EggPrimitive::has_material, and TypedObject::is_of_type().
Referenced by EggData::collapse_equivalent_materials(), find_used_materials(), and remove_unused_materials().
EggGroupNode::iterator EggMaterialCollection::insert_materials | ( | EggGroupNode * | node | ) |
Adds a series of EggMaterial nodes to the beginning of the indicated node to reflect each of the materials in the collection.
Returns an iterator representing the first position after the newly inserted materials.
Definition at line 84 of file eggMaterialCollection.cxx.
References insert_materials().
Referenced by insert_materials().
EggGroupNode::iterator EggMaterialCollection::insert_materials | ( | EggGroupNode * | node, |
EggGroupNode::iterator | position ) |
Adds a series of EggMaterial nodes to the beginning of the indicated node to reflect each of the materials in the collection.
Returns an iterator representing the first position after the newly inserted materials.
Definition at line 94 of file eggMaterialCollection.cxx.
EggMaterialCollection & EggMaterialCollection::operator= | ( | const EggMaterialCollection & | copy | ) |
Definition at line 44 of file eggMaterialCollection.cxx.
bool EggMaterialCollection::remove_material | ( | 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.
Definition at line 334 of file eggMaterialCollection.cxx.
void EggMaterialCollection::remove_unused_materials | ( | 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.
Definition at line 166 of file eggMaterialCollection.cxx.
References clear(), and find_used_materials().
|
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.
Definition at line 250 of file eggMaterialCollection.cxx.
References EggPrimitive::get_material, EggPrimitive::has_material, TypedObject::is_of_type(), replace_materials(), and EggPrimitive::set_material.
Referenced by collapse_equivalent_materials(), and replace_materials().
|
inline |
Definition at line 31 of file eggMaterialCollection.I.
void EggMaterialCollection::sort_by_mref | ( | ) |
Sorts all the materials into alphabetical order by MRef name.
Subsequent operations using begin()/end() will traverse in this sorted order.
Definition at line 299 of file eggMaterialCollection.cxx.
void EggMaterialCollection::uniquify_mrefs | ( | ) |
Guarantees that each material in the collection has a unique MRef name.
This is essential before writing an egg file.
Definition at line 281 of file eggMaterialCollection.cxx.
References NameUniquifier::add_name().