|
12 | 12 | import datetime |
13 | 13 | import os |
14 | 14 | import shutil |
15 | | -from typing import TextIO |
| 15 | +from typing import TextIO, Callable |
16 | 16 |
|
17 | 17 | from .license_templates import license_templates |
18 | 18 | from .ntp_node_tree import NTP_NodeTree |
@@ -66,6 +66,9 @@ class NTP_Operator(Operator): |
66 | 66 | def __init__(self): |
67 | 67 | super().__init__() |
68 | 68 |
|
| 69 | + # Call function after all the writes, such as the menu switch node and the menu socket |
| 70 | + self._write_after_link: list[Callable] | None = None |
| 71 | + |
69 | 72 | # File (TextIO) or string (StringIO) the add-on/script is generated into |
70 | 73 | self._file: TextIO = None |
71 | 74 |
|
@@ -538,6 +541,15 @@ def _set_tree_socket_defaults(self, socket_interface: NodeTreeInterfaceSocket, |
538 | 541 |
|
539 | 542 | dv = socket_interface.default_value |
540 | 543 |
|
| 544 | + # notice that the Node Socket Menu should be assign value after link to a menu switch node |
| 545 | + if type(socket_interface) is bpy.types.NodeTreeInterfaceSocketMenu: |
| 546 | + if not self._write_after_link: |
| 547 | + self._write_after_link = [] |
| 548 | + |
| 549 | + self._write_after_link.append( |
| 550 | + lambda _var=socket_var, _dv=dv: self._write(f"{_var}.default_value = '{_dv}'")) |
| 551 | + return |
| 552 | + |
541 | 553 | if type(socket_interface) == bpy.types.NodeTreeInterfaceSocketColor: |
542 | 554 | dv = vec4_to_py_str(dv) |
543 | 555 | elif type(dv) in {mathutils.Vector, mathutils.Euler}: |
@@ -1329,6 +1341,10 @@ def _init_links(self, node_tree: NodeTree) -> None: |
1329 | 1341 | f".outputs[{input_idx}], " |
1330 | 1342 | f"{out_node_var}.inputs[{output_idx}])") |
1331 | 1343 |
|
| 1344 | + if self._write_after_link: |
| 1345 | + for _func in self._write_after_link: |
| 1346 | + _func() |
| 1347 | + |
1332 | 1348 | def _set_node_tree_properties(self, node_tree: NodeTree) -> None: |
1333 | 1349 | nt_var = self._node_tree_vars[node_tree] |
1334 | 1350 |
|
|
0 commit comments