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

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

#include <materialx_serializer.h>

Public Member Functions

MaterialXDocument convert (mx::DocumentPtr doc)
 Convert a MaterialX document object to a Protobuf MaterialXDocument message.
 

Private Member Functions

MaterialXElement convertElement (mx::ElementPtr 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: MaterialXToProtobuf converter; MaterialXDocument pb_doc = converter.convert(mx_doc);
  • Where mx_doc is a MaterialX document pointer.

Member Function Documentation

◆ convert()

MaterialXDocument MaterialXToProtobuf::convert ( mx::DocumentPtr doc)

Convert a MaterialX document object to a Protobuf MaterialXDocument message.

Parameters
docThe MaterialX document pointer to convert.
Returns
The resulting Protobuf MaterialXDocument message.
16 {
17 MaterialXDocument pb_doc;
18
19 // Set schema version
20 Version* version = pb_doc.mutable_schema_version();
21 version->set_major(SCHEMA_VERSION_MAJOR);
22 version->set_minor(SCHEMA_VERSION_MINOR);
23 version->set_patch(SCHEMA_VERSION_PATCH);
24
25 // Convert document attributes
26 for (const std::string& name : doc->getAttributeNames()) {
27 Attribute* attr = pb_doc.add_attributes();
28 attr->set_key(name);
29 attr->set_value(doc->getAttribute(name));
30 }
31
32 // Convert all root-level elements
33 for (mx::ElementPtr child : doc->getChildren()) {
34 MaterialXElement* pb_element = pb_doc.add_elements();
35 *pb_element = convertElement(child);
36 }
37
38 return pb_doc;
39}
MaterialXElement convertElement(mx::ElementPtr mx_elem)
Recursively convert a MaterialX element to a Protobuf MaterialXElement.
Definition materialx_serializer.cpp:41
constexpr uint32_t SCHEMA_VERSION_MAJOR
Definition materialx_serializer.h:24
constexpr uint32_t SCHEMA_VERSION_PATCH
Definition materialx_serializer.h:26
constexpr uint32_t SCHEMA_VERSION_MINOR
Definition materialx_serializer.h:25

◆ convertElement()

MaterialXElement MaterialXToProtobuf::convertElement ( mx::ElementPtr mx_elem)
private

Recursively convert a MaterialX element to a Protobuf MaterialXElement.

Parameters
mx_elemThe MaterialX element to convert.
Returns
The resulting Protobuf MaterialXElement message.
41 {
42 MaterialXElement pb_elem;
43
44 pb_elem.set_name(mx_elem->getName());
45 pb_elem.set_type(mx_elem->getCategory());
46
47 // Copy all attributes preserving order
48 for (const std::string& name : mx_elem->getAttributeNames()) {
49 Attribute* attr = pb_elem.add_attributes();
50 attr->set_key(name);
51 attr->set_value(mx_elem->getAttribute(name));
52 }
53
54 // Recursively convert children
55 for (mx::ElementPtr child : mx_elem->getChildren()) {
56 MaterialXElement* pb_child = pb_elem.add_children();
57 *pb_child = convertElement(child);
58 }
59
60 return pb_elem;
61}

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