Compare commits

...

2 Commits

Author SHA1 Message Date
f35b1c5d0b connect patterns with single link
All checks were successful
CI/CD / wol (push) Successful in 0s
CI/CD / build (push) Successful in 14s
2025-09-12 23:05:28 +02:00
5a3b637582 switch CI to uv
All checks were successful
CI/CD / wol (push) Successful in 0s
CI/CD / build (push) Successful in 35s
2025-09-12 22:20:29 +02:00
4 changed files with 48 additions and 17 deletions

View File

@@ -16,17 +16,19 @@ jobs:
sleep 5 sleep 5
done done
build: build:
runs-on: ubuntu-latest runs-on: galactica
steps: steps:
- uses: actions/checkout@v4 - uses: actions/checkout@v4
- name: Set up Python - name: Set up Python 3.12
uses: actions/setup-python@v5 uses: actions/setup-python@v4
with: with:
python-version: '3.12' python-version: "3.12"
cache: 'pip' - name: Install uv
- run: pip install -r requirements.txt uses: astral-sh/setup-uv@v5
- name: Set up Python
run: uv python install
- name: Install the code linting and formatting tool Ruff - name: Install the code linting and formatting tool Ruff
run: pip install ruff run: uv build
- name: Lint code with Ruff - name: Lint code with Ruff
run: ruff check --output-format=github --target-version=py39 run: ruff check --output-format=github --target-version=py39
- name: Check code formatting with Ruff - name: Check code formatting with Ruff

View File

@@ -2,9 +2,8 @@ import math
from typing import List, Tuple from typing import List, Tuple
from PySide6.QtCore import Qt
from PySide6.QtGui import QBrush, QPainter from PySide6.QtGui import QPainter
from PySide6.QtWidgets import QGraphicsItemGroup from PySide6.QtWidgets import QGraphicsItemGroup
from PySide6.QtWidgets import ( from PySide6.QtWidgets import (
@@ -16,6 +15,7 @@ from grid.ui.items import (
HPSphereGraphicsItem, HPSphereGraphicsItem,
ArcGraphicsItem, ArcGraphicsItem,
LineGraphicsItem, LineGraphicsItem,
SphereGraphicsItem,
random_sphere_factory, random_sphere_factory,
) )
@@ -31,6 +31,26 @@ class Pattern(QGraphicsItemGroup):
# center coordinates of the pattern # center coordinates of the pattern
self.center_x = top_left_corner_x + int(self.PATTERN_WIDTH / 2) self.center_x = top_left_corner_x + int(self.PATTERN_WIDTH / 2)
self.center_y = top_left_corner_y + int(self.PATTERN_WIDTH / 2) self.center_y = top_left_corner_y + int(self.PATTERN_WIDTH / 2)
self.external_connectors: List[SphereGraphicsItem] = []
def get_external_connectors(self) -> List[SphereGraphicsItem]:
"""Candidate spheres to connect with other patterns.
Returns:
List[SphereGraphicsItem]: List of spheres
"""
return self.external_connectors
def connect(self, other: "Pattern") -> None:
s1 = self.external_connectors[0]
s2 = other.external_connectors[1]
line_start_x = s1.x_pos + s1.SPHERE_WIDTH / 2
line_start_y = s1.y_pos + s1.SPHERE_WIDTH / 2
line_end_x = s2.x_pos + s2.SPHERE_WIDTH / 2
line_end_y = s2.y_pos + s2.SPHERE_WIDTH / 2
self.addToGroup(
LineGraphicsItem(line_start_x, line_start_y, line_end_x, line_end_y, self)
)
def paint( def paint(
self, self,
@@ -39,8 +59,8 @@ class Pattern(QGraphicsItemGroup):
widget: QWidget | None = ..., widget: QWidget | None = ...,
): ):
super().paint(painter, option, widget) super().paint(painter, option, widget)
brush = QBrush(Qt.GlobalColor.gray) # brush = QBrush(Qt.GlobalColor.gray)
painter.setBrush(brush) # painter.setBrush(brush)
painter.drawRect( painter.drawRect(
self.top_left_corner_x, self.top_left_corner_x,
self.top_left_corner_y, self.top_left_corner_y,
@@ -143,7 +163,9 @@ class LargeUltimaPattern(Pattern):
) )
) )
for x, y in points: for x, y in points:
self.addToGroup(random_sphere_factory(x, y)) external_sphere = random_sphere_factory(x, y)
self.addToGroup(external_sphere)
self.external_connectors.append(external_sphere)
# self.addToGroup( # self.addToGroup(
# ArcGraphicsItem( # ArcGraphicsItem(
# self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE * 2, 0, 90, self # self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE * 2, 0, 90, self
@@ -178,15 +200,21 @@ class SmallZPattern(Pattern):
self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE, sphere_on_circle self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE, sphere_on_circle
) )
self.addToGroup( self.addToGroup(
LineGraphicsItem(self.center_x, self.center_y, points[1][0], points[1][1], self) LineGraphicsItem(
self.center_x, self.center_y, points[1][0], points[1][1], self
)
) )
self.addToGroup( self.addToGroup(
LineGraphicsItem(self.center_x, self.center_y, points[4][0], points[4][1], self) LineGraphicsItem(
self.center_x, self.center_y, points[4][0], points[4][1], self
)
) )
# Remove left and right sphere # Remove left and right sphere
del points[0] del points[0]
del points[2] del points[2]
for x, y in points: for x, y in points:
self.addToGroup(random_sphere_factory(x, y)) external_sphere = random_sphere_factory(x, y)
self.addToGroup(external_sphere)
self.external_connectors.append(external_sphere)
self.addToGroup(HPSphereGraphicsItem(self.center_x, self.center_y)) self.addToGroup(HPSphereGraphicsItem(self.center_x, self.center_y))

View File

@@ -18,7 +18,8 @@ class Window(QWidget):
self.scene = QGraphicsScene(0, 0, 400, 400) self.scene = QGraphicsScene(0, 0, 400, 400)
pp1 = LargeUltimaPattern(0, 0) pp1 = LargeUltimaPattern(0, 0)
pp2 = SmallZPattern(401, 0) pp2 = SmallZPattern(351, 0)
pp1.connect(pp2)
self.scene.addItem(pp1) self.scene.addItem(pp1)
self.scene.addItem(pp2) self.scene.addItem(pp2)

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 29 KiB