Skip to content
Snippets Groups Projects
Commit 4e12e91a authored by Martin's avatar Martin
Browse files

made progress, the lines are not cooperating but there seems to be scaling...

made progress, the lines are not cooperating but there seems to be scaling factor misplacing all lines
parent 06b79720
No related branches found
No related tags found
No related merge requests found
Pipeline #134589 failed
......@@ -3,7 +3,7 @@ import math
from qtpy import QtCore
from qtpy.QtCore import QPoint, QPointF, QRectF, Qt
from qtpy.QtGui import QCursor, QPainter
from qtpy.QtGui import QCursor, QPainter, QPen
from qtpy.QtWidgets import QGraphicsLineItem, QGraphicsSceneMouseEvent, QGraphicsWidget
from simudator.gui.color_scheme import ColorScheme
......@@ -44,7 +44,7 @@ class SignalGraphicsItem(QGraphicsWidget):
self.points: list[QPointF] = []
self.lines = []
self.line_segments: list[LineSegment] = []
self._line_segments: list[LineSegment] = []
# Variables and flags for handling mouse events
self.left_click = False
......@@ -57,34 +57,40 @@ class SignalGraphicsItem(QGraphicsWidget):
# |---- port
# |
# port -----|
start_point = self.start_port.getPoint()
end_point = self.end_port.getPoint()
self.points.append(start_point)
half_x = (start_point.x() + end_point.x()) / 2
self.points.append(QPointF(half_x, start_point.y()))
self.points.append(QPointF(half_x, end_point.y()))
self.points.append(end_point)
self.drawSignal()
self._init_line_points(start_point, end_point)
# local_start = self.mapFromItem(start_port, start_point)
# local_end = self.mapFromItem(end_port, end_point)
local_start = self.mapFromScene(start_point)
local_end = self.mapFromScene(end_point)
self.line_segments.append(LineSegment(local_start, local_end, self))
"""
self.line_segments.append(
LineSegment(
QPointF(half_x, start_point.y()), QPointF(half_x, end_point.y()), self
)
)
self.line_segments.append(
LineSegment(QPointF(half_x, end_point.y()), end_point, self)
)"""
self._init_line_points(start_point, end_point)
self.drawSignal()
# Used to lock layout
self.is_locked = False
def _init_line_points(self, start_point: QPointF, end_point: QPointF) -> None:
""" """
# TODO: work on self._points
# |---- port
# |
# port -----|
half_x = (start_point.x() + end_point.x()) / 2
self.points: list[QPointF] = []
self.points.append(start_point)
self.points.append(QPointF(half_x, start_point.y()))
self.points.append(QPointF(half_x, end_point.y()))
self.points.append(end_point)
def reset(self) -> None:
"""
Reset the visual representation of the signal to what it looked
......@@ -121,14 +127,17 @@ class SignalGraphicsItem(QGraphicsWidget):
to another segment at its end points, except for the two end segments
which are connected to module ports.
"""
for line in self.line_segments:
line.paint(QPainter(), None, None)
return
# Remove old lines from the GUI
while self.lines:
item = self.lines.pop()
item.setParentItem(None)
# Remove old lines form the GUI
while self._line_segments:
item = self._line_segments.pop()
item.setParentItem(None)
# Draw lines from the first to the second point, from the second
# to the third point and so on
prev_point = self.points[0]
......@@ -139,9 +148,11 @@ class SignalGraphicsItem(QGraphicsWidget):
y1 = prev_point.y()
x2 = point.x()
y2 = point.y()
line = QGraphicsLineItem(x1, y1, x2, y2, self)
line.setPen(ColorScheme.Signal)
self.lines.append(line)
# line = QGraphicsLineItem(x1, y1, x2, y2, self)
# line.setPen(ColorScheme.Signal)
segment = LineSegment(prev_point, point, self)
self._line_segments.append(segment)
# self.lines.append(line)
prev_point = point
def splitLine(self, start_point_index: int, end_point_index: int) -> None:
......@@ -205,7 +216,7 @@ class SignalGraphicsItem(QGraphicsWidget):
event.ignore()
# Save whether the pressed line segment is vertical or horisontal
# for convenience288.5
# for convenience
if line_start.x() == line_end.x():
self.last_line_vertical = True
elif line_start.y() == line_end.y():
......@@ -464,29 +475,50 @@ class LineSegment(QGraphicsWidget):
self, start_pos: QPointF, end_pos: QPointF, parent: SignalGraphicsItem
):
super().__init__(parent)
start_pos = self.mapFromItem(parent, start_pos)
end_pos = self.mapFromItem(parent, end_pos)
self._parent = parent
self._start_pos = start_pos
self._end_pos = end_pos
# Vertical line
if self._start_pos.x() == self._end_pos.x():
x = self._start_pos.x()
y = min(self._start_pos.y(), self._end_pos.y())
w = 10
h = max(self._start_pos.y(), self._end_pos.y()) - y
self._calc_area(start_pos, end_pos)
# Horizontal line
else:
x = min(self._start_pos.x(), self._end_pos.x())
y = self._start_pos.y()
w = max(self._start_pos.y(), self._end_pos.y()) - x
h = 10
def _calc_area(self, start_pos: QPointF, end_pos: QPointF):
# start_pos = self.mapFromScene(start_pos)
# end_pos = self.mapFromScene(end_pos)
self._start_pos = start_pos
self._end_pos = end_pos
top_left = QPointF(
min(self._start_pos.x(), self._end_pos.x()),
min(self._start_pos.y(), self._end_pos.y()),
)
width = max(self._start_pos.x(), self._end_pos.x()) - top_left.x()
height = max(self._start_pos.y(), self._end_pos.y()) - top_left.y()
self.setGeometry(top_left.x() - 5, top_left.y() - 5, width + 10, height + 10)
self.setGeometry(x, y, w, h)
def update_position(self, start_pos: QPointF, end_pos: QPointF):
self._calc_area(start_pos, end_pos)
def paint(self, painter: QPainter, option, widget):
painter.drawLine(self._start_pos, self._end_pos)
painter.setPen(QPen(QtCore.Qt.red))
painter.drawRect(self.boundingRect())
def boundingRect(self):
return self.geometry()
def mouseReleaseEvent(self, event: QGraphicsSceneMouseEvent) -> None:
"""
Calls the functions 'handleLeftClick' or 'handleRightClick' if
the user left or right clicked.
"""
print(123)
return
if event.button() == Qt.MouseButton.LeftButton:
self.handleLeftClick()
elif event.button() == Qt.MouseButton.RightButton:
self.handleRightClick()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment