From 2b9544cfae9d3b173e1a06359ba551ba30a95072 Mon Sep 17 00:00:00 2001 From: parker Date: Sun, 22 Jun 2025 16:30:46 +0100 Subject: [PATCH] fix: edge positioning to sockets --- src/gui/network/Network.cpp | 8 ++++++-- src/gui/network/NodeEdgeGraphic.cpp | 8 +++++--- src/gui/network/NodeGraphic.cpp | 1 + src/gui/network/SocketGraphic.cpp | 9 ++++++++- 4 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/gui/network/Network.cpp b/src/gui/network/Network.cpp index 1358a20..5ac6bd0 100644 --- a/src/gui/network/Network.cpp +++ b/src/gui/network/Network.cpp @@ -128,8 +128,12 @@ void Network::socketClicked(SocketGraphic* socket, QMouseEvent *event) // connect to opposite type else if (socket->getIO()!=startSocket_->getIO()) { - NodeEdgeGraphic* newEdge = new NodeEdgeGraphic(startSocket_, socket); - newEdge->setPos(startSocket_->scenePos(), socket->scenePos()); + auto inputSocket = startSocket_->getIO()==SocketGraphic::SocketType::Input ? startSocket_ : socket; + auto outputSocket = socket->getIO()==SocketGraphic::SocketType::Output ? socket : startSocket_; + + NodeEdgeGraphic* newEdge = new NodeEdgeGraphic(inputSocket, outputSocket); + + newEdge->setPos(inputSocket->scenePos(), outputSocket->scenePos()); scene_->addItem(newEdge); destroyFloatingEdge(); } diff --git a/src/gui/network/NodeEdgeGraphic.cpp b/src/gui/network/NodeEdgeGraphic.cpp index 2949fe8..94c01a0 100644 --- a/src/gui/network/NodeEdgeGraphic.cpp +++ b/src/gui/network/NodeEdgeGraphic.cpp @@ -26,6 +26,7 @@ void NodeEdgeGraphic::updatePath() path_.clear(); path_.moveTo(pos1_); path_.lineTo(pos2_); + update(); } @@ -33,27 +34,28 @@ void NodeEdgeGraphic::setPos(QPointF pos1, QPointF pos2) { pos1_ = pos1; pos2_ = pos2; + prepareGeometryChange(); updatePath(); - // prepareGeometryChange(); } void NodeEdgeGraphic::setStartPos(QPointF pos) { pos1_ = pos; + prepareGeometryChange(); updatePath(); - // prepareGeometryChange(); } void NodeEdgeGraphic::setEndPos(QPointF pos) { pos2_ = pos; + prepareGeometryChange(); updatePath(); - // prepareGeometryChange(); } QRectF NodeEdgeGraphic::boundingRect() const { // std::cout << "bounds set" << socket1_->scenePos().x() << " " << socket1_->scenePos().y() << " " << socket2_->scenePos().x() << " " << socket2_->scenePos().y() << "\n"; + // QRectF boundRect_ = QRectF(socket1_->scenePos(), socket1_->scenePos()).normalized(); QRectF boundRect_ = QRectF(pos1_, pos2_).normalized(); return boundRect_; } diff --git a/src/gui/network/NodeGraphic.cpp b/src/gui/network/NodeGraphic.cpp index 5ed196c..5493211 100644 --- a/src/gui/network/NodeGraphic.cpp +++ b/src/gui/network/NodeGraphic.cpp @@ -5,6 +5,7 @@ #include #include #include "gui/network/SocketGraphic.h" +#include NodeGraphic::NodeGraphic(QGraphicsItem *parent) : QGraphicsItem(parent) diff --git a/src/gui/network/SocketGraphic.cpp b/src/gui/network/SocketGraphic.cpp index c50e55c..bd1f8a7 100644 --- a/src/gui/network/SocketGraphic.cpp +++ b/src/gui/network/SocketGraphic.cpp @@ -40,7 +40,14 @@ void SocketGraphic::posChanged(QPointF pos) for(auto* edge : edges_) { // edge->setPos(startSocket_->scenePos(), socket->scenePos()); - edge->setStartPos(this->scenePos()); + if(type_==SocketType::Input) + { + edge->setStartPos(this->scenePos()); + } + else if(type_==SocketType::Output) + { + edge->setEndPos(this->scenePos()); + } } }