.. SPDX-FileCopyrightText: 2021 Stephen Ruiz Ltd SPDX-FileCopyrightText: 2022 Calvin Walton SPDX-License-Identifier: MIT Usage ===== To use this library, import the :func:`perfect_freehand.get_stroke` function and pass it a list of **input points**, such as those recorded from a user's mouse movement. The ``get_stroke()`` function will return a new list of **outline points**. These outline points will form a polygon (called a "stroke") that surrounds the input points. >>> from perfect_freehand import get_stroke >>> input_points = [ ... (0, 0), ... (10, 5), ... (20, 8), ... # ... ... ] >>> outline_points = get_stroke(input_points) You can then **render** your stroke points using your technology of choice. You can **customize** the appearance of the stroke shape by passing additional keyword parameters to the ``get_stroke()`` function. The available options are described in the documentation for the :func:`perfect_freehand.get_stroke_points` and :func:`perfect_freehand.get_stroke_outline_points` functions. >>> stroke = get_stroke(my_points, size=32, thinning=0.7) The appearance of a stroke is affected by the **pressure** associated with each input point. Bu default, the ``get_stroke()`` function will simulate pressure based on the distance between input points. To use **real pressure**, such as that from a pen or stylus, provide the pressure as the third number for each input point, and set the ``simulate_pressure`` option to ``False``. >>> input_points = [ ... (0, 0, 0.5), ... (10, 5, 0.7), ... (20, 8, 0.8), ... # ... ... ] >>> outline_points = get_stroke(input_points, simulate_pressure=False) In addition to providing points as an iterable sequence type like a ``tuple`` or ``list``, you can also provide them as a ``dict`` as shown in the example below. In both cases, the value for pressure is optional (it will default to ``0.5``). >>> input_points = [ ... {'x': 0, 'y': 0, 'pressure': 0.5}, ... {'x': 10, 'y': 5, 'pressure': 0.7}, ... {'x': 20, 'y': 8, 'pressure': 0.8}, ... # ... ... ] >>> outline_points = get_stroke(input_points, simulate_pressure=False) Note that providing points in ``dict`` format introduces an extra conversion step in the ``get_stroke()`` function which will have an effect on performance.