| 
									
										
										
										
											2025-01-22 16:18:30 +01:00
										 |  |  | 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) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2025-04-06 10:19:19 +00:00
										 |  |  |     def __init__(self, *args, **kwargs): | 
					
						
							|  |  |  |         super(MathTermNode, self).__init__(*args, **kwargs) | 
					
						
							| 
									
										
										
										
											2025-01-22 16:18:30 +01:00
										 |  |  |         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 |