feat: connect cook output to display
This commit is contained in:
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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_;
|
||||||
|
|||||||
@@ -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";
|
||||||
|
|||||||
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user