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);
81 _vec(splitString(geom, GEOM_PATH_SEPARATOR)),
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);
533 void setIncludeCollections(
const vector<ConstCollectionPtr>& collections);
537 vector<CollectionPtr> getIncludeCollections()
const;
540 bool hasIncludeCycle()
const;
549 bool matchesGeomString(
const string& geom)
const;
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...
Definition: Geom.cpp:27
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:57
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
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
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
const string & getIncludeGeom() const
Return the include geometry string of this element.
Definition: Geom.h:461
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
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 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
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:837
The base class for elements that support typed values.
Definition: Element.h:901