From 6f2a1ce5322f01b4340ac167b399714adfd11f87 Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 8 Jul 2025 19:13:15 +0100 Subject: [PATCH] feat: basic geometry pass between operators --- src/Engine/Network/NetworkManager.cpp | 23 ++++++-------- src/Engine/Network/NetworkManager.h | 2 +- src/Engine/Operator/AttributeHandle.h | 5 +++ src/Engine/Operator/GeometryOpDef.cpp | 40 ++++++++++++++++++------ src/Engine/Operator/GeometryOpDef.h | 5 ++- src/Engine/Operator/GeometryOperator.cpp | 5 +-- src/Engine/Operator/GeometryOperator.h | 3 +- 7 files changed, 54 insertions(+), 29 deletions(-) diff --git a/src/Engine/Network/NetworkManager.cpp b/src/Engine/Network/NetworkManager.cpp index 3fcfbfe..30eb406 100644 --- a/src/Engine/Network/NetworkManager.cpp +++ b/src/Engine/Network/NetworkManager.cpp @@ -8,11 +8,13 @@ #include #include #include +#include enzo::nt::OpId enzo::nt::NetworkManager::addOperator() { - gopStore_.emplace(++maxOpId_, std::make_unique()); + maxOpId_++; + gopStore_.emplace(maxOpId_, std::make_unique(maxOpId_)); std::cout << "adding operator " << maxOpId_ << "\n"; return maxOpId_; @@ -30,6 +32,10 @@ enzo::nt::NetworkManager* enzo::nt::NetworkManager::getInstance() enzo::nt::GeometryOperator& enzo::nt::NetworkManager::getGeoOperator(nt::OpId opId) { + if(opId>gopStore_.size()) + { + throw std::out_of_range("OpId: " + std::to_string(opId) + " > max opId: " + std::to_string(maxOpId_) + "\n"); + } return *gopStore_.at(opId); } @@ -78,27 +84,16 @@ void enzo::nt::NetworkManager::setDisplayOp(OpId opId) std::cout << "size: " << dependencyGraph.size() << "\n"; for(enzo::nt::OpId dependencyOpId : dependencyGraph) { - prevGeometry = cookOp(dependencyOpId, prevGeometry); + cookOp(dependencyOpId); } enzo::nt::GeometryOperator& displayOp = getGeoOperator(opId); updateDisplay(displayOp.getOutputGeo(0)); } -enzo::geo::Geometry enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId, enzo::geo::Geometry inputGeometry) +void enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId) { - std::shared_ptr PAttr = inputGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); - ga::AttributeHandleVector3 PAttrHandle = ga::AttributeHandleVector3(PAttr); - enzo::nt::GeometryOperator& op = getGeoOperator(opId); op.cookOp(); - - for(int i=0; i enzo::nt::NetworkManager::getDependencyGraph(enzo::nt::OpId opId) diff --git a/src/Engine/Network/NetworkManager.h b/src/Engine/Network/NetworkManager.h index af35e62..0a348c3 100644 --- a/src/Engine/Network/NetworkManager.h +++ b/src/Engine/Network/NetworkManager.h @@ -29,7 +29,7 @@ private: std::unordered_map> gopStore_; - enzo::geo::Geometry cookOp(enzo::nt::OpId opId, enzo::geo::Geometry inputGeometry); + void cookOp(enzo::nt::OpId opId); std::vector getDependencyGraph(enzo::nt::OpId opId); // the highest operator id currently stored diff --git a/src/Engine/Operator/AttributeHandle.h b/src/Engine/Operator/AttributeHandle.h index d8f4c54..105a0e0 100644 --- a/src/Engine/Operator/AttributeHandle.h +++ b/src/Engine/Operator/AttributeHandle.h @@ -59,6 +59,11 @@ public: return *data_; } + size_t getSize() + { + return data_->size(); + } + T getValue(size_t pos) const { // TODO:protect against invalid positions diff --git a/src/Engine/Operator/GeometryOpDef.cpp b/src/Engine/Operator/GeometryOpDef.cpp index 591131a..890c258 100644 --- a/src/Engine/Operator/GeometryOpDef.cpp +++ b/src/Engine/Operator/GeometryOpDef.cpp @@ -1,6 +1,8 @@ #include "Engine/Operator/GeometryOpDef.h" #include #include +#include "Engine/Network/NetworkManager.h" +#include "Engine/Operator/GeometryOperator.h" #include "Engine/Types.h" #include "Engine/Operator/AttributeHandle.h" @@ -20,7 +22,16 @@ const enzo::geo::Geometry& enzo::nt::GeometryOpDef::getInputGeoView(unsigned int enzo::geo::Geometry enzo::nt::GeometryOpDef::cloneInputGeo(unsigned int inputIndex) { // TODO: implement - return enzo::geo::Geometry(); + enzo::nt::NetworkManager* nm = nt::NetworkManager::getInstance(); + enzo::nt::GeometryOperator& selfOp = nm->getGeoOperator(opId_); + std::vector> inputConnections = selfOp.getInputConnections(); + if(inputConnections.size()==0) + { + std::cout << "no input\n"; + return enzo::geo::Geometry(); + } + std::shared_ptr inputConnection = inputConnections.at(inputIndex); + return nm->getGeoOperator(inputConnection->getInputOpId()).getOutputGeo(inputConnection->getInputIndex()); } void enzo::nt::GeometryOpDef::setOutputGeometry(unsigned int outputIndex, enzo::geo::Geometry geometry) @@ -32,7 +43,8 @@ void enzo::nt::GeometryOpDef::setOutputGeometry(unsigned int outputIndex, enzo:: outputGeometry_[outputIndex] = geometry; } -enzo::nt::GeometryOpDef::GeometryOpDef() +enzo::nt::GeometryOpDef::GeometryOpDef(enzo::nt::OpId opId) +: opId_{opId} { minInputs_=1; maxInputs_=4; @@ -63,29 +75,37 @@ void enzo::nt::GeometryOpDef::cookOp() // ---- // create geometry start // ---- - std::shared_ptr PAttr = geo.getAttribByName(ga::AttrOwner::POINT, "P"); + auto PAttr = geo.getAttribByName(ga::AttrOwner::POINT, "P"); ga::AttributeHandleVector3 PAttrHandle(PAttr); - std::vector pts={ + int startPt = PAttrHandle.getSize(); + std::vector pts = { {-1,-1,-1},{1,-1,-1},{1,-1,1},{-1,-1,1}, {-1,1,-1},{1,1,-1},{1,1,1},{-1,1,1}, {0,2,-1},{0,2,1} }; - for(auto& p:pts) PAttrHandle.addValue(p); + for (auto& p : pts) PAttrHandle.addValue(p); - std::shared_ptr pointAttr = geo.getAttribByName(ga::AttrOwner::VERTEX, "point"); + auto pointAttr = geo.getAttribByName(ga::AttrOwner::VERTEX, "point"); ga::AttributeHandleInt pointAttrHandle(pointAttr); - std::vector> faces={ + std::vector> faces = { {3,2,6,9,7},{0,1,5,8,4},{0,3,7,4},{1,2,6,5}, {0,1,2,3},{4,7,9},{4,9,8},{5,6,9},{5,9,8} }; - for(auto& f:faces) for(int i:f) pointAttrHandle.addValue(i); + for (auto& f : faces) for (int i : f) pointAttrHandle.addValue(startPt + i); - std::shared_ptr vertexCountAttr = geo.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + auto vertexCountAttr = geo.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); - for(auto& f:faces) vertexCountHandle.addValue(f.size()); + for (auto& f : faces) vertexCountHandle.addValue(f.size()); // -------- + for(int i=0; i