From 27d7ffe4bf1912ea74938378b8ca9dc2dbdb9a43 Mon Sep 17 00:00:00 2001 From: david-ajax Date: Sun, 6 Apr 2025 23:26:26 +0800 Subject: [PATCH] Incomplete improvement (Anchor object) --- pulsar/main.py | 21 +++--- vgl/__init__.py | 2 +- vgl/__pycache__/__init__.cpython-312.pyc | Bin 0 -> 448 bytes .../basic_elements.cpython-312.pyc | Bin 0 -> 7328 bytes vgl/__pycache__/main.cpython-312.pyc | Bin 0 -> 12056 bytes vgl/basic_elements.py | 3 + vgl/main.py | 66 ++++++++++++++++++ 7 files changed, 81 insertions(+), 11 deletions(-) create mode 100644 vgl/__pycache__/__init__.cpython-312.pyc create mode 100644 vgl/__pycache__/basic_elements.cpython-312.pyc create mode 100644 vgl/__pycache__/main.cpython-312.pyc diff --git a/pulsar/main.py b/pulsar/main.py index ac159ec..cbd8b7d 100644 --- a/pulsar/main.py +++ b/pulsar/main.py @@ -9,19 +9,21 @@ def horizontal_indicator(): vgl.elements.Line(ends=[(0.4, 0.5), (0.6, 0.5)], color="green").attach(frame_object=frame) pass -@window.observerize -def observer(info): - if info["delta"] == "key": - print(info) - pass - def marking_lines(): global window frame = vgl.Frame().attach(window_object=window, poscale=(0,0), clone_name="Marking Line") + lines = list() for i in range(0, 24): - vgl.elements.Line(ends=[(0, i/24), (1, i/24)], color="green").attach(frame_object=frame) + lines.append(vgl.elements.Line(ends=[(0, i/24), (1, i/24)], color="green").attach(frame_object=frame)) for i in range(0, 32): - vgl.elements.Line(ends=[(i/32, 0), (i/32, 1)], color="green").attach(frame_object=frame) + lines.append(vgl.elements.Line(ends=[(i/32, 0), (i/32, 1)], color="green").attach(frame_object=frame)) + @window.observerize + def observer(info): + if info["delta"] == "key": + print(info) + for i in lines: + i.set_color('#' + str((info['cursor']['position'][0] + info['cursor']['position'][1]*100 + info['cursor']['position'][0]*10000) % 999999).zfill(6)) + observer() def console(): print("You've entered Pulsar's command console, an embbedded Python interpreter for debugging & testing") @@ -32,14 +34,13 @@ def console(): return exec(i) except: - print("An error caused & captured") + print("An error occured & captured") if __name__ == '__main__': print("Welcome to AiraPulsar Client") window.start() horizontal_indicator() marking_lines() - observer() console() input("任意键以退出") window.kill() diff --git a/vgl/__init__.py b/vgl/__init__.py index 779214e..7391c49 100644 --- a/vgl/__init__.py +++ b/vgl/__init__.py @@ -3,5 +3,5 @@ os.environ["PYGAME_HIDE_SUPPORT_PROMPT"] = "True" from .main import * from . import basic_elements as elements -version = '0.2.0' +version = '0.3.0' print(f"Powered by Vector Graphic Layer, version {version}") \ No newline at end of file diff --git a/vgl/__pycache__/__init__.cpython-312.pyc b/vgl/__pycache__/__init__.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8168771e5271141526eabc73e9d6dc6b00a01b80 GIT binary patch literal 448 zcmYLEJxc>Y5S_i;<<5xWN2S$uCMvmTVPg;kg9?5eF$$(RF4-m7a35hWiN-2c{sas0 z2Z#v%48bNAg02dJRSH2#XXTzraEf{F!Mry!_ah@Q5H{ebUVfat;_U zav%>_B2bYAL;r{)X(6zT6-T;}P{^WA#Fg`k;A%c90a39=q8D%}U89~4K@%m0I-%I% za*ovrpEeKISGP0P#^zea+S@nH-E7V>v%A}7t`oWvh@)B2MhkX8ixzQ+OT1ceqNI|G z$<#^0^p6N5ST8j715&K{OkZbqwM>ipmfa+5UT+Wea5G8(#afWR!iE7QUZ-yr@T8*i!4 VptQAx+nL*`c69j>(rirFegUsndguTE literal 0 HcmV?d00001 diff --git a/vgl/__pycache__/basic_elements.cpython-312.pyc b/vgl/__pycache__/basic_elements.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..8189dedc412079c7515f8b35c1ff302ef0360d60 GIT binary patch literal 7328 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 P_K*k3hT8%Vwy6IAM{Ygf literal 0 HcmV?d00001 diff --git a/vgl/__pycache__/main.cpython-312.pyc b/vgl/__pycache__/main.cpython-312.pyc new file mode 100644 index 0000000000000000000000000000000000000000..e2649c03ce03d7bdc81f504bee40a654e667dc59 GIT binary patch literal 12056 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 literal 0 HcmV?d00001 diff --git a/vgl/basic_elements.py b/vgl/basic_elements.py index 9693dc9..b4d4a65 100644 --- a/vgl/basic_elements.py +++ b/vgl/basic_elements.py @@ -1,10 +1,13 @@ from vgl.main import * import pygame import time + class Line(Element): def __init__(self, ends = [(0.1, 0.1), (0.2, 0.2)], color = "#ffffff"): self.color = color self.ends = ends + def set_color(self, new_color): + self.color = new_color def move(self, delta, duration): self.add_task(group = "move", start_time = Aux.gettime(), duration = duration, delta = delta) def update(self): diff --git a/vgl/main.py b/vgl/main.py index 52db9cb..7d803c6 100644 --- a/vgl/main.py +++ b/vgl/main.py @@ -87,6 +87,72 @@ class Aux(): #print("不重要事件") return 0 return 1 +class Anchor(object): + """ + "锚定点" 对象 + """ + poscale = (0, 0) + fixed = 3 + def __init__(self, *args): + if isinstance(args[0], tuple) or isinstance(args[0], Anchor): + if isinstance(args[0], Anchor): + self.poscale = args[0].poscale + else: + self.poscale = args[0] + else: + self.poscale = (args[0], args[1]) + def x(self): + return self.poscale[0] + def y(self): + return self.poscale[1] + def __add__(self, other): + if isinstance(other, tuple): + return Anchor((self.poscale[0] + other[0], self.poscale[1] + other[1])) + elif isinstance(other, Anchor): + return Anchor((self.poscale[0] + other.poscale[0], self.poscale[1] + other.poscale[1])) + else: + raise TypeError("不支持的加法操作数类型") + def __mul__(self, other): + "向屏幕中心倍增/倍缩" + if isinstance(other, tuple): + return Anchor((0.5 + other[0] * (self.poscale[0] - 0.5), 0.5 + other[1] * (self.poscale[1] - 0.5))) + elif isinstance(other, (int, float)): + return Anchor((0.5 + other * (self.poscale[0] - 0.5), 0.5 + other * (self.poscale[1] - 0.5))) + else: + raise TypeError("不支持的乘法操作数类型") + def __imul__(self, other): + result = self.__mul__(other) + self.poscale = result.poscale + return self + def __truediv__(self, other): + "乘以倒数" + if isinstance(other, (int, float)): + if other == 0: + return Anchor((0.5, 0.5)) + else: + return self.__mul__(1 / other) + elif isinstance(other, Anchor) or isinstance(other, tuple): + divisor_x = other[0] if isinstance(other, tuple) else other.x() + divisor_y = other[1] if isinstance(other, tuple) else other.y() + # TODO: 错误代码, 应当予以修正 + if divisor_x == 0 and divisor_y == 0: + return Anchor((0.5, 0.5)) + if divisor_x == 0 and divisor_y == 0: + return Anchor((0.5, 0.5)) + else: + return self.__mul__((1 / divisor_x, 1 / divisor_y)) + else: + raise TypeError("不支持的除法操作数类型") + def __itruediv__(self, other): + "就地除法" + result = self.__truediv__(other) + self.poscale = result.poscale + return self + def __str__(self): + if self.fixed is not None: + return f"({round(self.poscale[0], self.fixed)}, {round(self.poscale[1], self.fixed)})" + else: + return f"({self.poscale[0]}, {self.poscale[1]})" class Element(object): is_hide = False is_template = True