kopia lustrzana https://github.com/carson-katri/geometry-script
Added min / max option for numeric input values
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]): passpull/46/head
rodzic
6952ec507a
commit
a1aac89c19
|
@ -117,6 +117,10 @@ def tree(name):
|
||||||
node_input = node_group.inputs.new(arg[1][0].socket_type, input_name)
|
node_input = node_group.inputs.new(arg[1][0].socket_type, input_name)
|
||||||
if arg[1][1] != inspect.Parameter.empty:
|
if arg[1][1] != inspect.Parameter.empty:
|
||||||
node_input.default_value = arg[1][1]
|
node_input.default_value = arg[1][1]
|
||||||
|
if hasattr(arg[1][0], 'min_value'):
|
||||||
|
node_input.min_value = arg[1][0].min_value
|
||||||
|
if hasattr(arg[1][0], 'max_value'):
|
||||||
|
node_input.max_value = arg[1][0].max_value
|
||||||
if arg[1][2] is not None:
|
if arg[1][2] is not None:
|
||||||
if arg[1][2] not in builder_inputs:
|
if arg[1][2] not in builder_inputs:
|
||||||
builder_inputs[arg[1][2]] = signature.parameters[arg[1][2]].annotation()
|
builder_inputs[arg[1][2]] = signature.parameters[arg[1][2]].annotation()
|
||||||
|
|
25
api/types.py
25
api/types.py
|
@ -6,6 +6,9 @@ from .state import State
|
||||||
from .static.sample_mode import SampleMode
|
from .static.sample_mode import SampleMode
|
||||||
import geometry_script
|
import geometry_script
|
||||||
|
|
||||||
|
INT_MIN = -2147483648
|
||||||
|
INT_MAX = 2147483647
|
||||||
|
|
||||||
def map_case_name(i):
|
def map_case_name(i):
|
||||||
return ('_' if not i.identifier[0].isalpha() else '') + i.identifier.replace(' ', '_').upper()
|
return ('_' if not i.identifier[0].isalpha() else '') + i.identifier.replace(' ', '_').upper()
|
||||||
|
|
||||||
|
@ -32,11 +35,23 @@ def socket_class_to_data_type(socket_class_name):
|
||||||
# The base class all exposed socket types conform to.
|
# The base class all exposed socket types conform to.
|
||||||
class _TypeMeta(type):
|
class _TypeMeta(type):
|
||||||
def __getitem__(self, args):
|
def __getitem__(self, args):
|
||||||
for s in filter(lambda x: isinstance(x, slice), args):
|
if isinstance(args, int):
|
||||||
if (isinstance(s.start, float) or isinstance(s.start, int)) and (isinstance(s.stop, float) or isinstance(s.stop, int)):
|
setattr(self, 'min_value', args)
|
||||||
print(f"minmax: ({s.start}, {s.stop})")
|
setattr(self, 'max_value', INT_MAX)
|
||||||
elif isinstance(s.start, str):
|
elif isinstance(args, float):
|
||||||
print(f"{s.start} = {s.stop}")
|
setattr(self, 'min_value', args)
|
||||||
|
setattr(self, 'max_value', float('inf'))
|
||||||
|
elif isinstance(args, tuple):
|
||||||
|
if isinstance(args[0], int) or isinstance(args[0], float):
|
||||||
|
setattr(self, 'min_value', args[0])
|
||||||
|
if len(args) > 1 and (isinstance(args[1], int) or isinstance(args[1], float)):
|
||||||
|
setattr(self, 'max_value', args[1])
|
||||||
|
elif isinstance(args, slice):
|
||||||
|
if isinstance(args.start, int) or isinstance(args.start, float):
|
||||||
|
setattr(self, 'min_value', args.start)
|
||||||
|
if isinstance(args.stop, int) or isinstance(args.stop, float):
|
||||||
|
setattr(self, 'max_value', args.stop)
|
||||||
|
|
||||||
return self
|
return self
|
||||||
|
|
||||||
class Type(metaclass=_TypeMeta):
|
class Type(metaclass=_TypeMeta):
|
||||||
|
|
Ładowanie…
Reference in New Issue