Anim: replace `bone_collection.find_index()` with `.index` property

Replace the RNA function `bone_collection.find_index()` with a read-only
property `.index`. The functionality is the same, just exposed to RNA
differently.

Note that this property still does an array scan, and thus has complexity
`O(n)` in the number of bone collections. Since this number is relatively
small, this shouldn't be a problem.
This commit is contained in:
Sybren A. Stüvel 2024-01-02 16:54:30 +01:00
parent 65d25ed813
commit cd8f1853ed
2 changed files with 16 additions and 17 deletions

View File

@ -373,6 +373,13 @@ static bool rna_BoneCollection_is_editable_get(PointerRNA *ptr)
return ANIM_armature_bonecoll_is_editable(arm, bcoll);
}
static int rna_BoneCollection_index_get(PointerRNA *ptr)
{
bArmature *arm = reinterpret_cast<bArmature *>(ptr->owner_id);
BoneCollection *bcoll = static_cast<BoneCollection *>(ptr->data);
return blender::animrig::armature_bonecoll_find_index(arm, bcoll);
}
/* BoneCollection.bones iterator functions. */
static void rna_BoneCollection_bones_begin(CollectionPropertyIterator *iter, PointerRNA *ptr)
@ -2269,6 +2276,15 @@ static void rna_def_bonecollection(BlenderRNA *brna)
"Parent bone collection. Note that accessing this requires a scan of "
"all the bone collections to find the parent");
prop = RNA_def_property(srna, "index", PROP_INT, PROP_NONE);
RNA_def_property_int_funcs(prop, "rna_BoneCollection_index_get", nullptr, nullptr);
RNA_def_property_clear_flag(prop, PROP_EDITABLE);
RNA_def_property_ui_text(
prop,
"Index",
"Index of this bone collection in the armature.collections.all array. Note that finding "
"this index requires a scan of all the bone collections, so do access this with care");
RNA_api_bonecollection(srna);
}

View File

@ -200,12 +200,6 @@ static int rna_BoneCollection_move_to_parent(ID *owner_id,
return new_bcoll_index;
}
static int rna_BoneCollection_find_index(ID *owner_id, BoneCollection *self)
{
bArmature *armature = (bArmature *)owner_id;
return blender::animrig::armature_bonecoll_find_index(armature, self);
}
#else
void RNA_api_armature_edit_bone(StructRNA *srna)
@ -398,17 +392,6 @@ void RNA_api_bonecollection(StructRNA *srna)
-1,
INT_MAX);
RNA_def_function_return(func, parm);
/* collection.find_index() */
func = RNA_def_function(srna, "find_index", "rna_BoneCollection_find_index");
RNA_def_function_ui_description(func,
"Find the index of this bone collection. This scans through all "
"the Armature's bone collections");
RNA_def_function_flag(func, FUNC_USE_SELF_ID);
/* Return value. */
parm = RNA_def_int(
func, "index", -1, -1, INT_MAX, "Index", "Index of the bone collection", -1, INT_MAX);
RNA_def_function_return(func, parm);
}
#endif