diff --git a/api/node_mapper.py b/api/node_mapper.py index 891e55d..531283e 100644 --- a/api/node_mapper.py +++ b/api/node_mapper.py @@ -30,6 +30,8 @@ def build_node(node_type): value = value.value setattr(node, prop.identifier, value) for node_input in (node.inputs[1:] if _primary_arg is not None else node.inputs): + if not node_input.enabled: + continue argname = node_input.name.lower().replace(' ', '_') all_with_name = [] for node_input2 in (node.inputs[1:] if _primary_arg is not None else node.inputs): diff --git a/api/static/expression.py b/api/static/expression.py new file mode 100644 index 0000000..28591f2 --- /dev/null +++ b/api/static/expression.py @@ -0,0 +1,6 @@ +def scripted_expression(scripted_expression: str) -> 'Type': + from geometry_script import Type, State + value_node = State.current_node_tree.nodes.new('ShaderNodeValue') + fcurve = value_node.outputs[0].driver_add("default_value") + fcurve.driver.expression = scripted_expression + return Type(value_node.outputs[0]) \ No newline at end of file diff --git a/api/tree.py b/api/tree.py index dbdbeec..73eb4ee 100644 --- a/api/tree.py +++ b/api/tree.py @@ -8,6 +8,7 @@ from .state import State from .types import * from .node_mapper import * from .static.input_group import * +from .static.expression import * def _as_iterable(x): try: diff --git a/api/types.py b/api/types.py index e477816..576c169 100644 --- a/api/types.py +++ b/api/types.py @@ -38,6 +38,8 @@ class Type(metaclass=_TypeMeta): tuple: ('FunctionNodeInputVector', 'vector'), float: ('ShaderNodeValue', None), } + if type(value) == int: + print("Making an integer node?") if not type(value) in input_nodes: raise Exception(f"'{value}' cannot be expressed as a node.") input_node_info = input_nodes[type(value)] diff --git a/book/src/SUMMARY.md b/book/src/SUMMARY.md index bfe0e83..7c920bf 100644 --- a/book/src/SUMMARY.md +++ b/book/src/SUMMARY.md @@ -21,6 +21,7 @@ - [Input Groups](./api/advanced-scripting/input-groups.md) - [Attributes](./api/advanced-scripting/attributes.md) - [Boolean Math](./api/advanced-scripting/boolean-math.md) + - [Drivers](./api/advanced-scripting/drivers.md) # Tutorials diff --git a/book/src/api/advanced-scripting/drivers.md b/book/src/api/advanced-scripting/drivers.md new file mode 100644 index 0000000..8d2151a --- /dev/null +++ b/book/src/api/advanced-scripting/drivers.md @@ -0,0 +1,10 @@ +# Drivers + +Drivers can be used with geometry nodes. To create a scripted expression driver, use the `scripted_expression` convenience function. + +This can be used to get information like the current frame number in a Geometry Script. + +```python +frame_number = scripted_expression("frame") +frame_number_doubled = scripted_expression("frame * 2") +``` \ No newline at end of file