Blender V5.0
RNA_path.hh File Reference
#include <optional>
#include <string>
#include "RNA_types.hh"

Go to the source code of this file.

Classes

struct  RNAPath
struct  PropertyElemRNA

Functions

bool operator== (const RNAPath &left, const RNAPath &right)
char * RNA_path_append (const char *path, const PointerRNA *ptr, PropertyRNA *prop, int intkey, const char *strkey)
const char * RNA_path_array_index_token_find (const char *rna_path, const PropertyRNA *array_prop)
bool RNA_path_resolve (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
bool RNA_path_resolve_full (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
bool RNA_path_resolve_full_maybe_null (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
bool RNA_path_resolve_property (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
bool RNA_path_resolve_property_full (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index)
bool RNA_path_resolve_property_and_item_pointer (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, PointerRNA *r_item_ptr)
bool RNA_path_resolve_property_and_item_pointer_full (const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop, int *r_index, PointerRNA *r_item_ptr)
bool RNA_path_resolve_elements (PointerRNA *ptr, const char *path, ListBase *r_elements)
std::optional< std::string > RNA_path_from_struct_to_idproperty (PointerRNA *ptr, const IDProperty *needle)
IDRNA_find_real_ID_and_path (ID *id, const char **r_path)
std::optional< std::string > RNA_path_from_ID_to_struct (const PointerRNA *ptr)
std::optional< std::string > RNA_path_from_real_ID_to_struct (Main *bmain, const PointerRNA *ptr, ID **r_real)
std::optional< std::string > RNA_path_from_ID_to_property (const PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_path_from_ptr_to_property_index (const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index)
std::optional< std::string > RNA_path_from_ID_to_property_index (const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index)
std::optional< std::string > RNA_path_from_real_ID_to_property_index (Main *bmain, const PointerRNA *ptr, PropertyRNA *prop, int index_dim, int index, ID **r_real_id)
std::optional< std::string > RNA_path_resolve_from_type_to_property (const PointerRNA *ptr, PropertyRNA *prop, const StructRNA *type)
std::string RNA_path_full_ID_py (ID *id)
std::optional< std::string > RNA_path_full_struct_py (const PointerRNA *ptr)
std::optional< std::string > RNA_path_full_property_py_ex (const PointerRNA *ptr, PropertyRNA *prop, int index, bool use_fallback)
std::optional< std::string > RNA_path_full_property_py (const PointerRNA *ptr, PropertyRNA *prop, int index)
std::optional< std::string > RNA_path_struct_property_py (PointerRNA *ptr, PropertyRNA *prop, int index)
std::string RNA_path_property_py (const PointerRNA *ptr, PropertyRNA *prop, int index)

Detailed Description

RNA paths are a way to refer to pointers and properties with a string, using a syntax like: scenes[0].objects["Cube"].data.verts[7].co

This provides a way to refer to RNA data while being detached from any particular pointers, which is useful in a number of applications, like UI code or Actions, though efficiency is a concern.

Definition in file RNA_path.hh.

Function Documentation

◆ operator==()

bool operator== ( const RNAPath & left,
const RNAPath & right )

NOTE: equality is defined in a specific way here to reflect the semantic meaning of RNAPath. Since the key existing indicates a key-based array element, with the index then only serving as a fallback, the index only affects the equality result if neither RNAPath has a key specified. (See the main RNAPath documentation above for the specific semantics of key and index.)

Definition at line 46 of file rna_path.cc.

References RNAPath::index, RNAPath::key, left, and RNAPath::path.

◆ RNA_find_real_ID_and_path()

ID * RNA_find_real_ID_and_path ( ID * id,
const char ** r_path )

Find the actual ID pointer and path from it to the given ID.

Parameters
idID reference to search the global owner for.
[out]r_pathPath from the real ID to the initial ID.
Returns
The ID pointer, or NULL in case of failure.

Definition at line 954 of file rna_path.cc.

References BKE_id_owner_get(), BLI_assert_msg, ID::flag, GS, ID_FLAG_EMBEDDED_DATA, ID_GR, ID_NT, and ID::name.

Referenced by RNA_path_full_ID_py(), rna_prepend_real_ID_path(), and rna_property_override_property_real_id_owner().

◆ RNA_path_append()

◆ RNA_path_array_index_token_find()

const char * RNA_path_array_index_token_find ( const char * rna_path,
const PropertyRNA * array_prop )

Search for the start of the 'rna array index' part of the given rna_path.

Given the root RNA pointer and resolved RNA property, and the RNA path, return the first character in rna_path that is part of the array index for the given property. Return NULL if none can be found, e.g. because the property is not an RNA array.

Parameters
array_propif not NULL, the PropertyRNA assumed to be the last one from the RNA path. Only used to ensure it is a valid array property.

Definition at line 722 of file rna_path.cc.

References PropertyRNA::arraydimension, BLI_assert, ELEM, PROP_BOOLEAN, PROP_FLOAT, PROP_INT, PropertyRNA::type, and UNLIKELY.

Referenced by BKE_lib_override_library_property_is_animated().

◆ RNA_path_from_ID_to_property()

std::optional< std::string > RNA_path_from_ID_to_property ( const PointerRNA * ptr,
PropertyRNA * prop )

◆ RNA_path_from_ID_to_property_index()

std::optional< std::string > RNA_path_from_ID_to_property_index ( const PointerRNA * ptr,
PropertyRNA * prop,
int index_dim,
int index )
Parameters
index_dimThe dimension to show, 0 disables. 1 for 1d array, 2 for 2d. etc.
indexThe flattened index to use when index_dim > 0, this is expanded when used with multi-dimensional arrays.

Definition at line 1156 of file rna_path.cc.

References ptr, RNA_path_from_ID_to_struct(), rna_path_from_ptr_to_property_index_ex(), and RNA_struct_is_ID().

Referenced by copy_data_path_button_exec(), RNA_path_from_ID_to_property(), and RNA_path_from_real_ID_to_property_index().

◆ RNA_path_from_ID_to_struct()

◆ RNA_path_from_ptr_to_property_index()

std::string RNA_path_from_ptr_to_property_index ( const PointerRNA * ptr,
PropertyRNA * prop,
int index_dim,
int index )

◆ RNA_path_from_real_ID_to_property_index()

std::optional< std::string > RNA_path_from_real_ID_to_property_index ( Main * bmain,
const PointerRNA * ptr,
PropertyRNA * prop,
int index_dim,
int index,
ID ** r_real_id )

◆ RNA_path_from_real_ID_to_struct()

std::optional< std::string > RNA_path_from_real_ID_to_struct ( Main * bmain,
const PointerRNA * ptr,
ID ** r_real )

Definition at line 1056 of file rna_path.cc.

References ptr, RNA_path_from_ID_to_struct(), and rna_prepend_real_ID_path().

Referenced by pyrna_struct_repr().

◆ RNA_path_from_struct_to_idproperty()

std::optional< std::string > RNA_path_from_struct_to_idproperty ( PointerRNA * ptr,
const IDProperty * needle )

Find the path from the structure referenced by the pointer to the runtime RNA-defined IDProperty object.

Note
Does not handle pure user-defined IDProperties (a.k.a. custom properties).
Parameters
ptrReference to the object owning the custom property storage.
needleCustom property object to find.
Returns
Relative path or NULL.

Definition at line 920 of file rna_path.cc.

References MEM_freeN(), ptr, rna_idp_path(), and RNA_struct_system_idprops().

Referenced by rna_path_from_ID_to_idpgroup(), and UI_context_copy_to_selected_list().

◆ RNA_path_full_ID_py()

◆ RNA_path_full_property_py()

std::optional< std::string > RNA_path_full_property_py ( const PointerRNA * ptr,
PropertyRNA * prop,
int index )

Definition at line 1318 of file rna_path.cc.

References ptr, and RNA_path_full_property_py_ex().

Referenced by WM_prop_pystring_assign().

◆ RNA_path_full_property_py_ex()

std::optional< std::string > RNA_path_full_property_py_ex ( const PointerRNA * ptr,
PropertyRNA * prop,
int index,
bool use_fallback )

Get the ID.struct.property as a python representation, eg: bpy.data.foo["bar"].some_struct.some_prop[10]

Definition at line 1283 of file rna_path.cc.

References ptr, RNA_path_from_ID_to_property(), RNA_path_full_ID_py(), RNA_property_array_check(), and RNA_property_identifier().

Referenced by copy_data_path_button_exec(), pyrna_prop_path_from_module(), pyrna_struct_path_from_module(), RNA_path_full_property_py(), and UI_tooltip_uibut_python_add().

◆ RNA_path_full_struct_py()

std::optional< std::string > RNA_path_full_struct_py ( const PointerRNA * ptr)

Get the ID.struct as a python representation, eg: bpy.data.foo["bar"].some_struct

Definition at line 1267 of file rna_path.cc.

References ptr, RNA_path_from_ID_to_struct(), and RNA_path_full_ID_py().

Referenced by copy_data_path_button_exec(), pyrna_struct_path_from_module(), rna_pointer_as_string__bldata(), and UI_tooltip_uibut_python_add().

◆ RNA_path_property_py()

std::string RNA_path_property_py ( const PointerRNA * ptr,
PropertyRNA * prop,
int index )

Get the struct.property as a python representation, eg: some_prop[10]

Definition at line 1352 of file rna_path.cc.

References ptr, RNA_path_from_ptr_to_property_index(), and RNA_property_array_check().

Referenced by ui_but_user_menu_add(), ui_but_user_menu_find(), and WM_context_path_resolve_property_full().

◆ RNA_path_resolve()

bool RNA_path_resolve ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop )

Resolve the given RNA Path to find the pointer and/or property indicated by fully resolving the path.

Warning
Unlike RNA_path_resolve_property(), that one will try to follow RNAPointers, e.g. the path 'parent' applied to a RNAObject ptr will return the object.parent in r_ptr, and a NULL r_prop...
Note
Assumes all pointers provided are valid
Returns
True if path can be resolved to a valid "pointer + property" OR "pointer only"

Definition at line 532 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

Referenced by DEG_get_evaluated_rna_pointer(), depthdropper_get_path(), blender::ed::animrig::extract_pose(), eyedropper_init(), find_property_rgba(), blender::ed::animrig::generate_path_values(), radial_control_get_path(), RNA_property_path_from_ID_check(), and wm_msg_rna_update_by_id().

◆ RNA_path_resolve_elements()

bool RNA_path_resolve_elements ( PointerRNA * ptr,
const char * path,
ListBase * r_elements )

Resolve the given RNA Path into a linked list of PropertyElemRNA's.

To be used when complex operations over path are needed, like e.g. get relative paths, to avoid too much string operations.

Returns
True if there was no error while resolving the path
Note
Assumes all pointers provided are valid

Definition at line 608 of file rna_path.cc.

References ptr, and rna_path_parse().

Referenced by blender::ed::outliner::OverrideRNAPathTreeBuilder::build_path(), and RNA_path_resolve_from_type_to_property().

◆ RNA_path_resolve_from_type_to_property()

std::optional< std::string > RNA_path_resolve_from_type_to_property ( const PointerRNA * ptr,
PropertyRNA * prop,
const StructRNA * type )

◆ RNA_path_resolve_full()

bool RNA_path_resolve_full ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop,
int * r_index )

Resolve the given RNA Path to find the pointer and/or property + array index indicated by fully resolving the path.

Note
Assumes all pointers provided are valid.
Returns
True if path can be resolved to a valid "pointer + property" OR "pointer only"

Definition at line 544 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

Referenced by blender::deg::DepsgraphRelationBuilder::build_animdata_fcurve_target(), blender::deg::DepsgraphRelationBuilder::build_driver_data(), blender::deg::DepsgraphNodeBuilder::build_driver_id_property(), blender::deg::DepsgraphRelationBuilder::build_driver_id_property(), driver_get_variable_property(), blender::deg::RNAPathKey::RNAPathKey(), blender::deg::RNAPathKey::RNAPathKey(), and screen_user_menu_draw().

◆ RNA_path_resolve_full_maybe_null()

bool RNA_path_resolve_full_maybe_null ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop,
int * r_index )

A version of RNA_path_resolve_full doesn't check the value of PointerRNA.data.

Note
While it's correct to ignore the value of PointerRNA.data most callers need to know if the resulting pointer was found and not null.

Definition at line 554 of file rna_path.cc.

References ptr, and rna_path_parse().

Referenced by pyrna_struct_path_resolve().

◆ RNA_path_resolve_property()

bool RNA_path_resolve_property ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop )

Resolve the given RNA Path to find both the pointer AND property indicated by fully resolving the path.

This is a convenience method to avoid logic errors and ugly syntax.

Note
Assumes all pointers provided are valid
Returns
True only if both a valid pointer and property are found after resolving the path

Definition at line 560 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

Referenced by acf_fcurve_name(), achannel_setting_slider_cb(), blender::animrig::action_fcurve_ensure_legacy(), ANIM_add_driver(), ANIM_add_driver_with_target(), ANIM_channel_draw_widgets(), ANIM_copy_driver(), ANIM_list_elem_update(), ANIM_paste_driver(), ANIM_unit_mapping_get_factor(), BKE_animsys_rna_path_resolve(), blend_to_default_fcurve(), calculate_selection_fcurve_bounds(), check_rna_path_is_valid(), clean_fcurve(), blender::animrig::clear_keyframe(), blender::animrig::delete_keyframe(), draw_grease_pencil_layer_widgets(), blender::animrig::get_keyable_id_property_paths(), getname_anim_fcurve(), graph_panel_key_properties(), blender::deg::AnimatedPropertyStorage::initializeFromID(), blender::animrig::insert_key_to_keying_set_path(), blender::animrig::insert_keyframe_direct(), blender::animrig::insert_keyframes(), lib_override_library_id_reset_do(), nlaevalchan_verify(), override_remove_button_exec(), blender::ed::animation::pastebuf_match_path_property(), RNA_struct_find_property(), RNA_struct_override_apply(), RNA_struct_override_store(), UI_context_copy_to_selected_check(), UI_context_copy_to_selected_list(), and update_autoflags_fcurve().

◆ RNA_path_resolve_property_and_item_pointer()

bool RNA_path_resolve_property_and_item_pointer ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop,
PointerRNA * r_item_ptr )

Resolve the given RNA Path to find both the pointer AND property indicated by fully resolving the path, and get the value of the Pointer property (or item of the collection).

This is a convenience method to avoid logic errors and ugly syntax, it combines both RNA_path_resolve and RNA_path_resolve_property in a single call.

Note
Assumes all pointers provided are valid.
Parameters
r_item_ptrThe final Pointer or Collection item value. You must check for its validity before use!
Returns
True only if both a valid pointer and property are found after resolving the path

Definition at line 582 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

Referenced by RNA_struct_override_apply().

◆ RNA_path_resolve_property_and_item_pointer_full()

bool RNA_path_resolve_property_and_item_pointer_full ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop,
int * r_index,
PointerRNA * r_item_ptr )

Resolve the given RNA Path to find both the pointer AND property (as well as the array index) indicated by fully resolving the path, and get the value of the Pointer property (or item of the collection).

This is a convenience method to avoid logic errors and ugly syntax, it combines both RNA_path_resolve_full and RNA_path_resolve_property_full in a single call.

Note
Assumes all pointers provided are valid.
Parameters
r_item_ptrThe final Pointer or Collection item value. You must check for its validity before use!
Returns
True only if both a valid pointer and property are found after resolving the path

Definition at line 595 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

◆ RNA_path_resolve_property_full()

bool RNA_path_resolve_property_full ( const PointerRNA * ptr,
const char * path,
PointerRNA * r_ptr,
PropertyRNA ** r_prop,
int * r_index )

Resolve the given RNA Path to find the pointer AND property (as well as the array index) indicated by fully resolving the path.

This is a convenience method to avoid logic errors and ugly syntax.

Note
Assumes all pointers provided are valid
Returns
True only if both a valid pointer and property are found after resolving the path

Definition at line 572 of file rna_path.cc.

References PointerRNA::data, ptr, and rna_path_parse().

Referenced by BKE_lib_override_rna_property_find(), dtar_get_prop_val(), pyrna_struct_anim_args_parse_ex(), and blender::nodes::inverse_eval::set_rna_property().

◆ RNA_path_struct_property_py()

std::optional< std::string > RNA_path_struct_property_py ( PointerRNA * ptr,
PropertyRNA * prop,
int index )

Get the struct.property as a python representation, eg: some_struct.some_prop[10]

Definition at line 1325 of file rna_path.cc.

References ptr, RNA_path_from_ID_to_property(), RNA_property_array_check(), RNA_property_identifier(), RNA_struct_find_property(), and RNA_struct_is_ID().