diff --git a/src/Engine/Network/NetworkManager.cpp b/src/Engine/Network/NetworkManager.cpp index 83b134d..3fcfbfe 100644 --- a/src/Engine/Network/NetworkManager.cpp +++ b/src/Engine/Network/NetworkManager.cpp @@ -52,35 +52,36 @@ void enzo::nt::NetworkManager::setDisplayOp(OpId opId) // ---- // create geometry start // ---- - std::shared_ptr PAttr = prevGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); - ga::AttributeHandleVector3 PAttrHandle(PAttr); - 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); + // std::shared_ptr PAttr = prevGeometry.getAttribByName(ga::AttrOwner::POINT, "P"); + // ga::AttributeHandleVector3 PAttrHandle(PAttr); + // 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); - std::shared_ptr pointAttr = prevGeometry.getAttribByName(ga::AttrOwner::VERTEX, "point"); - ga::AttributeHandleInt pointAttrHandle(pointAttr); - 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); + // std::shared_ptr pointAttr = prevGeometry.getAttribByName(ga::AttrOwner::VERTEX, "point"); + // ga::AttributeHandleInt pointAttrHandle(pointAttr); + // 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); - std::shared_ptr vertexCountAttr = prevGeometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); - ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); - for(auto& f:faces) vertexCountHandle.addValue(f.size()); + // std::shared_ptr vertexCountAttr = prevGeometry.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + // ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); + // for(auto& f:faces) vertexCountHandle.addValue(f.size()); // -------- 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) @@ -103,8 +104,9 @@ enzo::geo::Geometry enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId, enzo:: std::vector enzo::nt::NetworkManager::getDependencyGraph(enzo::nt::OpId opId) { std::stack traversalBuffer; - std::vector traversalGraph; + std::vector dependencyGraph; traversalBuffer.push(opId); + dependencyGraph.push_back(opId); while(traversalBuffer.size()!=0) { @@ -115,12 +117,12 @@ std::vector enzo::nt::NetworkManager::getDependencyGraph(enzo::n for(auto connection : inputConnections) { traversalBuffer.push(connection->getInputOpId()); - traversalGraph.push_back(connection->getInputOpId()); + dependencyGraph.push_back(connection->getInputOpId()); } } - std::reverse(traversalGraph.begin(), traversalGraph.end()); - return traversalGraph; + std::reverse(dependencyGraph.begin(), dependencyGraph.end()); + return dependencyGraph; } diff --git a/src/Engine/Operator/GeometryOpDef.cpp b/src/Engine/Operator/GeometryOpDef.cpp index 31546b7..591131a 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/Types.h" +#include "Engine/Operator/AttributeHandle.h" bool enzo::nt::GeometryOpDef::outputRequested(unsigned int outputIndex) { @@ -38,6 +40,16 @@ enzo::nt::GeometryOpDef::GeometryOpDef() outputGeometry_ = std::vector(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() { using namespace enzo; @@ -48,6 +60,33 @@ void enzo::nt::GeometryOpDef::cookOp() // copy input geometry geo::Geometry geo = cloneInputGeo(0); + // ---- + // create geometry start + // ---- + std::shared_ptr PAttr = geo.getAttribByName(ga::AttrOwner::POINT, "P"); + ga::AttributeHandleVector3 PAttrHandle(PAttr); + 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); + + std::shared_ptr pointAttr = geo.getAttribByName(ga::AttrOwner::VERTEX, "point"); + ga::AttributeHandleInt pointAttrHandle(pointAttr); + 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); + + std::shared_ptr vertexCountAttr = geo.getAttribByName(ga::AttrOwner::PRIMITIVE, "vertexCount"); + ga::AttributeHandleInt vertexCountHandle(vertexCountAttr); + for(auto& f:faces) vertexCountHandle.addValue(f.size()); + + // -------- + + // set output geometry setOutputGeometry(0, geo); } diff --git a/src/Engine/Operator/GeometryOpDef.h b/src/Engine/Operator/GeometryOpDef.h index e8c40b4..ccd6e12 100644 --- a/src/Engine/Operator/GeometryOpDef.h +++ b/src/Engine/Operator/GeometryOpDef.h @@ -8,6 +8,7 @@ class GeometryOpDef public: GeometryOpDef(); void cookOp(); + geo::Geometry& getOutputGeo(unsigned outputIndex); private: std::vector outputGeometry_; unsigned int minInputs_; diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index 3e04907..0160c9f 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -36,6 +36,11 @@ void enzo::nt::GeometryOperator::cookOp() opDef_->cookOp(); } +geo::Geometry& enzo::nt::GeometryOperator::getOutputGeo(unsigned outputIndex) +{ + return opDef_->getOutputGeo(outputIndex); +} + void nt::GeometryOperator::addInputConnection(std::shared_ptr connection) { std::cout << "Input connection added\nConnecting ops " << connection->getInputOpId() << " -> " << connection->getOutputOpId() << "\n"; diff --git a/src/Engine/Operator/GeometryOperator.h b/src/Engine/Operator/GeometryOperator.h index 18d0b95..2a688d1 100644 --- a/src/Engine/Operator/GeometryOperator.h +++ b/src/Engine/Operator/GeometryOperator.h @@ -18,6 +18,7 @@ public: GeometryOperator& operator=(const GeometryOperator&) = delete; void cookOp(); + geo::Geometry& getOutputGeo(unsigned outputIndex); void addInputConnection(std::shared_ptr connection); void addOutputConnection(std::shared_ptr connection);