|
19 | 19 | INDEX = "i" |
20 | 20 | IMAGE_DIR_NAME = "imgs" |
21 | 21 | IMAGE_PATH = "image_path" |
| 22 | +ITEM = "item" |
22 | 23 | BASE_DIR = "base_dir" |
23 | 24 |
|
24 | 25 | RESERVED_NAMES = { |
25 | 26 | INDEX, |
26 | 27 | IMAGE_DIR_NAME, |
27 | 28 | IMAGE_PATH, |
| 29 | + ITEM, |
28 | 30 | BASE_DIR |
29 | 31 | } |
30 | 32 |
|
@@ -312,6 +314,10 @@ def _set_settings_defaults(self, node: Node) -> None: |
312 | 314 | continue |
313 | 315 |
|
314 | 316 | setting_str = f"{node_var}.{attr_name}" |
| 317 | + """ |
| 318 | + A switch statement would've been nice here, |
| 319 | + but Blender 3.0 was on Python v3.9 |
| 320 | + """ |
315 | 321 | if st == ST.ENUM: |
316 | 322 | if attr != '': |
317 | 323 | self._write(f"{setting_str} = {enum_to_py_str(attr)}") |
@@ -352,6 +358,10 @@ def _set_settings_defaults(self, node: Node) -> None: |
352 | 358 | self._load_image(attr, f"{node_var}.{attr_name}") |
353 | 359 | elif st == ST.IMAGE_USER: |
354 | 360 | self._image_user_settings(attr, f"{node_var}.{attr_name}") |
| 361 | + elif st == ST.SIM_OUTPUT_ITEMS: |
| 362 | + self._output_zone_items(attr, f"{node_var}.{attr_name}", True) |
| 363 | + elif st == ST.REPEAT_OUTPUT_ITEMS: |
| 364 | + self._output_zone_items(attr, f"{node_var}.{attr_name}", False) |
355 | 365 | elif st == ST.INDEX_SWITCH_ITEMS: |
356 | 366 | self._index_switch_items(attr, f"{node_var}.{attr_name}") |
357 | 367 | elif st == ST.ENUM_DEFINITION: |
@@ -1060,6 +1070,28 @@ def _image_user_settings(self, img_user: bpy.types.ImageUser, |
1060 | 1070 | self._write(f"{img_user_var}.{img_usr_attr} = " |
1061 | 1071 | f"{getattr(img_user, img_usr_attr)}") |
1062 | 1072 |
|
| 1073 | + if bpy.app.version >= (3, 6, 0): |
| 1074 | + def _output_zone_items(self, output_items, items_str: str, |
| 1075 | + is_sim: bool) -> None: |
| 1076 | + """ |
| 1077 | + Set items for a zone's output |
| 1078 | +
|
| 1079 | + output_items (NodeGeometry(Simulation/Repeat)OutputItems): items |
| 1080 | + to copy |
| 1081 | + items_str (str): |
| 1082 | + """ |
| 1083 | + self._write(f"{items_str}.clear()") |
| 1084 | + for i, item in enumerate(output_items): |
| 1085 | + socket_type = enum_to_py_str(item.socket_type) |
| 1086 | + name = str_to_py_str(item.name) |
| 1087 | + self._write(f"# Create item {name}") |
| 1088 | + self._write(f"{items_str}.new({socket_type}, {name})") |
| 1089 | + |
| 1090 | + if is_sim: |
| 1091 | + item_var = f"{items_str}[{i}]" |
| 1092 | + ad = enum_to_py_str(item.attribute_domain) |
| 1093 | + self._write(f"{item_var}.attribute_domain = {ad}") |
| 1094 | + |
1063 | 1095 | if bpy.app.version >= (4, 1, 0): |
1064 | 1096 | def _index_switch_items(self, switch_items: bpy.types.NodeIndexSwitchItems, |
1065 | 1097 | items_str: str) -> None: |
|
0 commit comments