Materialx Protobuf API 1.39.4
Serialization API to convert between MaterialX and Google Protobuf formats.
Loading...
Searching...
No Matches
materialx_serializer.MaterialXToProtobuf Class Reference

Converter class to transform MaterialX document objects into Protobuf MaterialXDocument messages. More...

Public Member Functions

 convert (self, doc)
 Convert a MaterialX document object to a Protobuf MaterialXDocument message.

Protected Member Functions

 _convert_element (self, mx_elem)
 Recursively convert a MaterialX element to a Protobuf MaterialXElement.

Detailed Description

Converter class to transform MaterialX document objects into Protobuf MaterialXDocument messages.

  • Traverses the MaterialX document structure and constructs the corresponding Protobuf message hierarchy.
  • Handles attributes and child elements recursively.
  • Usage: converter = MaterialXToProtobuf() pb_doc = converter.convert(mx_doc)
  • Where mx_doc is a MaterialX document object.

Member Function Documentation

◆ _convert_element()

materialx_serializer.MaterialXToProtobuf._convert_element ( self,
mx_elem )
protected

Recursively convert a MaterialX element to a Protobuf MaterialXElement.

Parameters
mx_elemThe MaterialX element to convert.
Returns
The resulting Protobuf MaterialXElement message.
60 def _convert_element(self, mx_elem):
61 """
62 @brief Recursively convert a MaterialX element to a Protobuf MaterialXElement.
63 @param mx_elem The MaterialX element to convert.
64 @return The resulting Protobuf MaterialXElement message.
65 """
66 pb_elem = pb.MaterialXElement()
67 pb_elem.name = mx_elem.getName()
68 pb_elem.type = mx_elem.getCategory()
69
70 # Copy all attributes preserving order
71 for name in mx_elem.getAttributeNames():
72 attr = pb_elem.attributes.add()
73 attr.key = name
74 attr.value = mx_elem.getAttribute(name)
75
76 # Recursively convert children
77 for child in mx_elem.getChildren():
78 pb_child = self._convert_element(child)
79 pb_elem.children.append(pb_child)
80
81 return pb_elem
82

◆ convert()

materialx_serializer.MaterialXToProtobuf.convert ( self,
doc )

Convert a MaterialX document object to a Protobuf MaterialXDocument message.

Parameters
docThe MaterialX document object to convert.
Returns
The resulting Protobuf MaterialXDocument message.
29 def convert(self, doc):
30 """
31 @brief Convert a MaterialX document object to a Protobuf MaterialXDocument message.
32 @param doc The MaterialX document object to convert.
33 @return The resulting Protobuf MaterialXDocument message.
34 """
35 pb_doc = pb.MaterialXDocument()
36
37 # Set schema version
38 pb_doc.schema_version.major = SCHEMA_VERSION_MAJOR
39 pb_doc.schema_version.minor = SCHEMA_VERSION_MINOR
40 pb_doc.schema_version.patch = SCHEMA_VERSION_PATCH
41
42 # Store MaterialX version if available
43 try:
44 import MaterialX as mx
45 except:
46 pass
47
48 for name in doc.getAttributeNames():
49 attr = pb_doc.attributes.add()
50 attr.key = name
51 attr.value = doc.getAttribute(name)
52
53 # Convert all root-level elements
54 for child in doc.getChildren():
55 pb_element = self._convert_element(child)
56 pb_doc.elements.append(pb_element)
57
58 return pb_doc
59

The documentation for this class was generated from the following file: