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;
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);
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;
147 Element(parent, category, name)
160 setAttribute(GEOM_ATTRIBUTE, geom);
166 return hasAttribute(GEOM_ATTRIBUTE);
172 return getAttribute(GEOM_ATTRIBUTE);
180 createStringResolver()->resolve(getGeom(), GEOMNAME_TYPE_STRING) :
191 setAttribute(COLLECTION_ATTRIBUTE, collection);
197 return hasAttribute(COLLECTION_ATTRIBUTE);
203 return getAttribute(COLLECTION_ATTRIBUTE);
218 bool validate(
string* message =
nullptr)
const override;
223 static const string GEOM_ATTRIBUTE;
224 static const string COLLECTION_ATTRIBUTE;
248 return addChild<GeomProp>(name);
254 return getChildOfType<GeomProp>(name);
260 return getChildrenOfType<GeomProp>();
266 removeChildOfType<GeomProp>(name);
280 return addChild<Token>(name);
286 return getChildOfType<Token>(name);
292 return getChildrenOfType<Token>();
298 removeChildOfType<Token>(name);
307 template <
class T>
GeomPropPtr setGeomPropValue(
const string& name,
309 const string& type = EMPTY_STRING);
317 token = addToken(name);
318 token->setValue<
string>(value);
325 static const string CATEGORY;
340 static const string CATEGORY;
366 setAttribute(GEOM_PROP_ATTRIBUTE, node);
372 return hasAttribute(GEOM_PROP_ATTRIBUTE);
378 return getAttribute(GEOM_PROP_ATTRIBUTE);
388 setAttribute(SPACE_ATTRIBUTE, space);
394 return hasAttribute(SPACE_ATTRIBUTE);
400 return getAttribute(SPACE_ATTRIBUTE);
410 setAttribute(INDEX_ATTRIBUTE, space);
416 return hasAttribute(INDEX_ATTRIBUTE);
422 return getAttribute(INDEX_ATTRIBUTE);
428 static const string CATEGORY;
429 static const string GEOM_PROP_ATTRIBUTE;
430 static const string SPACE_ATTRIBUTE;
431 static const string INDEX_ATTRIBUTE;
440 Element(parent, CATEGORY, name)
451 setAttribute(INCLUDE_GEOM_ATTRIBUTE, geom);
457 return hasAttribute(INCLUDE_GEOM_ATTRIBUTE);
463 return getAttribute(INCLUDE_GEOM_ATTRIBUTE);
470 return hasIncludeGeom() ?
471 createStringResolver()->resolve(getIncludeGeom(), GEOMNAME_TYPE_STRING) :
482 setAttribute(EXCLUDE_GEOM_ATTRIBUTE, geom);
488 return hasAttribute(EXCLUDE_GEOM_ATTRIBUTE);
494 return getAttribute(EXCLUDE_GEOM_ATTRIBUTE);
501 return hasExcludeGeom() ?
502 createStringResolver()->resolve(getExcludeGeom(), GEOMNAME_TYPE_STRING) :
513 setAttribute(INCLUDE_COLLECTION_ATTRIBUTE, collection);
519 return hasAttribute(INCLUDE_COLLECTION_ATTRIBUTE);
525 return getAttribute(INCLUDE_COLLECTION_ATTRIBUTE);
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;
572 GeomPropPtr geomProp = getChildOfType<GeomProp>(name);
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:55
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
The base class for MaterialX elements.
Definition: Element.h:80
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
A MaterialX geometry path, representing the hierarchical location expressed by a geometry name.
Definition: Geom.h:61
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
The base class for typed elements.
Definition: Element.h:854
The base class for elements that support typed values.
Definition: Element.h:918