Skip to content

Commit

Permalink
#5585: Stage transform types declared
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Apr 11, 2021
1 parent 75b3252 commit 0771c32
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 0 deletions.
5 changes: 5 additions & 0 deletions install/scripts/materialtest.py
Expand Up @@ -97,6 +97,11 @@
print('Stage colour expression RGBA: {0}'.format(stage.getColourExpressionString(dr.MaterialStage.ColourComponent.RGBA)))
print('Stage vertex colour mode: {0}'.format(stage.getVertexColourMode()))

for transform in stage.getTransformations():
print('Stage transform type: {0}'.format(transform.type))
print('Stage transform expression1: {0}'.format(transform.expression1))
print('Stage transform expression2: {0}'.format(transform.expression2))

newMaterial.swapStagePosition(diffuseStageIndex, bumpStageIndex)

print("The new material has been modified" if newMaterial.isModified() else "The new material is not modified?")
Expand Down
15 changes: 15 additions & 0 deletions plugins/script/interfaces/ShaderSystemInterface.cpp
Expand Up @@ -329,6 +329,20 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
.value("INVERSE_MULTIPLY", IShaderLayer::VERTEX_COLOUR_INVERSE_MULTIPLY)
.export_values();

py::enum_<IShaderLayer::TransformType>(stage, "TransformType")
.value("TRANSLATE", IShaderLayer::TransformType::Translate)
.value("SCALE", IShaderLayer::TransformType::Scale)
.value("ROTATE", IShaderLayer::TransformType::Rotate)
.value("CENTERSCALE", IShaderLayer::TransformType::CenterScale)
.value("SHEAR", IShaderLayer::TransformType::Shear)
.export_values();

py::class_<ScriptMaterialStage::Transformation> stageTransform(stage, "Transformation");

stageTransform.def_readwrite("type", &ScriptMaterialStage::Transformation::type);
stageTransform.def_readwrite("expression1", &ScriptMaterialStage::Transformation::expression1);
stageTransform.def_readwrite("expression2", &ScriptMaterialStage::Transformation::expression2);

// Shader Stage
stage.def(py::init<const IShaderLayer::Ptr&>());
stage.def("getType", &ScriptMaterialStage::getType);
Expand All @@ -340,6 +354,7 @@ void ShaderSystemInterface::registerInterface(py::module& scope, py::dict& globa
stage.def("getColourExpressionString", &ScriptMaterialStage::getColourExpressionString);
stage.def("getVertexColourMode", &ScriptMaterialStage::getVertexColourMode);
stage.def("getMapType", &ScriptMaterialStage::getMapType);
stage.def("getTransformations", &ScriptMaterialStage::getTransformations);

// Expose the MaterialVisitor interface

Expand Down
26 changes: 26 additions & 0 deletions plugins/script/interfaces/ShaderSystemInterface.h
Expand Up @@ -15,6 +15,13 @@ class ScriptMaterialStage
IShaderLayer::Ptr _layer;

public:
struct Transformation
{
IShaderLayer::TransformType type;
std::string expression1;
std::string expression2;
};

ScriptMaterialStage(const IShaderLayer::Ptr& layer) :
_layer(layer)
{}
Expand Down Expand Up @@ -65,6 +72,25 @@ class ScriptMaterialStage
{
return _layer ? _layer->getMapType() : IShaderLayer::MapType::Map;
}

std::vector<Transformation> getTransformations()
{
std::vector<Transformation> list;

if (!_layer) return list;

for (const auto& transform : _layer->getTransformations())
{
list.emplace_back(Transformation
{
transform.type,
transform.expression1 ? transform.expression1->getExpressionString() : "",
transform.expression2 ? transform.expression2->getExpressionString() : "",
});
}

return list;
}
};

/**
Expand Down

0 comments on commit 0771c32

Please sign in to comment.