def ellipse(self, x, y, rx, ry, color): """楕円を描画します. Parameters ---------- x : int 楕円の左上のx座標. y : int 楕円の左上のy座標. rx : int 描画される楕円の幅 ry : int 描画される楕円の高さ color : tuple of int 描画に使用される色を指定します. """ return gfx.ellipse(self.pg.screen, x, y, rx, ry, color)
def _draw(self, deco: List[Tuple[int, str, Any]], surface: 'pygame.Surface') -> None: """ Draw. :param deco: Decoration list :param surface: Pygame surface :return: None """ if len(deco) == 0: return rect = self._obj.get_rect() for d in deco: dtype, decoid, data = d if not self._decor_enabled[decoid]: continue if dtype == DECORATION_POLYGON: points, color, filled, width, gfx, kwargs = data points = self._update_pos_list(rect, decoid, points, **kwargs) if gfx: if filled: gfxdraw.filled_polygon(surface, points, color) else: gfxdraw.polygon(surface, points, color) else: pydraw.polygon(surface, color, points, width) elif dtype == DECORATION_CIRCLE: points, r, color, filled, width, gfx, kwargs = data points = self._update_pos_list(rect, decoid, points, **kwargs) x, y = points[0] if filled: if gfx: gfxdraw.filled_circle(surface, x, y, r, color) else: pydraw.circle(surface, color, (x, y), r) else: pydraw.circle(surface, color, (x, y), r, width) elif dtype == DECORATION_SURFACE or dtype == DECORATION_BASEIMAGE or dtype == DECORATION_TEXT: pos, surf, centered, kwargs = data if isinstance(surf, pygame_menu.BaseImage): surf = surf.get_surface(new=False) pos = self._update_pos_list(rect, decoid, pos, **kwargs)[0] surfrect = surf.get_rect() surfrect.x += pos[0] surfrect.y += pos[1] if centered: surfrect.x -= surfrect.width / 2 surfrect.y -= surfrect.height / 2 surface.blit(surf, surfrect) elif dtype == DECORATION_ELLIPSE: pos, rx, ry, color, filled, kwargs = data pos = self._update_pos_list(rect, decoid, pos, **kwargs)[0] if filled: gfxdraw.filled_ellipse(surface, pos[0], pos[1], rx, ry, color) else: gfxdraw.ellipse(surface, pos[0], pos[1], rx, ry, color) elif dtype == DECORATION_CALLABLE: data(surface, self._obj) elif dtype == DECORATION_CALLABLE_NO_ARGS: data() elif dtype == DECORATION_TEXTURE_POLYGON: pos, texture, tx, ty, kwargs = data pos = self._update_pos_list(rect, decoid, pos, **kwargs) if isinstance(texture, pygame_menu.BaseImage): texture = texture.get_surface() gfxdraw.textured_polygon(surface, pos, texture, tx, ty) elif dtype == DECORATION_ARC: points, r, ia, fa, color, width, gfx, kwargs = data points = self._update_pos_list(rect, decoid, points, **kwargs) x, y = points[0] rectarc = pygame.Rect(x - r, y - r, x + 2 * r, y + 2 * r) if gfx: gfxdraw.arc(surface, x, y, r, ia, fa, color) else: pydraw.arc(surface, color, rectarc, ia / (2 * pi), fa / (2 * pi), width) elif dtype == DECORATION_PIE: points, r, ia, fa, color, kwargs = data points = self._update_pos_list(rect, decoid, points, **kwargs) x, y = points[0] gfxdraw.pie(surface, x, y, r, ia, fa, color) elif dtype == DECORATION_BEZIER: points, color, steps, kwargs = data points = self._update_pos_list(rect, decoid, points, **kwargs) gfxdraw.bezier(surface, points, steps, color) elif dtype == DECORATION_RECT: drect: 'pygame.Rect' pos, drect, color, width, kwargs = data pos = self._update_pos_list(rect, decoid, pos, **kwargs)[0] drect = drect.copy() drect.x += pos[0] drect.y += pos[1] pygame.draw.rect(surface, color, drect, width) elif dtype == DECORATION_PIXEL: pos, color, kwargs = data pos = self._update_pos_list(rect, decoid, pos, **kwargs)[0] gfxdraw.pixel(surface, pos[0], pos[1], color) elif dtype == DECORATION_LINE: pos, color, width, kwargs = data pos = self._update_pos_list(rect, decoid, pos, **kwargs) pydraw.line(surface, color, pos[0], pos[1], width) else: raise ValueError('unknown decoration type')
werkzeug = 2 if event.key == pygame.K_3: werkzeug = 3 if event.type == pygame.KEYUP: print("stop") x = 0 for event in pygame.mouse.get_pressed(): if x == 0 and event == 1: start = pygame.mouse.get_pos() if x == 1 and event == 1: end = pygame.mouse.get_pos() if x == 2 and event == 1: color = (random.randrange(50, 250, 10), random.randrange(50, 250, 10), random.randrange(50, 250, 10)) x += 1 if werkzeug == 0: pygame.draw.line(fenster, color, start, pygame.mouse.get_pos()) if werkzeug == 1: gfx.box(fenster, (start, end), color) if werkzeug == 2: werte = start + end gfx.ellipse(fenster, werte[0], werte[1], werte[2], werte[3], color) if werkzeug == 3: pygame.draw.line(fenster, color, start, end) pygame.display.update() #print(pygame.mouse.get_pos())