Source code for arcade.draw.point

import array

from arcade.types import Color, Point2List, RGBOrA255
from arcade.types.rect import XYWH
from arcade.window_commands import get_window

from .rect import draw_rect_filled


[docs] def draw_point(x: float, y: float, color: RGBOrA255, size: float = 1.0) -> None: """Draw a 2D point at ``(x, y)`` as a square ``size`` pixels wide. The square will be centered on ``(x, y)`` with the given ``color`` as its fill value. To draw more rounded shapes, please see: * :py:func:`arcade.draw.circle.draw_circle_filled` * :py:func:`pyglet.shapes.Circle` Args: x: The center of the square along the x axis. y: The center of the square along the y axis. color: The fill color of the square as an RGBA :py:class:`tuple`, RGB py:class:`tuple`, or a :py:class:`.Color` instance. size: The width and height of the square in pixels. """ draw_rect_filled(XYWH(x, y, size, size), color)
[docs] def draw_points(point_list: Point2List, color: RGBOrA255, size: float = 1.0) -> None: """Draw 2D points as squares ``size`` pixels wide. Each point in ``point_list`` will be drawn centered on its x and y value with the same ``color`` and square ``size`` in pixels. To draw more rounded shapes, please see: * :py:func:`arcade.draw.circle.draw_circle_filled` * :py:func:`pyglet.shapes.Circle` Args: point_list: A :py:class:`list` or :py:class:`tuple` of 2D points. color: The fill color for the points as an RGBA :py:class:`tuple`, RGB :py:class:`tuple`, or :py:class:`.Color` instance. size: The width and height of each point's square in pixels. """ # Fails immediately if we don't have a window or context window = get_window() ctx = window.ctx program = ctx.shape_rectangle_filled_unbuffered_program # type: ignore geometry = ctx.shape_rectangle_filled_unbuffered_geometry buffer = ctx.shape_rectangle_filled_unbuffered_buffer # type: ignore # Validate & normalize to a pass the shader an RGBA float uniform color_normalized = Color.from_iterable(color).normalized # Get # of points and translate Python tuples to a C-style array num_points = len(point_list) point_array = array.array("f", (v for point in point_list for v in point)) # Resize buffer data_size = num_points * 8 # if data_size > buffer.size: buffer.orphan(size=data_size) ctx.enable(ctx.BLEND) # Pass data to shader program["color"] = color_normalized program["shape"] = size, size, 0 buffer.write(data=point_array) # Only render the # of points we have complete data for geometry.render(program, mode=ctx.POINTS, vertices=data_size // 8) ctx.disable(ctx.BLEND)