6#ifndef MATERIALX_GEOM_H
7#define MATERIALX_GEOM_H
16MATERIALX_NAMESPACE_BEGIN
18extern MX_CORE_API
const string GEOM_PATH_SEPARATOR;
19extern MX_CORE_API
const string UNIVERSAL_GEOM_NAME;
20extern MX_CORE_API
const string UDIM_TOKEN;
21extern MX_CORE_API
const string UV_TILE_TOKEN;
22extern MX_CORE_API
const string UDIM_SET_PROPERTY;
30class CollectionRemove;
60class MX_CORE_API GeomPath
69 bool operator==(
const GeomPath& rhs)
const
71 return _vec == rhs._vec &&
74 bool operator!=(
const GeomPath& rhs)
const
76 return !(*
this == rhs);
87 operator string()
const
91 return _empty ? EMPTY_STRING : UNIVERSAL_GEOM_NAME;
93 return GEOM_PATH_SEPARATOR +
joinStrings(_vec, GEOM_PATH_SEPARATOR);
100 bool isMatching(
const GeomPath& rhs,
bool contains =
false)
const
102 if (_empty || rhs._empty)
106 if (contains && _vec.size() > rhs._vec.size())
110 size_t minSize = std::min(_vec.size(), rhs._vec.size());
111 for (
size_t i = 0; i < minSize; i++)
113 if (_vec[i] != rhs._vec[i])
132 return _vec.empty() && !_empty;
143class MX_CORE_API GeomElement :
public Element
146 GeomElement(
ElementPtr parent,
const string& category,
const string& name) :
147 Element(parent, category, name)
152 virtual ~GeomElement() { }
218 bool validate(
string* message =
nullptr)
const override;
223 static const string GEOM_ATTRIBUTE;
224 static const string COLLECTION_ATTRIBUTE;
229class MX_CORE_API GeomInfo :
public GeomElement
232 GeomInfo(
ElementPtr parent,
const string& name) :
233 GeomElement(parent, CATEGORY, name)
236 virtual ~GeomInfo() { }
307 template <
class T>
GeomPropPtr setGeomPropValue(
const string& name,
309 const string& type = EMPTY_STRING);
318 token->setValue<
string>(value);
325 static const string CATEGORY;
330class MX_CORE_API GeomProp :
public ValueElement
333 GeomProp(
ElementPtr parent,
const string& name) :
334 ValueElement(parent, CATEGORY, name)
337 virtual ~GeomProp() { }
340 static const string CATEGORY;
351class MX_CORE_API GeomPropDef :
public TypedElement
354 GeomPropDef(
ElementPtr parent,
const string& name) :
355 TypedElement(parent, CATEGORY, name)
358 virtual ~GeomPropDef() { }
428 static const string CATEGORY;
429 static const string GEOM_PROP_ATTRIBUTE;
430 static const string SPACE_ATTRIBUTE;
431 static const string INDEX_ATTRIBUTE;
436class MX_CORE_API Collection :
public Element
439 Collection(
ElementPtr parent,
const string& name) :
440 Element(parent, CATEGORY, name)
443 virtual ~Collection() { }
557 bool validate(
string* message =
nullptr)
const override;
562 static const string CATEGORY;
563 static const string INCLUDE_GEOM_ATTRIBUTE;
564 static const string EXCLUDE_GEOM_ATTRIBUTE;
565 static const string INCLUDE_COLLECTION_ATTRIBUTE;
575 geomProp->setValue(value, type);
589MX_CORE_API
bool geomStringsMatch(
const string& geom1,
const string& geom2,
bool contains =
false);
591MATERIALX_NAMESPACE_END
Base and generic element classes.
shared_ptr< Token > TokenPtr
A shared pointer to a Token.
Definition Element.h:46
shared_ptr< Element > ElementPtr
A shared pointer to an Element.
Definition Element.h:31
shared_ptr< GeomInfo > GeomInfoPtr
A shared pointer to a GeomInfo.
Definition Geom.h:38
shared_ptr< GeomElement > GeomElementPtr
A shared pointer to a GeomElement.
Definition Geom.h:33
shared_ptr< GeomProp > GeomPropPtr
A shared pointer to a GeomProp.
Definition Geom.h:43
shared_ptr< const GeomProp > ConstGeomPropPtr
A shared pointer to a const GeomProp.
Definition Geom.h:45
shared_ptr< const GeomElement > ConstGeomElementPtr
A shared pointer to a const GeomElement.
Definition Geom.h:35
shared_ptr< const Collection > ConstCollectionPtr
A shared pointer to a const Collection.
Definition Geom.h:55
MX_CORE_API bool geomStringsMatch(const string &geom1, const string &geom2, bool contains=false)
Given two geometry strings, each containing an array of geom names, return true if they have any geom...
shared_ptr< Collection > CollectionPtr
A shared pointer to a Collection.
Definition Geom.h:53
shared_ptr< const GeomPropDef > ConstGeomPropDefPtr
A shared pointer to a const GeomPropDef.
Definition Geom.h:50
shared_ptr< const GeomInfo > ConstGeomInfoPtr
A shared pointer to a const GeomInfo.
Definition Geom.h:40
shared_ptr< GeomPropDef > GeomPropDefPtr
A shared pointer to a GeomPropDef.
Definition Geom.h:48
Import and export declarations for the Core library.
vector< string > StringVec
A vector of strings.
Definition Library.h:60
MX_CORE_API string joinStrings(const StringVec &strVec, const string &sep)
Join a vector of substrings into a single string, placing the given separator between each substring.
MX_CORE_API StringVec splitString(const string &str, const string &sep)
Split a string into a vector of substrings using the given set of separator characters.
A collection element within a Document.
Definition Geom.h:437
bool hasIncludeCollectionString() const
Return true if this element has an include collection string.
Definition Geom.h:517
void setExcludeGeom(const string &geom)
Set the exclude geometry string of this element.
Definition Geom.h:480
string getActiveExcludeGeom() const
Return the active exclude geometry string of this element, taking all geometry string substitutions a...
Definition Geom.h:499
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
bool hasIncludeCycle() const
Return true if the include chain for this element contains a cycle.
void setIncludeCollection(ConstCollectionPtr collection)
Set the collection that is directly included by this element.
const string & getExcludeGeom() const
Return the exclude geometry string of this element.
Definition Geom.h:492
void setIncludeCollectionString(const string &collection)
Set the include collection string of this element.
Definition Geom.h:511
const string & getIncludeCollectionString() const
Return the include collection string of this element.
Definition Geom.h:523
vector< CollectionPtr > getIncludeCollections() const
Return the vector of collections that are directly included by this element.
string getActiveIncludeGeom() const
Return the active include geometry string of this element, taking all geometry string substitutions a...
Definition Geom.h:468
bool hasIncludeGeom() const
Return true if this element has an include geometry string.
Definition Geom.h:455
void setIncludeGeom(const string &geom)
Set the include geometry string of this element.
Definition Geom.h:449
void setIncludeCollections(const vector< ConstCollectionPtr > &collections)
Set the vector of collections that are directly included by this element.
const string & getIncludeGeom() const
Return the include geometry string of this element.
Definition Geom.h:461
bool matchesGeomString(const string &geom) const
Return true if this collection and the given geometry string have any geometries in common.
bool hasExcludeGeom() const
Return true if this element has an exclude geometry string.
Definition Geom.h:486
const string & getAttribute(const string &attrib) const
Return the value string of the given attribute.
Definition Element.h:489
shared_ptr< T > addChild(const string &name=EMPTY_STRING)
Add a child element of the given subclass and name.
Definition Element.h:1399
void setAttribute(const string &attrib, const string &value)
Set the value string of the given attribute.
StringResolverPtr createStringResolver(const string &geom=EMPTY_STRING) const
Construct a StringResolver at the scope of this element.
shared_ptr< T > getChildOfType(const string &name) const
Return the child element, if any, with the given name and subclass.
bool hasAttribute(const string &attrib) const
Return true if the given attribute is present.
Definition Element.h:482
void removeChildOfType(const string &name)
Remove the child element, if any, with the given name and subclass.
Definition Element.h:468
vector< shared_ptr< T > > getChildrenOfType(const string &category=EMPTY_STRING) const
Return a vector of all child elements that are instances of the given subclass, optionally filtered b...
The base class for geometric elements, which support bindings to geometries and geometric collections...
Definition Geom.h:144
const string & getGeom() const
Return the geometry string of this element.
Definition Geom.h:170
CollectionPtr getCollection() const
Return the Collection that is assigned to this element.
const string & getCollectionString() const
Return the collection string of this element.
Definition Geom.h:201
void setGeom(const string &geom)
Set the geometry string of this element.
Definition Geom.h:158
bool validate(string *message=nullptr) const override
Validate that the given element tree, including all descendants, is consistent with the MaterialX spe...
bool hasCollectionString() const
Return true if this element has a collection string.
Definition Geom.h:195
bool hasGeom() const
Return true if this element has a geometry string.
Definition Geom.h:164
void setCollection(ConstCollectionPtr collection)
Assign a Collection to this element.
string getActiveGeom() const
Return the active geometry string of this element, taking all geometry string substitutions at this s...
Definition Geom.h:177
void setCollectionString(const string &collection)
Set the collection string of this element.
Definition Geom.h:189
A geometry info element within a Document.
Definition Geom.h:230
vector< GeomPropPtr > getGeomProps() const
Return a vector of all GeomProp elements.
Definition Geom.h:258
TokenPtr getToken(const string &name) const
Return the Token, if any, with the given name.
Definition Geom.h:284
GeomPropPtr getGeomProp(const string &name) const
Return the GeomProp, if any, with the given name.
Definition Geom.h:252
vector< TokenPtr > getTokens() const
Return a vector of all Token elements.
Definition Geom.h:290
GeomPropPtr addGeomProp(const string &name=EMPTY_STRING)
Add a GeomProp to this element.
Definition Geom.h:246
TokenPtr setTokenValue(const string &name, const string &value)
Set the string value of a Token by its name, creating a child element to hold the Token if needed.
Definition Geom.h:313
TokenPtr addToken(const string &name=EMPTY_STRING)
Add a Token to this element.
Definition Geom.h:278
void removeGeomProp(const string &name)
Remove the GeomProp, if any, with the given name.
Definition Geom.h:264
void removeToken(const string &name)
Remove the Token, if any, with the given name.
Definition Geom.h:296
GeomPropPtr setGeomPropValue(const string &name, const T &value, const string &type=EMPTY_STRING)
Set the value of a GeomProp by its name, creating a child element to hold the GeomProp if needed.
Definition Geom.h:568
bool isUniversal() const
Return true if this geometry path is universal.
Definition Geom.h:130
GeomPath(const string &geom)
Construct a path from a geometry name string.
Definition Geom.h:80
bool isEmpty() const
Return true if this geometry path is empty.
Definition Geom.h:123
bool isMatching(const GeomPath &rhs, bool contains=false) const
Return true if there is any geometry in common between the two paths.
Definition Geom.h:100
An element representing a declaration of geometric property data.
Definition Geom.h:352
bool hasIndex() const
Return true if this element has an index string.
Definition Geom.h:414
bool hasSpace() const
Return true if this element has a geometric space string.
Definition Geom.h:392
void setGeomProp(const string &node)
Set the geometric property string of this element.
Definition Geom.h:364
const string & getSpace() const
Return the geometric space string of this element.
Definition Geom.h:398
void setIndex(const string &space)
Set the index string of this element.
Definition Geom.h:408
const string & getGeomProp() const
Return the geometric property string of this element.
Definition Geom.h:376
const string & getIndex() const
Return the index string of this element.
Definition Geom.h:420
void setSpace(const string &space)
Set the geometric space string of this element.
Definition Geom.h:386
bool hasGeomProp() const
Return true if this element has a geometric property string.
Definition Geom.h:370
A geometric property element within a GeomInfo.
Definition Geom.h:331