MCPcopy Create free account
hub / github.com/AcademySoftwareFoundation/MaterialX / createNode

Method createNode

source/MaterialXGenShader/UnitSystem.cpp:172–202  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

170}
171
172ShaderNodePtr UnitSystem::createNode(ShaderGraph* parent, const UnitTransform& transform, const string& name,
173 GenContext& context) const
174{
175 NodeDefPtr nodeDef = getNodeDef(transform);
176 if (!nodeDef)
177 {
178 throw ExceptionShaderGenError("No nodedef found for transform: ('" + transform.sourceUnit + "', '" + transform.targetUnit + "').");
179 }
180
181 // Scalar unit conversion
182 UnitTypeDefPtr scalarTypeDef = _document->getUnitTypeDef(transform.unitType);
183 if (!_unitRegistry || !_unitRegistry->getUnitConverter(scalarTypeDef))
184 {
185 throw ExceptionTypeError("Unit registry unavailable or undefined unit converter for: " + transform.unitType);
186 }
187 LinearUnitConverterPtr scalarConverter = std::dynamic_pointer_cast<LinearUnitConverter>(_unitRegistry->getUnitConverter(scalarTypeDef));
188
189 // Create the node.
190 ShaderNodePtr shaderNode = ShaderNode::create(parent, name, *nodeDef, context);
191
192 // Set ports on the node.
193 ShaderInput* in2 = shaderNode->getInput("in2");
194 if (!in2)
195 {
196 throw ExceptionShaderGenError("Invalid node signature for unit transform: ('" + transform.sourceUnit + "', '" + transform.targetUnit + "').");
197 }
198 float conversionRatio = scalarConverter->conversionRatio(transform.sourceUnit, transform.targetUnit);
199 in2->setValue(Value::createValue(conversionRatio));
200
201 return shaderNode;
202}
203
204MATERIALX_NAMESPACE_END

Callers 2

foldWeightIntoBsdfFunction · 0.45
executeMethod · 0.45

Calls 7

getNodeDefFunction · 0.85
createValueFunction · 0.85
getUnitConverterMethod · 0.80
conversionRatioMethod · 0.80
createFunction · 0.70
getInputMethod · 0.45
setValueMethod · 0.45

Tested by

no test coverage detected