From 8a380a0feef89370ec74c001104524b7a49cc316 Mon Sep 17 00:00:00 2001 From: parker Date: Thu, 24 Jul 2025 01:26:11 +0100 Subject: [PATCH] feat: context can red parameters --- src/Engine/Operator/Context.cpp | 12 ++++++++++++ src/Engine/Operator/Context.h | 1 + src/Engine/Operator/GeometryOpDef.h | 1 + src/Engine/Operator/GeometryOperator.cpp | 13 +++++++++++++ src/Engine/Operator/GeometryOperator.h | 1 + src/OpDefs/CMakeLists.txt | 1 + src/OpDefs/GopTransform.cpp | 4 +++- 7 files changed, 32 insertions(+), 1 deletion(-) diff --git a/src/Engine/Operator/Context.cpp b/src/Engine/Operator/Context.cpp index 34eecaa..27d47bd 100644 --- a/src/Engine/Operator/Context.cpp +++ b/src/Engine/Operator/Context.cpp @@ -1,6 +1,8 @@ #include "Engine/Operator/Context.h" #include "Engine/Network/NetworkManager.h" +#include "Engine/Parameter/Parameter.h" #include +#include enzo::op::Context::Context(enzo::nt::OpId opId, enzo::nt::NetworkManager& networkManager) @@ -23,3 +25,13 @@ enzo::geo::Geometry enzo::op::Context::cloneInputGeo(unsigned int inputIndex) return networkManager_.getGeoOperator(inputConnection->getInputOpId()).getOutputGeo(inputConnection->getInputIndex()); } +enzo::bt::floatT enzo::op::Context::evalFloatParm(const char* parmName) const +{ + enzo::nt::GeometryOperator& selfOp = networkManager_.getGeoOperator(opId_); + std::weak_ptr parameter = selfOp.getParameter(parmName); + + if(auto sharedParm = parameter.lock()) + { + return sharedParm->evalFloat(); + } +} diff --git a/src/Engine/Operator/Context.h b/src/Engine/Operator/Context.h index c89c37f..96dd46c 100644 --- a/src/Engine/Operator/Context.h +++ b/src/Engine/Operator/Context.h @@ -15,6 +15,7 @@ class Context public: Context(enzo::nt::OpId opId, enzo::nt::NetworkManager& networkManager); enzo::geo::Geometry cloneInputGeo(unsigned int inputIndex); + bt::floatT evalFloatParm(const char* parmName) const; private: enzo::nt::OpId opId_; enzo::nt::NetworkManager& networkManager_; diff --git a/src/Engine/Operator/GeometryOpDef.h b/src/Engine/Operator/GeometryOpDef.h index 2a671df..9ffaee9 100644 --- a/src/Engine/Operator/GeometryOpDef.h +++ b/src/Engine/Operator/GeometryOpDef.h @@ -20,6 +20,7 @@ private: unsigned int minInputs_; unsigned int maxInputs_; unsigned int maxOutputs_; + protected: enzo::nt::OpId opId_; const enzo::geo::Geometry& getInputGeoView(unsigned int inputIndex); diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index bbc6234..93c0189 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -74,6 +74,19 @@ void nt::GeometryOperator::addOutputConnection(std::shared_ptr nt::GeometryOperator::getParameter(std::string parameterName) +{ + for(auto parm : parameters_) + { + if(parm->getName()==parameterName) + { + return parm; + } + } + return std::weak_ptr(); + +} + std::vector> nt::GeometryOperator::getInputConnections() const { std::vector> inputConnections; diff --git a/src/Engine/Operator/GeometryOperator.h b/src/Engine/Operator/GeometryOperator.h index 43b4d83..e4a0513 100644 --- a/src/Engine/Operator/GeometryOperator.h +++ b/src/Engine/Operator/GeometryOperator.h @@ -27,6 +27,7 @@ public: std::vector> getInputConnections() const; std::vector> getOutputConnections() const; std::vector> getParameters(); + std::weak_ptr getParameter(std::string parameterName); unsigned int getMaxInputs() const; diff --git a/src/OpDefs/CMakeLists.txt b/src/OpDefs/CMakeLists.txt index f58e6db..0ed25a4 100644 --- a/src/OpDefs/CMakeLists.txt +++ b/src/OpDefs/CMakeLists.txt @@ -18,6 +18,7 @@ add_library(${libName} SHARED ../Engine/Operator/Attribute.cpp ../Engine/Network/NetworkManager.cpp ../Engine/Parameter/Template.cpp + ../Engine/Parameter/Parameter.cpp GopTransform.cpp GopHouse.cpp ) diff --git a/src/OpDefs/GopTransform.cpp b/src/OpDefs/GopTransform.cpp index c146855..c94994a 100644 --- a/src/OpDefs/GopTransform.cpp +++ b/src/OpDefs/GopTransform.cpp @@ -26,7 +26,9 @@ void GopTransform::cookOp(enzo::op::Context context) for(int i=0; i