diff --git a/src/Engine/Network/NetworkManager.cpp b/src/Engine/Network/NetworkManager.cpp index bb1f1b8..722ef52 100644 --- a/src/Engine/Network/NetworkManager.cpp +++ b/src/Engine/Network/NetworkManager.cpp @@ -3,6 +3,8 @@ #include "Engine/Types.h" #include #include +#include +#include enzo::nt::OpId enzo::nt::NetworkManager::addOperator() { @@ -41,8 +43,38 @@ bool enzo::nt::NetworkManager::isValidOp(nt::OpId opId) void enzo::nt::NetworkManager::setDisplayOp(OpId opId) { displayOp_=opId; + getTraversalGraph(opId); } +void enzo::nt::NetworkManager::cookOp(enzo::nt::OpId opId) +{ + std::cout << "COOKING: " << opId << "\n"; +} + +std::vector enzo::nt::NetworkManager::getTraversalGraph(enzo::nt::OpId opId) +{ + std::stack traversalBuffer; + std::vector traversalGraph; + traversalBuffer.push(opId); + + while(traversalBuffer.size()!=0) + { + enzo::nt::OpId currentOp = traversalBuffer.top(); + std::cout << "cooking node: " << currentOp << "\n"; + traversalBuffer.pop(); + auto inputConnections = getGeoOperator(currentOp).getInputConnections(); + for(auto connection : inputConnections) + { + traversalBuffer.push(connection->getInputOpId()); + traversalGraph.push_back(connection->getInputOpId()); + } + } + + std::reverse(traversalGraph.begin(), traversalGraph.end()); + return traversalGraph; +} + + std::optional enzo::nt::NetworkManager::getDisplayOp() { return displayOp_; diff --git a/src/Engine/Network/NetworkManager.h b/src/Engine/Network/NetworkManager.h index 026b806..794951c 100644 --- a/src/Engine/Network/NetworkManager.h +++ b/src/Engine/Network/NetworkManager.h @@ -25,6 +25,9 @@ private: std::unordered_map> gopStore_; + void cookOp(enzo::nt::OpId opId); + std::vector getTraversalGraph(enzo::nt::OpId opId); + // the highest operator id currently stored enzo::nt::OpId maxOpId_=0; diff --git a/src/Engine/Operator/GeometryOperator.cpp b/src/Engine/Operator/GeometryOperator.cpp index ba94dfb..bcbf953 100644 --- a/src/Engine/Operator/GeometryOperator.cpp +++ b/src/Engine/Operator/GeometryOperator.cpp @@ -11,16 +11,16 @@ void enzo::nt::connectOperators(enzo::nt::OpId inputOpId, unsigned int inputInde // get network manager auto nm = enzo::nt::NetworkManager::getInstance(); - auto inputOp = nm->getGeoOperator(inputOpId); - auto outputOp = nm->getGeoOperator(outputOpId); + auto& inputOp = nm->getGeoOperator(inputOpId); + auto& outputOp = nm->getGeoOperator(outputOpId); auto newConnection = std::make_shared(inputOpId, inputIndex, outputOpId, outputIndex); // set output on the upper operator - outputOp.addOutputConnection(newConnection); + inputOp.addOutputConnection(newConnection); // set input on the lower operator - inputOp.addInputConnection(newConnection); + outputOp.addInputConnection(newConnection); } nt::GeometryOperator::GeometryOperator() @@ -30,30 +30,13 @@ nt::GeometryOperator::GeometryOperator() maxOutputs_=4; } -// bool nt::GeometryOperator::setInput(unsigned int inputNumber, nt::OpId opId) -// { -// if(inputNumber>=maxInputs_) -// { -// return false; -// } -// inputIds_[inputNumber] = opId; - -// return true; -// } -// bool nt::GeometryOperator::setOutput(unsigned int outputNumber, nt::OpId opId) -// { - -// if(outputNumber>=maxOutputs_) -// { -// return false; -// } -// inputIds_[outputNumber] = opId; -// return true; -// } void nt::GeometryOperator::addInputConnection(std::shared_ptr connection) { + std::cout << "Input connection added\nConnecting ops " << connection->getInputOpId() << " -> " << connection->getOutputOpId() << "\n"; + std::cout << "Connecting index " << connection->getInputIndex() << " -> " << connection->getOutputIndex() << "\n"; inputConnections_.push_back(connection); + std::cout << "size: " << inputConnections_.size() << "\n"; } void nt::GeometryOperator::addOutputConnection(std::shared_ptr connection) @@ -61,8 +44,31 @@ void nt::GeometryOperator::addOutputConnection(std::shared_ptrgetInputOpId() << " -> " << connection->getOutputOpId() << "\n"; std::cout << "Connecting index " << connection->getInputIndex() << " -> " << connection->getOutputIndex() << "\n"; outputConnections_.push_back(connection); + std::cout << "size: " << outputConnections_.size() << "\n"; } +std::vector> nt::GeometryOperator::getInputConnections() const +{ + std::vector> inputConnections; + std::cout << "input connections size: " << inputConnections_.size() <<"\n"; + for(std::shared_ptr connection : inputConnections_) + { + inputConnections.push_back(connection); + } + return inputConnections; +} + +std::vector> nt::GeometryOperator::getOutputConnections() const +{ + std::vector> outputConnections; + for(std::shared_ptr connection : outputConnections_) + { + outputConnections.push_back(connection); + } + return outputConnections; +} + + // std::optional nt::GeometryOperator::getInput(unsigned int inputNumber) const // { diff --git a/src/Engine/Operator/GeometryOperator.h b/src/Engine/Operator/GeometryOperator.h index 5d5ff39..0a5f8ca 100644 --- a/src/Engine/Operator/GeometryOperator.h +++ b/src/Engine/Operator/GeometryOperator.h @@ -11,13 +11,15 @@ class GeometryOperator { public: GeometryOperator(); - // bool setInput(unsigned int inputNumber, nt::OpId opId); - // bool setOutput(unsigned int outputNumber, nt::OpId opId); - // std::optional getInput(unsigned int inputNumber) const; - // std::optional getOutput(unsigned int outputNumber) const; + + // disable copying + GeometryOperator(const GeometryOperator&) = delete; + GeometryOperator& operator=(const GeometryOperator&) = delete; void addInputConnection(std::shared_ptr connection); void addOutputConnection(std::shared_ptr connection); + std::vector> getInputConnections() const; + std::vector> getOutputConnections() const; diff --git a/src/gui/network/Network.h b/src/gui/network/Network.h index 704adc1..9ddfc3a 100644 --- a/src/gui/network/Network.h +++ b/src/gui/network/Network.h @@ -72,10 +72,8 @@ private: template QGraphicsItem* itemOfType(QList items) { - // std::cout << "count: " << items.size() << "\n"; for(QGraphicsItem* item : items) { - std::cout << "item: " << typeid(*item).name() << "\n"; if(item && typeid(*item)==typeid(T)) { return item; diff --git a/src/gui/network/NodeEdgeGraphic.cpp b/src/gui/network/NodeEdgeGraphic.cpp index ccdd131..5edf71a 100644 --- a/src/gui/network/NodeEdgeGraphic.cpp +++ b/src/gui/network/NodeEdgeGraphic.cpp @@ -101,9 +101,6 @@ QRectF NodeEdgeGraphic::boundingRect() const } QPainterPath NodeEdgeGraphic::shape() const{ - // FIX: shape not changing with node position - std::cout << "setting shape to: " << socket1_->scenePos().x() << " " << socket2_->scenePos().x() <<"\n"; - QPainterPathStroker stroker; stroker.setWidth(padding_); return stroker.createStroke(path_); diff --git a/tests/NetworkTests.cpp b/tests/NetworkTests.cpp index deb6f52..50180cd 100644 --- a/tests/NetworkTests.cpp +++ b/tests/NetworkTests.cpp @@ -17,8 +17,8 @@ TEST_CASE("network") { auto newConnection = std::make_shared(newOpId, 1, newOpId2, 3); - auto inputOp = nm->getGeoOperator(newOpId); - auto outputOp = nm->getGeoOperator(newOpId2); + auto& inputOp = nm->getGeoOperator(newOpId); + auto& outputOp = nm->getGeoOperator(newOpId2); // set output on the upper operator outputOp.addOutputConnection(newConnection);