ich habe ein rotiertes Rechteck, bei dem die Größe geändert wird.
Dadurch verändert sich aber auch die Position ein bisschen, das möchte ich aber nicht.
So ist es im moment: https://youtu.be/ofGYKKFGv7Q
und so soll es sein: https://youtu.be/ThvYjvCHamo (Ich habe da das center neu setzen deaktiviert, aber das soll natürlich neu gesetzt werden)
Ich glaube das liegt daran, das ich das center falsch setze, aber ich wüsste nicht, wie es richtig ist.
Das ist mein Code:
Code: Alles auswählen
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.graphics import Color, Rectangle, PushMatrix, Rotate, PopMatrix
from kivy.clock import Clock
class Canvas:
def __init__(self, root, pos, size, rotation=0, color=(1, 0, 0, 1)):
self._pos = pos
self._size = size
self._rotation = rotation
self._color = color
with root.canvas:
PushMatrix()
self._color_instruction = Color(rgba=self.color)
self._rotation_instruction = Rotate(angle=self.rotation, origin=self.center())
self._rectangle_instruction = Rectangle(pos=self.pos, size=self.size)
PopMatrix()
Clock.schedule_interval(self.step, 0)
def step(self, dt):
self.size= (self.size[0] + 5, self.size[1])
def center(self):
center_x = self.pos[0] + self.size[0]/2
center_y= self.pos[1] + self.size[1]/2
return (center_x, center_y)
@property
def pos(self):
return self._pos
@pos.setter
def pos(self, value):
self._pos = value
self._rectangle_instruction.pos = self._pos
@property
def size(self):
return self._size
@size.setter
def size(self, value):
self._size = value
self._rectangle_instruction.size = self._size
self._rotation_instruction.origin = self.center()
@property
def rotation(self):
return self._rotation
@rotation.setter
def rotation(self, value):
self._rotation = value
self._rotation_instruction.angle= self._rotation
self._rotation_instruction.origin = self.center()
@property
def color(self):
return self._color
@color.setter
def color(self, value):
self._color = value
self._color_instruction.rgba = self._color
class Root(Widget):
def __init__(self, **kwargs):
super(Root, self).__init__(**kwargs)
self.rectangle = Canvas(self, (100, 100), (100, 100), rotation=45)
class TestApp(App):
def __init__(self, **kwargs):
super(TestApp, self).__init__(**kwargs)
def build(self):
return Root()
def main():
app = TestApp()
app.run()
if __name__ == "__main__":
main()