From 185d09b79a78a97f616cdeff1aadf49726e12bf9 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 12 Aug 2025 00:12:06 +0100 Subject: [PATCH] feat: add parameter name class --- CMakeLists.txt | 1 + src/Engine/Operator/Context.cpp | 1 + src/Engine/Operator/GeometryOperator.cpp | 4 +-- src/Engine/Operator/OperatorTable.cpp | 3 +- src/Engine/Parameter/Parameter.cpp | 5 +++ src/Engine/Parameter/Parameter.h | 1 + src/Engine/Parameter/PrmName.cpp | 23 ++++++++++++ src/Engine/Parameter/PrmName.h | 19 ++++++++++ src/Engine/Parameter/Template.cpp | 34 +++++++++++------- src/Engine/Parameter/Template.h | 19 +++++----- src/Engine/Parameter/Type.h | 23 ------------ src/Engine/Types.h | 1 + src/Gui/Parameters/FormParm.cpp | 3 +- src/Gui/Parameters/IntSliderParm.cpp | 6 ++-- src/OpDefs/CMakeLists.txt | 2 ++ src/OpDefs/GopGeometryImport.cpp | 4 +-- src/OpDefs/GopGrid.cpp | 8 ++--- src/OpDefs/GopHouse.cpp | 2 +- src/OpDefs/GopSineWave.cpp | 46 ++++++++++++++++++++++++ src/OpDefs/GopSineWave.h | 18 ++++++++++ src/OpDefs/GopTestCube.cpp | 2 +- src/OpDefs/GopTransform.cpp | 4 +-- src/OpDefs/RegisterPlugin.cpp | 12 +++++++ 23 files changed, 182 insertions(+), 59 deletions(-) create mode 100644 src/Engine/Parameter/PrmName.cpp create mode 100644 src/Engine/Parameter/PrmName.h delete mode 100644 src/Engine/Parameter/Type.h create mode 100644 src/OpDefs/GopSineWave.cpp create mode 100644 src/OpDefs/GopSineWave.h diff --git a/CMakeLists.txt b/CMakeLists.txt index bfe5a64..758295c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -24,6 +24,7 @@ set(ENGINE_SOURCES src/Engine/Parameter/Parameter.cpp src/Engine/Parameter/Default.cpp src/Engine/Parameter/Range.cpp + src/Engine/Parameter/PrmName.cpp src/Engine/Network/NetworkManager.cpp ) diff --git a/src/Engine/Operator/Context.cpp b/src/Engine/Operator/Context.cpp index e0da77a..9ce76b1 100644 --- a/src/Engine/Operator/Context.cpp +++ b/src/Engine/Operator/Context.cpp @@ -4,6 +4,7 @@ #include #include #include +#include enzo::op::Context::Context(enzo::nt::OpId opId, enzo::nt::NetworkManager& networkManager) diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index b2ad040..a8cf344 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -35,12 +35,12 @@ nt::GeometryOperator::GeometryOperator(enzo::nt::OpId opId, op::OpInfo opInfo) void nt::GeometryOperator::initParameters() { - for(const prm::Template* t = opInfo_.templates; t->isValid(); ++t) + for(const prm::Template* t = opInfo_.templates; t->getType()!=prm::Type::LIST_TERMINATOR; ++t) { - std::cout << "name: " << t->getName() << "\n"; // create parameter auto parameter = std::make_shared(*t); parameter->valueChanged.connect([this](){dirtyNode();}); + IC(parameter); parameters_.push_back(parameter); } diff --git a/src/Engine/Operator/OperatorTable.cpp b/src/Engine/Operator/OperatorTable.cpp index 4bc0d21..72a18eb 100644 --- a/src/Engine/Operator/OperatorTable.cpp +++ b/src/Engine/Operator/OperatorTable.cpp @@ -1,5 +1,6 @@ #include "Engine/Operator/OperatorTable.h" #include "Engine/Operator/OpInfo.h" +#include "Engine/Types.h" #include #include @@ -9,7 +10,7 @@ void enzo::op::OperatorTable::addOperator(enzo::op::OpInfo info) std::cout << "OPERATOR TABLE ADDED\n"; std::cout << "adding operator: " << info.displayName << "\n"; - for(const prm::Template* t = info.templates; t->isValid(); ++t) + for(const prm::Template* t = info.templates; t->getType()!=prm::Type::LIST_TERMINATOR; ++t) { std::cout << "name: " << t->getName() << "\n"; } diff --git a/src/Engine/Parameter/Parameter.cpp b/src/Engine/Parameter/Parameter.cpp index 7529e56..e117ef5 100644 --- a/src/Engine/Parameter/Parameter.cpp +++ b/src/Engine/Parameter/Parameter.cpp @@ -45,6 +45,11 @@ std::string enzo::prm::Parameter::getName() const return template_.getName(); } +std::string enzo::prm::Parameter::getLabel() const +{ + return template_.getLabel(); +} + enzo::bt::floatT enzo::prm::Parameter::evalFloat(unsigned int index) const { if(index >= floatValues_.size()) diff --git a/src/Engine/Parameter/Parameter.h b/src/Engine/Parameter/Parameter.h index fa94c5a..db921d9 100644 --- a/src/Engine/Parameter/Parameter.h +++ b/src/Engine/Parameter/Parameter.h @@ -10,6 +10,7 @@ class Parameter public: Parameter(Template prmTemplate); std::string getName() const; + std::string getLabel() const; enzo::prm::Type getType() const; unsigned int getVectorSize() const; diff --git a/src/Engine/Parameter/PrmName.cpp b/src/Engine/Parameter/PrmName.cpp new file mode 100644 index 0000000..278ae36 --- /dev/null +++ b/src/Engine/Parameter/PrmName.cpp @@ -0,0 +1,23 @@ +#include "Engine/Parameter/PrmName.h" + +enzo::prm::Name::Name(bt::String token, bt::String label) +: token_{token}, label_{label} +{ + +} + +enzo::prm::Name::Name() +: token_{""}, label_{""} +{ + +} + +enzo::bt::String enzo::prm::Name::getToken() const +{ + return token_; +} + +enzo::bt::String enzo::prm::Name::getLabel() const +{ + return label_; +} diff --git a/src/Engine/Parameter/PrmName.h b/src/Engine/Parameter/PrmName.h new file mode 100644 index 0000000..71d1630 --- /dev/null +++ b/src/Engine/Parameter/PrmName.h @@ -0,0 +1,19 @@ +#pragma once + +#include "Engine/Types.h" +namespace enzo::prm +{ +class Name +{ +public: + Name(bt::String token, bt::String label); + Name(); + + bt::String getToken() const; + bt::String getLabel() const; +private: + bt::String token_; + bt::String label_; +}; + +} diff --git a/src/Engine/Parameter/Template.cpp b/src/Engine/Parameter/Template.cpp index e6b443b..9597ed0 100644 --- a/src/Engine/Parameter/Template.cpp +++ b/src/Engine/Parameter/Template.cpp @@ -1,22 +1,22 @@ #include "Engine/Parameter/Template.h" #include "Engine/Parameter/Default.h" #include "Engine/Parameter/Range.h" -#include "Engine/Parameter/Type.h" +#include "Engine/Types.h" #include -enzo::prm::Template::Template(enzo::prm::Type type, const char* name) +enzo::prm::Template::Template(enzo::prm::Type type, prm::Name name) : Template(type, name, prm::Default()) { ranges_.resize(vectorSize_); } -enzo::prm::Template::Template(enzo::prm::Type type, const char* name, unsigned int vectorSize) +enzo::prm::Template::Template(enzo::prm::Type type, prm::Name name, unsigned int vectorSize) : Template(type, name, prm::Default(), vectorSize) { ranges_.resize(vectorSize_); } -enzo::prm::Template::Template(enzo::prm::Type type, const char* name, std::vector defaults, unsigned int vectorSize, std::vector ranges) +enzo::prm::Template::Template(enzo::prm::Type type, prm::Name name, std::vector defaults, unsigned int vectorSize, std::vector ranges) : type_{type}, name_{name}, defaults_{defaults}, vectorSize_(vectorSize) { if(ranges.size() defaults, unsigned int vectorSize = 1, std::vector ranges=std::vector() ); Template( enzo::prm::Type type, - const char* name, + prm::Name name, prm::Default theDefault, unsigned int vectorSize = 1, Range range=Range() ); Template(); - const char* getName() const; + // get name and get token are identical + enzo::bt::String getName() const; + enzo::bt::String getToken() const; + enzo::bt::String getLabel() const; const prm::Default getDefault(unsigned int index=0) const; const prm::Range& getRange(unsigned int index=0) const; const prm::Type getType() const; const unsigned int getSize() const; const unsigned int getNumDefaults() const; - bool isValid() const; + // bool isValid() const; private: enzo::prm::Type type_; std::vector defaults_; std::vector ranges_; // TODO: make a class that holds token and name - const char* name_; + prm::Name name_; unsigned int vectorSize_; }; diff --git a/src/Engine/Parameter/Type.h b/src/Engine/Parameter/Type.h deleted file mode 100644 index 332015f..0000000 --- a/src/Engine/Parameter/Type.h +++ /dev/null @@ -1,23 +0,0 @@ -#pragma once - -namespace enzo::prm - -{ - -// enum class Type -// { -// STRING, -// FLOAT, -// INT, -// }; - - -// class Type -// { - -// }; - -// const extern prm::Type FlOAT_TYPE; -// const extern prm::Type STRING_TYPE; - -} diff --git a/src/Engine/Types.h b/src/Engine/Types.h index 4ced7d5..0b2fcb6 100644 --- a/src/Engine/Types.h +++ b/src/Engine/Types.h @@ -39,6 +39,7 @@ namespace enzo { enum class Type { + LIST_TERMINATOR, STRING, XYZ, FLOAT, diff --git a/src/Gui/Parameters/FormParm.cpp b/src/Gui/Parameters/FormParm.cpp index 8e00a48..5378316 100644 --- a/src/Gui/Parameters/FormParm.cpp +++ b/src/Gui/Parameters/FormParm.cpp @@ -8,6 +8,7 @@ #include #include #include +#include enzo::ui::FormParm::FormParm(std::weak_ptr parameter) @@ -15,7 +16,7 @@ enzo::ui::FormParm::FormParm(std::weak_ptr parameter) { if(auto sharedParameter=parameter_.lock()) { - std::string name = sharedParameter->getName(); + std::string name = sharedParameter->getLabel(); label_ = new QLabel(QString::fromStdString(name+":")); label_->setStyleSheet("QLabel{background: none}"); label_->setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Preferred); diff --git a/src/Gui/Parameters/IntSliderParm.cpp b/src/Gui/Parameters/IntSliderParm.cpp index d3c2934..7471b9f 100644 --- a/src/Gui/Parameters/IntSliderParm.cpp +++ b/src/Gui/Parameters/IntSliderParm.cpp @@ -71,9 +71,11 @@ void enzo::ui::IntSliderParm::paintEvent(QPaintEvent *event) painter.setPen(notchPen_); QRectF markerLinesRect = rect(); markerLinesRect.adjust(margin, margin, -margin, -margin); - for(int i=minValue_+1;i(valueRange, 100); + for(int i=1;i(i)/columns*width-centerOffsetX; const bt::floatT z = static_cast(j)/rows*height-centerOffsetY; - geo.addPoint(bt::Vector3(x, sin(i+j)/10, z)); + geo.addPoint(bt::Vector3(x, 0, z)); } } @@ -74,17 +74,17 @@ void GopGrid::cookOp(enzo::op::Context context) enzo::prm::Template GopGrid::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::XYZ, "size", enzo::prm::Default(10), 2, enzo::prm::Range(0, enzo::prm::RangeFlag::UNLOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)), + enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("size", "Size"), enzo::prm::Default(10), 2, enzo::prm::Range(0, enzo::prm::RangeFlag::UNLOCKED, 100, enzo::prm::RangeFlag::UNLOCKED)), enzo::prm::Template( enzo::prm::Type::INT, - "rows", + enzo::prm::Name("rows", "Rows"), enzo::prm::Default(10), 1, enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED) ), enzo::prm::Template( enzo::prm::Type::INT, - "columns", + enzo::prm::Name("columns", "Columns"), enzo::prm::Default(10), 1, enzo::prm::Range(0, enzo::prm::RangeFlag::LOCKED, 100, enzo::prm::RangeFlag::UNLOCKED) diff --git a/src/OpDefs/GopHouse.cpp b/src/OpDefs/GopHouse.cpp index eba0baf..0405a77 100644 --- a/src/OpDefs/GopHouse.cpp +++ b/src/OpDefs/GopHouse.cpp @@ -76,6 +76,6 @@ void GOP_house::cookOp(enzo::op::Context context) enzo::prm::Template GOP_house::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1), + enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1), enzo::prm::Terminator }; diff --git a/src/OpDefs/GopSineWave.cpp b/src/OpDefs/GopSineWave.cpp new file mode 100644 index 0000000..60cdcc8 --- /dev/null +++ b/src/OpDefs/GopSineWave.cpp @@ -0,0 +1,46 @@ +#include "OpDefs/GopSineWave.h" +#include "Engine/Parameter/Range.h" +#include "Engine/Types.h" +#include +#include +#include +#include +#include +#include +#include + +GopSineWave::GopSineWave(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo) +: GeometryOpDef(network, opInfo) +{ + +} + +void GopSineWave::cookOp(enzo::op::Context context) +{ + using namespace enzo; + + if(outputRequested(0)) + { + geo::Geometry geo = context.cloneInputGeo(0); + + const ga::Offset pointCount = geo.getNumPoints(); + const bt::floatT frequency = context.evalFloatParm("frequency"); + tbb::parallel_for(tbb::blocked_range(0, pointCount), [&geo, frequency](tbb::blocked_range range){ + for(ga::Offset i=range.begin(); i!=range.end(); ++i) + { + bt::Vector3 pos = geo.getPointPos(i); + pos += bt::Vector3(0, sin(pos.x()*frequency), 0); + geo.setPointPos(i, pos); + } + }); + + setOutputGeometry(0, geo); + } + +} + +enzo::prm::Template GopSineWave::parameterList[] = +{ + enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("frequency", "Frequency"), enzo::prm::Default(1), 1), + enzo::prm::Terminator +}; diff --git a/src/OpDefs/GopSineWave.h b/src/OpDefs/GopSineWave.h new file mode 100644 index 0000000..f9d98a0 --- /dev/null +++ b/src/OpDefs/GopSineWave.h @@ -0,0 +1,18 @@ +#pragma once +#include "Engine/Operator/GeometryOpDef.h" +#include "Engine/Parameter/Template.h" + +class GopSineWave +: public enzo::nt::GeometryOpDef +{ +public: + GopSineWave(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo); + virtual void cookOp(enzo::op::Context context); + static enzo::nt::GeometryOpDef* ctor(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo) + { + return new GopSineWave(network, opInfo); + } + + static BOOST_SYMBOL_EXPORT enzo::prm::Template parameterList[]; + +}; diff --git a/src/OpDefs/GopTestCube.cpp b/src/OpDefs/GopTestCube.cpp index 168b3b0..0a2e374 100644 --- a/src/OpDefs/GopTestCube.cpp +++ b/src/OpDefs/GopTestCube.cpp @@ -67,6 +67,6 @@ void GopTestGeoCube::cookOp(enzo::op::Context context) enzo::prm::Template GopTestGeoCube::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::FLOAT, "size", 1), + enzo::prm::Template(enzo::prm::Type::FLOAT, enzo::prm::Name("size", "Size"), 1), enzo::prm::Terminator }; diff --git a/src/OpDefs/GopTransform.cpp b/src/OpDefs/GopTransform.cpp index bdf75ec..25a6702 100644 --- a/src/OpDefs/GopTransform.cpp +++ b/src/OpDefs/GopTransform.cpp @@ -62,8 +62,8 @@ void GopTransform::cookOp(enzo::op::Context context) enzo::prm::Template GopTransform::parameterList[] = { - enzo::prm::Template(enzo::prm::Type::XYZ, "translate", 3), - enzo::prm::Template(enzo::prm::Type::XYZ, "rotate", 3), + enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("translate", "Translate"), 3), + enzo::prm::Template(enzo::prm::Type::XYZ, enzo::prm::Name("rotate", "Rotate"), 3), enzo::prm::Terminator }; diff --git a/src/OpDefs/RegisterPlugin.cpp b/src/OpDefs/RegisterPlugin.cpp index a4fe824..2d84435 100644 --- a/src/OpDefs/RegisterPlugin.cpp +++ b/src/OpDefs/RegisterPlugin.cpp @@ -5,6 +5,7 @@ #include "GopTestCube.h" #include "OpDefs/GopTransform.hpp" #include "OpDefs/GopGrid.h" +#include "OpDefs/GopSineWave.h" #include #include @@ -67,6 +68,17 @@ extern "C" 1, } ); + addOperator( + enzo::op::OpInfo { + "sineWave", + "Sine Wave", + &GopSineWave::ctor, + GopSineWave::parameterList, + 1, + 1, + 1, + } + ); } }