def add_node_to_tree(nodes, n, nodes_to_import, name_remap, create_texts): node_ref = nodes_to_import[n] bl_idname = node_ref['bl_idname'] try: if old_nodes.is_old(bl_idname): old_nodes.register_old(bl_idname) if bl_idname == 'SvMonadGenericNode': node = unpack_monad(nodes, node_ref) if not node: raise Exception("It seems no valid node was created for this Monad {0}".format(node_ref)) else: node = nodes.new(bl_idname) except Exception as err: print(traceback.format_exc()) print(bl_idname, 'not currently registered, skipping') return if create_texts: add_texts(node, node_ref) if bl_idname in {'SvObjInLite', 'SvExecNodeMod', 'SvMeshEvalNode'}: node.storage_set_data(node_ref) if bl_idname == 'SvObjectsNodeMK3': for named_object in node_ref.get('object_names', []): node.object_names.add().name = named_object gather_remapped_names(node, n, name_remap) apply_core_props(node, node_ref) apply_superficial_props(node, node_ref) apply_post_processing(node, node_ref)
def add_node_to_tree(nodes, n, nodes_to_import, name_remap, create_texts): node_ref = nodes_to_import[n] bl_idname = node_ref['bl_idname'] try: if old_nodes.is_old(bl_idname): old_nodes.register_old(bl_idname) if bl_idname == 'SvMonadGenericNode': node = unpack_monad(nodes, node_ref) if not node: raise Exception("It seems no valid node was created for this Monad {0}".format(node_ref)) else: node = nodes.new(bl_idname) except Exception as err: exception(err) error('%s not currently registered, skipping', bl_idname) return if create_texts: add_texts(node, node_ref) if hasattr(node, 'storage_set_data'): node.storage_set_data(node_ref) if bl_idname == 'SvObjectsNodeMK3': for named_object in node_ref.get('object_names', []): node.object_names.add().name = named_object gather_remapped_names(node, n, name_remap) apply_core_props(node, node_ref) apply_superficial_props(node, node_ref) apply_post_processing(node, node_ref) apply_custom_socket_props(node, node_ref)
def import_tree(self): """Reads and generates nodes, frames, links, monad""" # create recursion, this is how monad import intend to work # in original module monad does not take in account that they can get another name # it logic remains and in this module # monad is designed to be imported recursively with self._fails_log.add_fail("Reading monads", f'Tree: {self._tree.name}'): for name, str_struct in self._structure.get('groups', dict()).items(): monad = bpy.data.node_groups.new(name, 'SverchGroupTreeType') TreeImporter01(monad, json.loads(str_struct), self._fails_log).import_tree() with TreeGenerator.start_from_tree(self._tree, self._fails_log) as tree_builder: for node_name, node_type, node_structure in self.nodes(): if node_type == 'SvMonadGenericNode': node = None with self._fails_log.add_fail("Creating monad node", f'Tree: {self._tree.name}'): node = unpack_monad(self._tree.nodes, node_structure) else: node = tree_builder.add_node(node_type, node_name) if node: self._new_node_names[node_name] = node.name NodeImporter01(node, node_structure, self._fails_log, self.file_version).import_node() for from_node_name, from_socket_index, to_node_name, to_socket_index in self._links( ): with self._fails_log.add_fail("Search node to link"): from_node_name = self._get_new_node_name(from_node_name) to_node_name = self._get_new_node_name(to_node_name) tree_builder.add_link(from_node_name, from_socket_index, to_node_name, to_socket_index) for node_name, parent_name in self._parent_nodes(): with self._fails_log.add_fail( "Assign node parent", f'Tree: {self._tree.name}, Node: {node_name}, Parent node: {parent_name}' ): node_name = self._get_new_node_name(node_name) parent_name = self._get_new_node_name(parent_name) self._tree.nodes[node_name].parent = self._tree.nodes[ parent_name]
def add_node_to_tree(nodes, n, nodes_to_import, name_remap, create_texts): node_ref = nodes_to_import[n] bl_idname = node_ref['bl_idname'] try: if old_nodes.is_old(bl_idname): old_nodes.register_old(bl_idname) if bl_idname == 'SvMonadGenericNode': node = unpack_monad(nodes, node_ref) if not node: raise Exception( "It seems no valid node was created for this Monad {0}". format(node_ref)) else: if dummy_nodes.is_dependent(bl_idname): try: node = nodes.new(bl_idname) except RuntimeError: dummy_nodes.register_dummy(bl_idname) node = nodes.new(bl_idname) else: node = nodes.new(bl_idname) except Exception as err: exception(err) error('%s not currently registered, skipping', bl_idname) return # fix_enum_identifier_spaces_if_needed(node, node_ref) if create_texts: add_texts(node, node_ref) if hasattr(node, 'storage_set_data'): node.storage_set_data(node_ref) if bl_idname == 'SvObjectsNodeMK3': for named_object in node_ref.get('object_names', []): node.object_names.add().name = named_object gather_remapped_names(node, n, name_remap) import_node_settings(node, node_ref)