From 0d6ddf701a08e57ba7c36563799ad635925cd26e Mon Sep 17 00:00:00 2001 From: parker Date: Tue, 24 Jun 2025 00:18:45 +0100 Subject: [PATCH] feat: floating edge cubic bezier, additional memory guards --- CMakeLists.txt | 1 + src/gui/network/FloatingEdgeGraphic.cpp | 15 ++++++++++++++- src/gui/network/Network.cpp | 9 +++++---- src/gui/network/NodeEdgeGraphic.cpp | 2 ++ 4 files changed, 22 insertions(+), 5 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 88d3a8b..cf92f5c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.10) # set vars set(CMAKE_EXPORT_COMPILE_COMMANDS ON) +set(CMAKE_CXX_STANDARD 17) # set exec names set(AppExec enzoGui) set(TestExec tests) diff --git a/src/gui/network/FloatingEdgeGraphic.cpp b/src/gui/network/FloatingEdgeGraphic.cpp index 5a8e5bd..3f8ea11 100644 --- a/src/gui/network/FloatingEdgeGraphic.cpp +++ b/src/gui/network/FloatingEdgeGraphic.cpp @@ -3,6 +3,7 @@ #include "gui/network/SocketGraphic.h" #include #include +#include FloatingEdgeGraphic::FloatingEdgeGraphic(SocketGraphic* socket1, QGraphicsItem *parent) : QGraphicsItem(parent), socket1_{socket1} @@ -29,7 +30,19 @@ void FloatingEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsIte pen.setCapStyle(Qt::RoundCap); painter->setPen(pen); - painter->drawLine(socket1_->scenePos(),floatPos_); + // painter->drawLine(socket1_->scenePos(),floatPos_); + + QPointF pos1 = socket1_->getIO()==SocketGraphic::SocketType::Input ? socket1_->scenePos() : floatPos_; + QPointF pos2 = socket1_->getIO()==SocketGraphic::SocketType::Input ? floatPos_ : socket1_->scenePos(); + float dist = std::sqrt(std::pow(pos1.x()-pos2.x(),2)+std::pow(pos1.y()-pos2.y(),2)); + std::cout << "dist: " << dist << "\n"; + float cubicStrength = dist*0.5; + cubicStrength = std::clamp(cubicStrength, 0.0f, 40.0f); + QPainterPath path; + path.moveTo(pos1); + path.cubicTo(pos1-QPoint(0,cubicStrength), pos2+QPoint(0,cubicStrength), pos2); + painter->drawPath(path); + } diff --git a/src/gui/network/Network.cpp b/src/gui/network/Network.cpp index 8c606b6..084cc1e 100644 --- a/src/gui/network/Network.cpp +++ b/src/gui/network/Network.cpp @@ -76,16 +76,17 @@ void Network::resizeEvent(QResizeEvent *event) void Network::deleteEdge(QGraphicsItem* edge) { std::cout << "----\ndeleting edge\n"; + if(!edge) return; if(prevHoverItem_==edge) { prevHoverItem_=nullptr; } - scene_->removeItem(edge); - scene_->update(); - view_->update(); + // scene_->removeItem(edge); + // scene_->update(); + // view_->update(); // NOTE: deleting edge kept giving me segmentation faults // I coundn't figure it out so I'm just leaving it for now - // delete edge; + delete edge; std::cout << "finished deleting edge\n----\n"; } diff --git a/src/gui/network/NodeEdgeGraphic.cpp b/src/gui/network/NodeEdgeGraphic.cpp index 915fc5f..7c642fa 100644 --- a/src/gui/network/NodeEdgeGraphic.cpp +++ b/src/gui/network/NodeEdgeGraphic.cpp @@ -3,6 +3,7 @@ #include "gui/network/SocketGraphic.h" #include #include +#include NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent) : QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}, pen_{QPen(QColor("white"))} @@ -17,6 +18,7 @@ NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, NodeEdgeGraphic::~NodeEdgeGraphic() { std::cout << "edge destructor\n"; + scene()->removeItem(this); socket1_->removeEdge(this); socket2_->removeEdge(this); }