From 5ac023e6371175c36b161a595d4c9c77cafb4231 Mon Sep 17 00:00:00 2001 From: parker Date: Mon, 11 Aug 2025 13:19:53 +0100 Subject: [PATCH] feat: add grid operator --- src/Engine/Operator/Geometry.cpp | 2 +- src/Engine/Operator/Geometry.h | 11 +++++- src/OpDefs/CMakeLists.txt | 1 + src/OpDefs/GopGrid.cpp | 65 ++++++++++++++++++++++++++++++++ src/OpDefs/GopGrid.h | 18 +++++++++ src/OpDefs/RegisterPlugin.cpp | 12 ++++++ 6 files changed, 107 insertions(+), 2 deletions(-) create mode 100644 src/OpDefs/GopGrid.cpp create mode 100644 src/OpDefs/GopGrid.h diff --git a/src/Engine/Operator/Geometry.cpp b/src/Engine/Operator/Geometry.cpp index a75b0cf..b9dedf1 100644 --- a/src/Engine/Operator/Geometry.cpp +++ b/src/Engine/Operator/Geometry.cpp @@ -66,7 +66,7 @@ enzo::geo::Geometry& enzo::geo::Geometry::operator=(const enzo::geo::Geometry& r return *this; } -void geo::Geometry::addFace(std::vector pointOffsets, bool closed) +void geo::Geometry::addFace(const std::vector& pointOffsets, bool closed) { const ga::Offset primNum = vertexCountHandlePrim_.getSize(); for(ga::Offset pointOffset : pointOffsets) diff --git a/src/Engine/Operator/Geometry.h b/src/Engine/Operator/Geometry.h index 1f8f649..961c381 100644 --- a/src/Engine/Operator/Geometry.h +++ b/src/Engine/Operator/Geometry.h @@ -43,7 +43,16 @@ public: std::vector derivePointNormals(); HeMesh computeHalfEdgeMesh(); - void addFace(std::vector pointOffsets, bool closed=true); + + // build geometry + void addFace(const std::vector& pointOffsets, bool closed=true); + template + void addFace(Args... args) + { + std::vector pointOffsets = { static_cast(args)... }; + addFace(pointOffsets); + + } void addPoint(const bt::Vector3& pos); std::set::const_iterator soloPointsBegin(); diff --git a/src/OpDefs/CMakeLists.txt b/src/OpDefs/CMakeLists.txt index 1a5a95d..765bd2c 100644 --- a/src/OpDefs/CMakeLists.txt +++ b/src/OpDefs/CMakeLists.txt @@ -24,6 +24,7 @@ add_library(${libName} SHARED GopHouse.cpp GopTestCube.cpp GopGeometryImport.cpp + GopGrid.cpp ) target_link_libraries(${libName} PRIVATE Qt6::Core Qt6::Widgets Qt6::SvgWidgets Qt6::OpenGLWidgets glm::glm Eigen3::Eigen TBB::tbb) diff --git a/src/OpDefs/GopGrid.cpp b/src/OpDefs/GopGrid.cpp new file mode 100644 index 0000000..3fdfe7b --- /dev/null +++ b/src/OpDefs/GopGrid.cpp @@ -0,0 +1,65 @@ +#include "OpDefs/GopGrid.h" +#include "Engine/Types.h" +#include +#include +#include +#include +#include +#include + +GopGrid::GopGrid(enzo::nt::NetworkManager* network, enzo::op::OpInfo opInfo) +: GeometryOpDef(network, opInfo) +{ + +} + +void GopGrid::cookOp(enzo::op::Context context) +{ + using namespace enzo; + + if(outputRequested(0)) + { + geo::Geometry geo; + bt::floatT width = context.evalFloatParm("width"); + bt::floatT height = context.evalFloatParm("height"); + + const bt::intT columns = context.evalFloatParm("columns"); + const bt::intT rows = context.evalFloatParm("rows"); + if(columns==0 || rows==0) + { + setOutputGeometry(0, geo); + return; + } + + const bt::floatT centerOffsetX = (columns-1)*width/2.0; + const bt::floatT centerOffsetY = (rows-1)*height/2.0; + + for(int i=0;i #include @@ -55,6 +56,17 @@ extern "C" 1, } ); + addOperator( + enzo::op::OpInfo { + "grid", + "Grid", + &GopGrid::ctor, + GopGrid::parameterList, + 0, + 0, + 1, + } + ); } }