Blender V4.3
versioning_common.cc File Reference
#include <cstring>
#include "DNA_node_types.h"
#include "DNA_screen_types.h"
#include "BLI_listbase.h"
#include "BLI_map.hh"
#include "BLI_string.h"
#include "BLI_string_ref.hh"
#include "BLI_string_utf8.h"
#include "BKE_animsys.h"
#include "BKE_grease_pencil_legacy_convert.hh"
#include "BKE_idprop.hh"
#include "BKE_ipo.h"
#include "BKE_lib_id.hh"
#include "BKE_lib_override.hh"
#include "BKE_main.hh"
#include "BKE_main_namemap.hh"
#include "BKE_mesh_legacy_convert.hh"
#include "BKE_node.hh"
#include "BKE_node_runtime.hh"
#include "BKE_node_tree_update.hh"
#include "NOD_socket.hh"
#include "BLT_translation.hh"
#include "SEQ_sequencer.hh"
#include "MEM_guardedalloc.h"
#include "BLO_readfile.hh"
#include "readfile.hh"
#include "versioning_common.hh"

Go to the source code of this file.

Macros

#define DNA_DEPRECATED_ALLOW
 

Functions

ARegiondo_versions_add_region_if_not_found (ListBase *regionbase, int region_type, const char *allocname, int link_after_region_type)
 
ARegiondo_versions_ensure_region (ListBase *regionbase, int region_type, const char *allocname, int link_after_region_type)
 
IDdo_versions_rename_id (Main *bmain, const short id_type, const char *name_src, const char *name_dst)
 
static void change_node_socket_name (ListBase *sockets, const char *old_name, const char *new_name)
 
bool version_node_socket_is_used (bNodeSocket *sock)
 
void version_node_socket_id_delim (bNodeSocket *socket)
 
void version_node_socket_name (bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
 
void version_node_input_socket_name (bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
 
void version_node_output_socket_name (bNodeTree *ntree, const int node_type, const char *old_name, const char *new_name)
 
bNodeversion_node_add_empty (bNodeTree &ntree, const char *idname)
 
bNodeSocketversion_node_add_socket (bNodeTree &ntree, bNode &node, const eNodeSocketInOut in_out, const char *idname, const char *identifier)
 
bNodeLinkversion_node_add_link (bNodeTree &ntree, bNode &node_a, bNodeSocket &socket_a, bNode &node_b, bNodeSocket &socket_b)
 
bNodeSocketversion_node_add_socket_if_not_exist (bNodeTree *ntree, bNode *node, int in_out, int type, int subtype, const char *identifier, const char *name)
 
void version_node_id (bNodeTree *ntree, const int node_type, const char *new_name)
 
void version_node_socket_index_animdata (Main *bmain, const int node_tree_type, const int node_type, const int socket_index_orig, const int socket_index_offset, const int total_number_of_sockets)
 
void version_socket_update_is_used (bNodeTree *ntree)
 
ARegiondo_versions_add_region (int regiontype, const char *name)
 
void node_tree_relink_with_socket_id_map (bNodeTree &ntree, bNode &old_node, bNode &new_node, const Map< std::string, std::string > &map)
 
static blender::Vector< bNodeLink * > find_connected_links (bNodeTree *ntree, bNodeSocket *in_socket)
 
void add_realize_instances_before_socket (bNodeTree *ntree, bNode *node, bNodeSocket *geometry_socket)
 
floatversion_cycles_node_socket_float_value (bNodeSocket *socket)
 
floatversion_cycles_node_socket_rgba_value (bNodeSocket *socket)
 
floatversion_cycles_node_socket_vector_value (bNodeSocket *socket)
 
IDPropertyversion_cycles_properties_from_ID (ID *id)
 
IDPropertyversion_cycles_properties_from_view_layer (ViewLayer *view_layer)
 
IDPropertyversion_cycles_properties_from_render_layer (SceneRenderLayer *render_layer)
 
float version_cycles_property_float (IDProperty *idprop, const char *name, float default_value)
 
int version_cycles_property_int (IDProperty *idprop, const char *name, int default_value)
 
void version_cycles_property_int_set (IDProperty *idprop, const char *name, int value)
 
bool version_cycles_property_boolean (IDProperty *idprop, const char *name, bool default_value)
 
void version_cycles_property_boolean_set (IDProperty *idprop, const char *name, bool value)
 
IDPropertyversion_cycles_visibility_properties_from_ID (ID *id)
 
void version_update_node_input (bNodeTree *ntree, FunctionRef< bool(bNode *)> check_node, const char *socket_identifier, FunctionRef< void(bNode *, bNodeSocket *)> update_input, FunctionRef< void(bNode *, bNodeSocket *, bNode *, bNodeSocket *)> update_input_link)
 
bNodeversion_eevee_output_node_get (bNodeTree *ntree, int16_t node_type)
 
static bool blendfile_or_libraries_versions_atleast (Main *bmain, const short versionfile, const short subversionfile)
 
void do_versions_after_setup (Main *new_bmain, BlendfileLinkAppendContext *lapp_context, BlendFileReadReport *reports)
 

Macro Definition Documentation

◆ DNA_DEPRECATED_ALLOW

#define DNA_DEPRECATED_ALLOW

Definition at line 9 of file versioning_common.cc.

Function Documentation

◆ add_realize_instances_before_socket()

◆ blendfile_or_libraries_versions_atleast()

static bool blendfile_or_libraries_versions_atleast ( Main * bmain,
const short versionfile,
const short subversionfile )
static

◆ change_node_socket_name()

static void change_node_socket_name ( ListBase * sockets,
const char * old_name,
const char * new_name )
static

◆ do_versions_add_region()

ARegion * do_versions_add_region ( int regiontype,
const char * name )

◆ do_versions_add_region_if_not_found()

ARegion * do_versions_add_region_if_not_found ( ListBase * regionbase,
int region_type,
const char * allocname,
int link_after_region_type )

Check if a region of type region_type exists in regionbase. Otherwise add it after the first region of type link_after_region_type.

Returns
null if a region of the given type already existed, otherwise the newly added region.

Definition at line 50 of file versioning_common.cc.

References BLI_insertlinkafter(), LISTBASE_FOREACH, MEM_callocN, and ARegion::regiontype.

Referenced by add_image_editor_asset_shelf(), blo_do_versions_290(), blo_do_versions_300(), blo_do_versions_400(), and version_ensure_missing_regions().

◆ do_versions_after_setup()

◆ do_versions_ensure_region()

ARegion * do_versions_ensure_region ( ListBase * regionbase,
int region_type,
const char * allocname,
int link_after_region_type )

Check if a region of type region_type exists in regionbase. Otherwise add it after the first region of type link_after_region_type.

Returns
either a new, or already existing region.

Definition at line 71 of file versioning_common.cc.

References BLI_insertlinkafter(), LISTBASE_FOREACH, and ARegion::regiontype.

Referenced by version_ensure_missing_regions().

◆ do_versions_rename_id()

ID * do_versions_rename_id ( Main * bmain,
short id_type,
const char * name_src,
const char * name_dst )

Rename if the ID doesn't exist.

Returns
the ID (if found).

Definition at line 92 of file versioning_common.cc.

References BKE_libblock_rename(), ID_IS_LINKED, LISTBASE_FOREACH, STREQ, and which_libbase().

Referenced by blo_do_versions_300(), BLO_update_defaults_startup_blend(), and do_versions_after_linking_280().

◆ find_connected_links()

static blender::Vector< bNodeLink * > find_connected_links ( bNodeTree * ntree,
bNodeSocket * in_socket )
static

◆ node_tree_relink_with_socket_id_map()

void node_tree_relink_with_socket_id_map ( bNodeTree & ntree,
bNode & old_node,
bNode & new_node,
const Map< std::string, std::string > & map )

◆ version_cycles_node_socket_float_value()

◆ version_cycles_node_socket_rgba_value()

◆ version_cycles_node_socket_vector_value()

◆ version_cycles_properties_from_ID()

◆ version_cycles_properties_from_render_layer()

IDProperty * version_cycles_properties_from_render_layer ( SceneRenderLayer * render_layer)

Definition at line 465 of file versioning_common.cc.

References IDP_GetPropertyTypeFromGroup(), and IDP_GROUP.

Referenced by blo_do_versions_290().

◆ version_cycles_properties_from_view_layer()

IDProperty * version_cycles_properties_from_view_layer ( ViewLayer * view_layer)

◆ version_cycles_property_boolean()

bool version_cycles_property_boolean ( IDProperty * idprop,
const char * name,
bool default_value )

◆ version_cycles_property_boolean_set()

void version_cycles_property_boolean_set ( IDProperty * idprop,
const char * name,
bool value )

Definition at line 498 of file versioning_common.cc.

References version_cycles_property_int_set().

Referenced by blo_do_versions_290().

◆ version_cycles_property_float()

float version_cycles_property_float ( IDProperty * idprop,
const char * name,
float default_value )

◆ version_cycles_property_int()

int version_cycles_property_int ( IDProperty * idprop,
const char * name,
int default_value )

◆ version_cycles_property_int_set()

void version_cycles_property_int_set ( IDProperty * idprop,
const char * name,
int value )

◆ version_cycles_visibility_properties_from_ID()

IDProperty * version_cycles_visibility_properties_from_ID ( ID * id)

Definition at line 503 of file versioning_common.cc.

References IDP_GetProperties(), IDP_GetPropertyTypeFromGroup(), and IDP_GROUP.

Referenced by blo_do_versions_300().

◆ version_eevee_output_node_get()

◆ version_node_add_empty()

bNode & version_node_add_empty ( bNodeTree & ntree,
const char * idname )

Adds a new node for versioning purposes. This is intended to be used to create raw DNA that might have been read from a file. The created node does not have storage or sockets. Both have to be added manually afterwards.

This may seem redundant because the set of sockets is already part of the node declaration. However, the declaration should not be used here, because it changes over time. The versioning code generally expects to get the sockets that the node had at the time of writing the versioning code. Changing the declaration later can break the versioning code in ways that are hard to detect.

Definition at line 191 of file versioning_common.cc.

References BKE_ntree_update_tag_node_new(), BLI_addtail(), DATA_, blender::bke::bNodeType::height, node, NODE_INIT, NODE_OPTIONS, NODE_SELECT, blender::bke::node_type_find(), blender::bke::node_unique_id(), blender::bke::node_unique_name(), bNodeTree::nodes, STRNCPY, STRNCPY_UTF8, blender::bke::bNodeType::type, blender::bke::bNodeType::ui_name, and blender::bke::bNodeType::width.

Referenced by hide_simulation_node_skip_socket_value(), version_geometry_nodes_extrude_smooth_propagation(), and version_geometry_nodes_primitive_uv_maps().

◆ version_node_add_link()

◆ version_node_add_socket()

◆ version_node_add_socket_if_not_exist()

bNodeSocket * version_node_add_socket_if_not_exist ( bNodeTree * ntree,
bNode * node,
int in_out,
int type,
int subtype,
const char * identifier,
const char * name )

◆ version_node_id()

void version_node_id ( bNodeTree * ntree,
int node_type,
const char * new_name )

Replace the ID name of all nodes in the tree with the given type with the new name.

Definition at line 287 of file versioning_common.cc.

References STREQ, and STRNCPY.

Referenced by blo_do_versions_300().

◆ version_node_input_socket_name()

◆ version_node_output_socket_name()

void version_node_output_socket_name ( bNodeTree * ntree,
const int node_type,
const char * old_name,
const char * new_name )

◆ version_node_socket_id_delim()

void version_node_socket_id_delim ( bNodeSocket * socket)

Convert SocketName.001 unique name format to SocketName_001. Previously both were used.

Definition at line 133 of file versioning_common.cc.

References blender::StringRef::drop_known_prefix(), bNodeSocket::identifier, blender::StringRefBase::is_empty(), bNodeSocket::name, and blender::StringRefBase::startswith().

Referenced by version_node_tree_socket_id_delim().

◆ version_node_socket_index_animdata()

void version_node_socket_index_animdata ( Main * bmain,
int node_tree_type,
int node_type,
int socket_index_orig,
int socket_index_offset,
int total_number_of_sockets )

Adjust animation data for newly added node sockets.

Node sockets are addressed by their index (in their RNA path, and thus FCurves/drivers), and thus when a new node is added in the middle of the list, existing animation data needs to be adjusted.

Since this is about animation data, it only concerns input sockets.

Parameters
node_tree_typeNode tree type that has these nodes, for example NTREE_SHADER.
node_typeNode type to adjust, for example SH_NODE_BSDF_PRINCIPLED.
socket_index_origThe original index of the moved socket; when socket 4 moved to 6, pass 4 here.
socket_index_offsetThe offset of the nodes, so when socket 4 moved to 6, pass 2 here.
total_number_of_socketsThe total number of sockets in the node.

Definition at line 298 of file versioning_common.cc.

References BKE_animdata_fix_paths_rename_all_ex(), BLI_sprintfN(), BLI_str_escape(), FOREACH_NODETREE_BEGIN, FOREACH_NODETREE_END, MEM_freeN(), and MEM_mallocN.

Referenced by do_versions_after_linking_290(), do_versions_after_linking_300(), and do_versions_after_linking_400().

◆ version_node_socket_is_used()

◆ version_node_socket_name()

void version_node_socket_name ( bNodeTree * ntree,
const int node_type,
const char * old_name,
const char * new_name )

Definition at line 154 of file versioning_common.cc.

References change_node_socket_name().

Referenced by blo_do_versions_290(), and blo_do_versions_300().

◆ version_socket_update_is_used()

◆ version_update_node_input()

void version_update_node_input ( bNodeTree * ntree,
FunctionRef< bool(bNode *)> check_node,
const char * socket_identifier,
FunctionRef< void(bNode *, bNodeSocket *)> update_input,
FunctionRef< void(bNode *, bNodeSocket *, bNode *, bNodeSocket *)> update_input_link )