forked from AcademySoftwareFoundation/MaterialX
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathPyUnitConverter.cpp
More file actions
93 lines (82 loc) · 4.01 KB
/
PyUnitConverter.cpp
File metadata and controls
93 lines (82 loc) · 4.01 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
//
// TM & (c) 2019 Lucasfilm Entertainment Company Ltd. and Lucasfilm Ltd.
// All rights reserved. See LICENSE.txt for license.
//
#include <PyMaterialX/PyMaterialX.h>
#include <MaterialXCore/Unit.h>
namespace py = pybind11;
namespace mx = MaterialX;
class PyUnitConverter : public mx::UnitConverter
{
public:
float convert(float input, const std::string& inputUnit, const std::string& outputUnit) const override
{
PYBIND11_OVERLOAD_PURE(
float,
mx::UnitConverter,
convert,
input,
inputUnit,
outputUnit
);
}
mx::Vector2 convert(const mx::Vector2& input, const std::string& inputUnit, const std::string& outputUnit) const override
{
PYBIND11_OVERLOAD_PURE(
mx::Vector2,
mx::UnitConverter,
convert,
input,
inputUnit,
outputUnit
);
}
mx::Vector3 convert(const mx::Vector3& input, const std::string& inputUnit, const std::string& outputUnit) const override
{
PYBIND11_OVERLOAD_PURE(
mx::Vector3,
mx::UnitConverter,
convert,
input,
inputUnit,
outputUnit
);
}
mx::Vector4 convert(const mx::Vector4& input, const std::string& inputUnit, const std::string& outputUnit) const override
{
PYBIND11_OVERLOAD_PURE(
mx::Vector4,
mx::UnitConverter,
convert,
input,
inputUnit,
outputUnit
);
}
};
PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr<T>);
void bindPyUnitConverters(py::module& mod)
{
py::class_<mx::UnitConverter, PyUnitConverter, mx::UnitConverterPtr>(mod, "UnitConverter")
.def("convert", (float (mx::UnitConverter::*)(float, const std::string&, const std::string&)const) &mx::UnitConverter::convert)
.def("convert", (mx::Vector2 (mx::UnitConverter::*)(const mx::Vector2&, const std::string&, const std::string&)const) &mx::UnitConverter::convert)
.def("convert", (mx::Vector3 (mx::UnitConverter::*)(const mx::Vector3&, const std::string&, const std::string&)const) &mx::UnitConverter::convert)
.def("convert", (mx::Vector4 (mx::UnitConverter::*)(const mx::Vector4&, const std::string&, const std::string&)const) &mx::UnitConverter::convert)
.def("getUnitAsInteger", &mx::UnitConverter::getUnitAsInteger)
.def("getUnitFromInteger", &mx::UnitConverter::getUnitFromInteger);
py::class_<mx::LinearUnitConverter, mx::UnitConverter, mx::LinearUnitConverterPtr>(mod, "LinearUnitConverter")
.def_static("create", &mx::LinearUnitConverter::create)
.def("getUnitScale", &mx::LinearUnitConverter::getUnitScale)
.def("convert", (float (mx::LinearUnitConverter::*)(float, const std::string&, const std::string&)const) &mx::LinearUnitConverter::convert)
.def("convert", (mx::Vector2 (mx::LinearUnitConverter::*)(const mx::Vector2&, const std::string&, const std::string&)const) &mx::LinearUnitConverter::convert)
.def("convert", (mx::Vector3 (mx::LinearUnitConverter::*)(const mx::Vector3&, const std::string&, const std::string&)const) &mx::LinearUnitConverter::convert)
.def("convert", (mx::Vector4 (mx::LinearUnitConverter::*)(const mx::Vector4&, const std::string&, const std::string&)const) &mx::LinearUnitConverter::convert)
.def("getUnitAsInteger", &mx::LinearUnitConverter::getUnitAsInteger)
.def("getUnitFromInteger", &mx::LinearUnitConverter::getUnitFromInteger);
py::class_<mx::UnitConverterRegistry, mx::UnitConverterRegistryPtr>(mod, "UnitConverterRegistry")
.def_static("create", &mx::UnitConverterRegistry::create)
.def("addUnitConverter", &mx::UnitConverterRegistry::addUnitConverter)
.def("removeUnitConverter", &mx::UnitConverterRegistry::removeUnitConverter)
.def("getUnitConverter", &mx::UnitConverterRegistry::getUnitConverter)
.def("clearUnitConverters", &mx::UnitConverterRegistry::clearUnitConverters);
}