Compare commits
4 Commits
2929064f4d
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| f35b1c5d0b | |||
| 5a3b637582 | |||
| d89c296d36 | |||
| 6902f07161 |
@@ -16,17 +16,19 @@ jobs:
|
||||
sleep 5
|
||||
done
|
||||
build:
|
||||
runs-on: ubuntu-latest
|
||||
runs-on: galactica
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
- name: Set up Python
|
||||
uses: actions/setup-python@v5
|
||||
- name: Set up Python 3.12
|
||||
uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.12'
|
||||
cache: 'pip'
|
||||
- run: pip install -r requirements.txt
|
||||
python-version: "3.12"
|
||||
- name: Install uv
|
||||
uses: astral-sh/setup-uv@v5
|
||||
- name: Set up Python
|
||||
run: uv python install
|
||||
- name: Install the code linting and formatting tool Ruff
|
||||
run: pip install ruff
|
||||
run: uv build
|
||||
- name: Lint code with Ruff
|
||||
run: ruff check --output-format=github --target-version=py39
|
||||
- name: Check code formatting with Ruff
|
||||
|
||||
@@ -60,11 +60,13 @@ class AgilitySphereGraphicsItem(SphereGraphicsItem):
|
||||
def __init__(self, x_pos: int, y_pos: int) -> None:
|
||||
super().__init__(x_pos, y_pos, Qt.GlobalColor.darkYellow)
|
||||
|
||||
|
||||
class EmptySphereGraphicsItem(SphereGraphicsItem):
|
||||
def __init__(self, x_pos: int, y_pos: int) -> None:
|
||||
self.SPHERE_WIDTH = 20
|
||||
super().__init__(x_pos, y_pos, Qt.GlobalColor.black)
|
||||
|
||||
|
||||
@staticmethod
|
||||
def random_sphere_factory(x_pos: int, y_pos: int) -> SphereGraphicsItem:
|
||||
rand = random.random()
|
||||
@@ -78,6 +80,7 @@ def random_sphere_factory(x_pos: int, y_pos: int) -> SphereGraphicsItem:
|
||||
obj = EmptySphereGraphicsItem(x_pos, y_pos)
|
||||
return obj
|
||||
|
||||
|
||||
class ArcGraphicsItem(QGraphicsItem):
|
||||
"""Circle arc."""
|
||||
|
||||
|
||||
@@ -2,9 +2,8 @@ import math
|
||||
|
||||
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 (
|
||||
@@ -16,6 +15,7 @@ from grid.ui.items import (
|
||||
HPSphereGraphicsItem,
|
||||
ArcGraphicsItem,
|
||||
LineGraphicsItem,
|
||||
SphereGraphicsItem,
|
||||
random_sphere_factory,
|
||||
)
|
||||
|
||||
@@ -31,6 +31,26 @@ class Pattern(QGraphicsItemGroup):
|
||||
# center coordinates of the pattern
|
||||
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.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(
|
||||
self,
|
||||
@@ -39,8 +59,8 @@ class Pattern(QGraphicsItemGroup):
|
||||
widget: QWidget | None = ...,
|
||||
):
|
||||
super().paint(painter, option, widget)
|
||||
brush = QBrush(Qt.GlobalColor.gray)
|
||||
painter.setBrush(brush)
|
||||
# brush = QBrush(Qt.GlobalColor.gray)
|
||||
# painter.setBrush(brush)
|
||||
painter.drawRect(
|
||||
self.top_left_corner_x,
|
||||
self.top_left_corner_y,
|
||||
@@ -143,7 +163,9 @@ class LargeUltimaPattern(Pattern):
|
||||
)
|
||||
)
|
||||
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(
|
||||
# ArcGraphicsItem(
|
||||
# self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE * 2, 0, 90, self
|
||||
@@ -161,7 +183,7 @@ class SmallZPattern(Pattern):
|
||||
|
||||
sphere_on_circle = 6
|
||||
for i in range(sphere_on_circle):
|
||||
if i == 2 or i == 3:
|
||||
if i == 2 or i == 3 or i == 5 or i == 0:
|
||||
continue
|
||||
else:
|
||||
self.addToGroup(
|
||||
@@ -177,8 +199,22 @@ class SmallZPattern(Pattern):
|
||||
points = self.generate_circle_points(
|
||||
self.center_x, self.center_y, self.SPACE_BETWEEN_SPHERE, sphere_on_circle
|
||||
)
|
||||
self.addToGroup(
|
||||
LineGraphicsItem(
|
||||
self.center_x, self.center_y, points[1][0], points[1][1], self
|
||||
)
|
||||
)
|
||||
self.addToGroup(
|
||||
LineGraphicsItem(
|
||||
self.center_x, self.center_y, points[4][0], points[4][1], self
|
||||
)
|
||||
)
|
||||
# Remove left and right sphere
|
||||
del points[0]
|
||||
del points[2]
|
||||
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))
|
||||
|
||||
@@ -1,9 +1,5 @@
|
||||
import logging
|
||||
import sys
|
||||
|
||||
from PySide6.QtGui import QPainter
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication,
|
||||
QGraphicsScene,
|
||||
QGraphicsView,
|
||||
QHBoxLayout,
|
||||
@@ -22,7 +18,8 @@ class Window(QWidget):
|
||||
self.scene = QGraphicsScene(0, 0, 400, 400)
|
||||
|
||||
pp1 = LargeUltimaPattern(0, 0)
|
||||
pp2 = SmallZPattern(401, 0)
|
||||
pp2 = SmallZPattern(351, 0)
|
||||
pp1.connect(pp2)
|
||||
self.scene.addItem(pp1)
|
||||
self.scene.addItem(pp2)
|
||||
|
||||
@@ -34,12 +31,3 @@ class Window(QWidget):
|
||||
|
||||
self.setLayout(vbox)
|
||||
self.show()
|
||||
|
||||
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||
)
|
||||
app = QApplication(sys.argv)
|
||||
w = Window()
|
||||
app.exec()
|
||||
|
||||
19
main.py
Normal file
19
main.py
Normal file
@@ -0,0 +1,19 @@
|
||||
import logging
|
||||
import sys
|
||||
|
||||
from grid.ui.window import Window
|
||||
from PySide6.QtWidgets import QApplication
|
||||
|
||||
def main():
|
||||
print("Hello from sphere-grid!")
|
||||
logging.basicConfig(
|
||||
level=logging.DEBUG,
|
||||
format="%(asctime)s - %(name)s - %(levelname)s - %(message)s",
|
||||
)
|
||||
app = QApplication(sys.argv)
|
||||
w = Window() # noqa: F841
|
||||
app.exec()
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
@@ -9,3 +9,7 @@ dependencies = [
|
||||
"pytest==8.3.3",
|
||||
"ruff==0.12.10",
|
||||
]
|
||||
|
||||
[build-system]
|
||||
requires = ["setuptools>=42"]
|
||||
build-backend = "setuptools.build_meta"
|
||||
BIN
screenshot.png
BIN
screenshot.png
Binary file not shown.
|
Before Width: | Height: | Size: 23 KiB After Width: | Height: | Size: 29 KiB |
Reference in New Issue
Block a user