carson-katri / geometry-script

A scripting API for Blender's Geometry Nodes
https://carson-katri.github.io/geometry-script/
GNU General Public License v3.0
255 stars 25 forks source link

Input options #46

Open rsaccon opened 10 months ago

rsaccon commented 10 months ago

Currently Geometry Scripts supports default values for the args in the tree function. This PR allows to use alternatively an InputOption based object instead, which supports all relevant options from the Geometry Node Editor / Group / Inputs options panel. Currently supported are: IntOptions, FloatOptions and VectorOptions.

Example usage:

def test_all_float_options(value: Float = FloatOptions(
    default=3.0,
    min=0.0,
    max=5.0,
    subtype=SubtypeFloat.DISTANCE,
    name='My custom name',
    tooltip='My description'
): pass

def test_some_int_options(value: Int = IntOptions(
    default=3,
    min=0,
    max=5,
    subtype=SubtypeInt.PERCENTAGE,
): pass

def test_some_vector_options(value: Vector = VectorOptions(
    default_x=0.5,      #  see
    default_y=1.0,      #  explanation
    default_z=1.5,      #  below
    min=0.3,
    max=8.5,
    subtype=SubtypeVector.TRANSLATION
): pass

For the vector default value, it was not possible to use tuple or [], because a typing definition like:

default: {float, float, float} | None = None

is not supported by the Python typing system.

The subtype option I only managed to set by using an operator (which needs a specific context). That means running the geometry script containing subtype options has to be done in the same blender workspace as the Geometry Node Editor. That means running a script in default Blender setup with Text Editor in the scripting workspace, any subtype options will be silently ignored.

TODO: