2025-01-22 16:18:30 +01:00

71 lines
2.6 KiB
Python

from lnx.logicnode.lnx_nodes import *
import re
class MathTermNode(LnxLogicTreeNode):
"""Formula for symbolic Math"""
bl_idname = 'LNMathTermNode'
bl_label = 'Math Term'
lnx_version = 0
num_params: IntProperty(default=2, min=0)
property0: HaxeBoolProperty('property0', name='Resolve params', description='Resolve input param values/subterms for output term/transformations', default=False)
def __init__(self):
super(MathTermNode, self).__init__()
self.register_id()
def lnx_init(self, context):
# OUTPUTS:
self.add_output('LnxDynamicSocket', 'Math Term')
self.add_output('LnxDynamicSocket', 'Simplifyed')
self.add_output('LnxDynamicSocket', 'Derivate')
self.add_output('LnxFloatSocket', 'Result')
self.add_output('LnxStringSocket', 'Error')
self.add_output('LnxIntSocket', 'ErrorPos')
# INPUTS:
# HOW to setup a Tooltip here and how to put it above the param-add/remove-buttons into layout ?
self.add_input('LnxStringSocket', 'Math Term', default_value='a+b')
# two default parameters at start
self.add_input('LnxStringSocket', 'Param 0', default_value='a')
self.add_input('LnxDynamicSocket', 'Value / Term 0')
self.add_input('LnxStringSocket', 'Param 1', default_value='b')
self.add_input('LnxDynamicSocket', 'Value / Term 1')
def add_sockets(self):
self.add_input('LnxStringSocket', 'Name ' + str(self.num_params))
#self.add_input('LnxFloatSocket', 'Value ' + str(self.num_params))
self.add_input('LnxDynamicSocket', 'Value / Term ' + str(self.num_params))
self.num_params += 1
def remove_sockets(self):
if self.num_params > 0:
self.inputs.remove(self.inputs.values()[-1])
self.inputs.remove(self.inputs.values()[-1])
self.num_params -= 1
def draw_buttons(self, context, layout):
# Bind values to params Property
layout.prop(self, 'property0')
# Button ADD parameter
row = layout.row(align=True)
column = row.column(align=True)
op = column.operator('lnx.node_call_func', text='Add Param', icon='PLUS', emboss=True)
op.node_index = self.get_id_str()
op.callback_name = 'add_sockets'
# Button REMOVE parameter
column = row.column(align=True)
op = column.operator('lnx.node_call_func', text='', icon='X', emboss=True)
op.node_index = self.get_id_str()
op.callback_name = 'remove_sockets'
if self.num_params == 0:
column.enabled = False