Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Input options #46

Open
wants to merge 7 commits into
base: main
Choose a base branch
from
Open

Input options #46

wants to merge 7 commits into from

Conversation

rsaccon
Copy link

@rsaccon rsaccon commented Dec 8, 2023

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:

  • if PR gets accepted, add some documentation
  • Extend the Geometry Script addon, so scripts can be run from the Geometry Nodes Editor (to avoid the possible subtype issue mentioned above). This probably makes most sense for external editing and maybe we could even go as far as integrating some ideas from the vscode-blender extension to facilitate multi-file projects with automatic reload/re-import

Usage examples

min only:
---------
def test(value: Int[0]): pass
def test(value: Float[0.0]): pass

min, max
---------
def test(value: Int[0, 1]): pass
def test(value: Float[0.0, 1.0]): pass

min, max (slice  notation)
-------------------------
def test(value: Int[0:1]): pass
def test(value: Float[0.0:1.0]): pass
a new InputObject class allows to use the following input options: min, max, name, subtype, tooltip, hide_in_modifer

setting subtype does not work (yet), only the menu label gets changed
Unfortunately the typing system cannot handle `tuple | None` so default vector needs to be defined be defining `default_x`, `default_y` and `default_z`
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant