feat: floating edge cubic bezier, additional memory guards

This commit is contained in:
parker
2025-06-24 00:18:45 +01:00
parent 71c2057d54
commit 0d6ddf701a
4 changed files with 22 additions and 5 deletions

View File

@@ -2,6 +2,7 @@ cmake_minimum_required(VERSION 3.10)
# set vars # set vars
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) set(CMAKE_EXPORT_COMPILE_COMMANDS ON)
set(CMAKE_CXX_STANDARD 17)
# set exec names # set exec names
set(AppExec enzoGui) set(AppExec enzoGui)
set(TestExec tests) set(TestExec tests)

View File

@@ -3,6 +3,7 @@
#include "gui/network/SocketGraphic.h" #include "gui/network/SocketGraphic.h"
#include <iostream> #include <iostream>
#include <qgraphicsitem.h> #include <qgraphicsitem.h>
#include <algorithm>
FloatingEdgeGraphic::FloatingEdgeGraphic(SocketGraphic* socket1, QGraphicsItem *parent) FloatingEdgeGraphic::FloatingEdgeGraphic(SocketGraphic* socket1, QGraphicsItem *parent)
: QGraphicsItem(parent), socket1_{socket1} : QGraphicsItem(parent), socket1_{socket1}
@@ -29,7 +30,19 @@ void FloatingEdgeGraphic::paint(QPainter *painter, const QStyleOptionGraphicsIte
pen.setCapStyle(Qt::RoundCap); pen.setCapStyle(Qt::RoundCap);
painter->setPen(pen); 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);
} }

View File

@@ -76,16 +76,17 @@ void Network::resizeEvent(QResizeEvent *event)
void Network::deleteEdge(QGraphicsItem* edge) void Network::deleteEdge(QGraphicsItem* edge)
{ {
std::cout << "----\ndeleting edge\n"; std::cout << "----\ndeleting edge\n";
if(!edge) return;
if(prevHoverItem_==edge) if(prevHoverItem_==edge)
{ {
prevHoverItem_=nullptr; prevHoverItem_=nullptr;
} }
scene_->removeItem(edge); // scene_->removeItem(edge);
scene_->update(); // scene_->update();
view_->update(); // view_->update();
// NOTE: deleting edge kept giving me segmentation faults // NOTE: deleting edge kept giving me segmentation faults
// I coundn't figure it out so I'm just leaving it for now // 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"; std::cout << "finished deleting edge\n----\n";
} }

View File

@@ -3,6 +3,7 @@
#include "gui/network/SocketGraphic.h" #include "gui/network/SocketGraphic.h"
#include <iostream> #include <iostream>
#include <qgraphicsitem.h> #include <qgraphicsitem.h>
#include <QGraphicsScene>
NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent) NodeEdgeGraphic::NodeEdgeGraphic(SocketGraphic* socket1, SocketGraphic* socket2, QGraphicsItem *parent)
: QGraphicsItem(parent), socket1_{socket1}, socket2_{socket2}, defaultColor_{QColor("white")}, pen_{QPen(QColor("white"))} : 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() NodeEdgeGraphic::~NodeEdgeGraphic()
{ {
std::cout << "edge destructor\n"; std::cout << "edge destructor\n";
scene()->removeItem(this);
socket1_->removeEdge(this); socket1_->removeEdge(this);
socket2_->removeEdge(this); socket2_->removeEdge(this);
} }