feat: connect cook output to display

This commit is contained in:
parker
2025-07-08 16:49:54 +01:00
parent 0be6512d33
commit 0520d35b2c
5 changed files with 73 additions and 25 deletions

View File

@@ -52,35 +52,36 @@ void enzo::nt::NetworkManager::setDisplayOp(OpId opId)
// ---- // ----
// create geometry start // create geometry start
// ---- // ----
std::shared_ptr<ga::Attribute> PAttr = prevGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); // std::shared_ptr<ga::Attribute> PAttr = prevGeometry.getAttribByName(ga::AttrOwner::POINT, "P");
ga::AttributeHandleVector3 PAttrHandle(PAttr); // ga::AttributeHandleVector3 PAttrHandle(PAttr);
std::vector<bt::Vector3> pts={ // std::vector<bt::Vector3> 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},
{-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} // {0,2,-1},{0,2,1}
}; // };
for(auto& p:pts) PAttrHandle.addValue(p); // for(auto& p:pts) PAttrHandle.addValue(p);
std::shared_ptr<ga::Attribute> pointAttr = prevGeometry.getAttribByName(ga::AttrOwner::VERTEX, "point"); // std::shared_ptr<ga::Attribute> pointAttr = prevGeometry.getAttribByName(ga::AttrOwner::VERTEX, "point");
ga::AttributeHandleInt pointAttrHandle(pointAttr); // ga::AttributeHandleInt pointAttrHandle(pointAttr);
std::vector<std::vector<int>> faces={ // std::vector<std::vector<int>> faces={
{3,2,6,9,7},{0,1,5,8,4},{0,3,7,4},{1,2,6,5}, // {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} // {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(i);
std::shared_ptr<ga::Attribute> vertexCountAttr = prevGeometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); // std::shared_ptr<ga::Attribute> vertexCountAttr = prevGeometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount");
ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); // ga::AttributeHandleInt vertexCountHandle(vertexCountAttr);
for(auto& f:faces) vertexCountHandle.addValue(f.size()); // for(auto& f:faces) vertexCountHandle.addValue(f.size());
// -------- // --------
std::cout << "size: " << dependencyGraph.size() << "\n"; std::cout << "size: " << dependencyGraph.size() << "\n";
for(enzo::nt::OpId opId : dependencyGraph) for(enzo::nt::OpId dependencyOpId : dependencyGraph)
{ {
prevGeometry = cookOp(opId, prevGeometry); prevGeometry = cookOp(dependencyOpId, prevGeometry);
} }
updateDisplay(prevGeometry); 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) enzo::geo::Geometry enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId, enzo::geo::Geometry inputGeometry)
@@ -103,8 +104,9 @@ enzo::geo::Geometry enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId, enzo::
std::vector<enzo::nt::OpId> enzo::nt::NetworkManager::getDependencyGraph(enzo::nt::OpId opId) std::vector<enzo::nt::OpId> enzo::nt::NetworkManager::getDependencyGraph(enzo::nt::OpId opId)
{ {
std::stack<enzo::nt::OpId> traversalBuffer; std::stack<enzo::nt::OpId> traversalBuffer;
std::vector<enzo::nt::OpId> traversalGraph; std::vector<enzo::nt::OpId> dependencyGraph;
traversalBuffer.push(opId); traversalBuffer.push(opId);
dependencyGraph.push_back(opId);
while(traversalBuffer.size()!=0) while(traversalBuffer.size()!=0)
{ {
@@ -115,12 +117,12 @@ std::vector<enzo::nt::OpId> enzo::nt::NetworkManager::getDependencyGraph(enzo::n
for(auto connection : inputConnections) for(auto connection : inputConnections)
{ {
traversalBuffer.push(connection->getInputOpId()); traversalBuffer.push(connection->getInputOpId());
traversalGraph.push_back(connection->getInputOpId()); dependencyGraph.push_back(connection->getInputOpId());
} }
} }
std::reverse(traversalGraph.begin(), traversalGraph.end()); std::reverse(dependencyGraph.begin(), dependencyGraph.end());
return traversalGraph; return dependencyGraph;
} }

View File

@@ -1,6 +1,8 @@
#include "Engine/Operator/GeometryOpDef.h" #include "Engine/Operator/GeometryOpDef.h"
#include <stdexcept> #include <stdexcept>
#include <iostream> #include <iostream>
#include "Engine/Types.h"
#include "Engine/Operator/AttributeHandle.h"
bool enzo::nt::GeometryOpDef::outputRequested(unsigned int outputIndex) bool enzo::nt::GeometryOpDef::outputRequested(unsigned int outputIndex)
{ {
@@ -38,6 +40,16 @@ enzo::nt::GeometryOpDef::GeometryOpDef()
outputGeometry_ = std::vector<enzo::geo::Geometry>(4, enzo::geo::Geometry()); outputGeometry_ = std::vector<enzo::geo::Geometry>(4, enzo::geo::Geometry());
} }
enzo::geo::Geometry& enzo::nt::GeometryOpDef::getOutputGeo(unsigned outputIndex)
{
if(outputIndex>maxOutputs_)
{
throw std::runtime_error("Cannot set output geometry to index > maxOutputs");
}
return outputGeometry_.at(outputIndex);
}
void enzo::nt::GeometryOpDef::cookOp() void enzo::nt::GeometryOpDef::cookOp()
{ {
using namespace enzo; using namespace enzo;
@@ -48,6 +60,33 @@ void enzo::nt::GeometryOpDef::cookOp()
// copy input geometry // copy input geometry
geo::Geometry geo = cloneInputGeo(0); geo::Geometry geo = cloneInputGeo(0);
// ----
// create geometry start
// ----
std::shared_ptr<ga::Attribute> PAttr = geo.getAttribByName(ga::AttrOwner::POINT, "P");
ga::AttributeHandleVector3 PAttrHandle(PAttr);
std::vector<bt::Vector3> 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);
std::shared_ptr<ga::Attribute> pointAttr = geo.getAttribByName(ga::AttrOwner::VERTEX, "point");
ga::AttributeHandleInt pointAttrHandle(pointAttr);
std::vector<std::vector<int>> 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);
std::shared_ptr<ga::Attribute> vertexCountAttr = geo.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount");
ga::AttributeHandleInt vertexCountHandle(vertexCountAttr);
for(auto& f:faces) vertexCountHandle.addValue(f.size());
// --------
// set output geometry // set output geometry
setOutputGeometry(0, geo); setOutputGeometry(0, geo);
} }

View File

@@ -8,6 +8,7 @@ class GeometryOpDef
public: public:
GeometryOpDef(); GeometryOpDef();
void cookOp(); void cookOp();
geo::Geometry& getOutputGeo(unsigned outputIndex);
private: private:
std::vector<enzo::geo::Geometry> outputGeometry_; std::vector<enzo::geo::Geometry> outputGeometry_;
unsigned int minInputs_; unsigned int minInputs_;

View File

@@ -36,6 +36,11 @@ void enzo::nt::GeometryOperator::cookOp()
opDef_->cookOp(); opDef_->cookOp();
} }
geo::Geometry& enzo::nt::GeometryOperator::getOutputGeo(unsigned outputIndex)
{
return opDef_->getOutputGeo(outputIndex);
}
void nt::GeometryOperator::addInputConnection(std::shared_ptr<nt::GeometryConnection> connection) void nt::GeometryOperator::addInputConnection(std::shared_ptr<nt::GeometryConnection> connection)
{ {
std::cout << "Input connection added\nConnecting ops " << connection->getInputOpId() << " -> " << connection->getOutputOpId() << "\n"; std::cout << "Input connection added\nConnecting ops " << connection->getInputOpId() << " -> " << connection->getOutputOpId() << "\n";

View File

@@ -18,6 +18,7 @@ public:
GeometryOperator& operator=(const GeometryOperator&) = delete; GeometryOperator& operator=(const GeometryOperator&) = delete;
void cookOp(); void cookOp();
geo::Geometry& getOutputGeo(unsigned outputIndex);
void addInputConnection(std::shared_ptr<nt::GeometryConnection> connection); void addInputConnection(std::shared_ptr<nt::GeometryConnection> connection);
void addOutputConnection(std::shared_ptr<nt::GeometryConnection> connection); void addOutputConnection(std::shared_ptr<nt::GeometryConnection> connection);