15#include <fmt/format.h>
81#define USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
100 MEM_new<blender::CustomIDVectorSet<PropertyRNA *, PropertyRNAIdentifierGetter>>(
149 if (type == r_ptr.
type) {
166 r_ptr = {
static_cast<ID *
>(
data), type,
data};
180 return {
nullptr, &RNA_BlendData,
main};
222 if (ancestor_idx >=
ptr.ancestors.size()) {
230 ptr.ancestors[ancestor_idx].type,
231 ptr.ancestors[ancestor_idx].data,
232 ptr.ancestors.as_span().slice(0, ancestor_idx)};
244 return (
ptr->data ==
nullptr) || (
ptr->type ==
nullptr);
250 ptr.owner_id =
nullptr;
251 ptr.type = &RNA_BlenderRNA;
270 for (base =
ptr->type->base; base; base = base->
base) {
292 if (type ==
nullptr) {
305 if (property_ptr ==
nullptr) {
309 if (create && *property_ptr ==
nullptr) {
314 return *property_ptr;
336 printf(
"Got unexpected IDProp container when trying to retrieve %s: %d\n",
name, group->
type);
345 if (type ==
nullptr) {
358 if (property_ptr ==
nullptr) {
362 if (create && *property_ptr ==
nullptr) {
367 return *property_ptr;
390 printf(
"Got unexpected IDProp container when trying to retrieve %s: %d\n",
name, group->
type);
464 switch (idprop->
type) {
521 &rna_PropertyGroupItem_string,
522 &rna_PropertyGroupItem_int,
523 &rna_PropertyGroupItem_float,
527 &rna_PropertyGroupItem_group,
528 &rna_PropertyGroupItem_id,
529 &rna_PropertyGroupItem_double,
530 &rna_PropertyGroupItem_idp_array,
531 &rna_PropertyGroupItem_bool,
536 &rna_PropertyGroupItem_int_array,
537 &rna_PropertyGroupItem_float_array,
541 &rna_PropertyGroupItem_collection,
543 &rna_PropertyGroupItem_double_array,
545 &rna_PropertyGroupItem_bool_array,
558 *r_prop_rna_or_id = {};
560 r_prop_rna_or_id->
ptr =
ptr;
561 r_prop_rna_or_id->
rawprop = prop;
564 r_prop_rna_or_id->
rnaprop = prop;
585 r_prop_rna_or_id->
idprop = idprop;
591 r_prop_rna_or_id->
is_set =
true;
599 if (idprop_evaluated !=
nullptr && idprop->
type != idprop_evaluated->
type) {
600 idprop_evaluated =
nullptr;
603 r_prop_rna_or_id->
idprop = idprop_evaluated;
606 r_prop_rna_or_id->
is_set = (idprop_evaluated !=
nullptr);
612 r_prop_rna_or_id->
array_len = idprop_evaluated !=
nullptr ?
uint(idprop_evaluated->
len) : 0;
620 r_prop_rna_or_id->
rnaprop = &rna_PropertyGroupItem_enum;
635 *prop = prop_rna_or_id.
rnaprop;
636 return prop_rna_or_id.
idprop;
658 return &rna_PropertyGroupItem_enum;
770 if (type->
base == parent_type) {
822 if (srna == &RNA_AnyType) {
831 for (base = type; base; base = base->
base) {
842 if (identifier[0] ==
'[' && identifier[1] ==
'"') {
896 if (prop_type == property_type_check) {
900 "'%s : %s()' expected, got '%s : %s()'",
919 if (prop_type ==
PROP_COLLECTION && prop_struct_type == struct_type_check) {
925 "'%s : %s(type = %s)' expected, got '%s : %s()'",
935 "'%s : %s(type = %s)' expected, got '%s : %s(type = %s)'.",
1002 return {{
ptr->type,
ptr->data}};
1005 for (
int i =
ptr->ancestors.size() - 1;
i >= 0;
i--) {
1013 return std::nullopt;
1029 for (; srna; srna = srna->
base) {
1031 if (prop !=
nullptr) {
1042 for (; srna; srna = srna->
base) {
1063 func = funcptr.data;
1089 }
while ((type = type->
base));
1102 }
while ((type = type->
base));
1132 *r_nameprop = nameprop;
1152 if (
UNLIKELY(srna_exists !=
nullptr)) {
1159 if (srna_exists->
base) {
1180 const char *identifier,
1183 const int len_sep = strlen(sep);
1184 const int len_id = strlen(identifier);
1185 const char *p = strstr(identifier, sep);
1189 const bool failure =
true;
1192 const bool failure =
false;
1194 if (p ==
nullptr || p == identifier || p + len_sep >= identifier + len_id) {
1197 "'%s' does not contain '%s' with prefix and suffix",
1203 const char *c, *start, *end, *last;
1207 for (c = start; c != end; c++) {
1208 if (((*c >=
'A' && *c <=
'Z') || ((c != start) && (*c >=
'0' && *c <=
'9')) ||
1209 ((c != start) && (c != last) && (*c ==
'_'))) == 0)
1213 "'%s' does not have upper case alphanumeric prefix",
1219 start = p + len_sep;
1220 end = identifier + len_id;
1222 for (c = start; c != end; c++) {
1223 if (((*c >=
'A' && *c <=
'Z') || (*c >=
'a' && *c <=
'z') || (*c >=
'0' && *c <=
'9') ||
1224 ((c != start) && (c != last) && (*c ==
'_'))) == 0)
1228 "'%s' does not have an alphanumeric suffix",
1288 switch (rna_prop->
type) {
1358 return len[dimension];
1363 const char *vectoritem =
"XYZW";
1364 const char *quatitem =
"WXYZ";
1365 const char *coloritem =
"RGBA";
1372 return quatitem[index];
1374 if ((index < 4) &&
ELEM(subtype,
1384 return vectoritem[index];
1387 return coloritem[index];
1412 else if (
ELEM(subtype,
1451 int softmin, softmax;
1457 *hardmin = ui_data->
min;
1458 *hardmax = ui_data->
max;
1471 iprop->
range(
ptr, hardmin, hardmax, &softmin, &softmax);
1477 iprop->
range_ex(
ptr, prop, hardmin, hardmax, &softmin, &softmax);
1489 int hardmin, hardmax;
1514 iprop->
range(
ptr, &hardmin, &hardmax, softmin, softmax);
1516 *softmin =
max_ii(*softmin, hardmin);
1517 *softmax =
min_ii(*softmax, hardmax);
1523 iprop->
range_ex(
ptr, prop, &hardmin, &hardmax, softmin, softmax);
1525 *softmin =
max_ii(*softmin, hardmin);
1526 *softmax =
min_ii(*softmax, hardmax);
1535 float softmin, softmax;
1555 fprop->
range(
ptr, hardmin, hardmax, &softmin, &softmax);
1561 fprop->
range_ex(
ptr, prop, hardmin, hardmax, &softmin, &softmax);
1577 float hardmin, hardmax;
1604 fprop->
range(
ptr, &hardmin, &hardmax, softmin, softmax);
1606 *softmin =
max_ff(*softmin, hardmin);
1607 *softmax =
min_ff(*softmax, hardmax);
1613 fprop->
range_ex(
ptr, prop, &hardmin, &hardmax, softmin, softmax);
1615 *softmin =
max_ff(*softmin, hardmin);
1616 *softmax =
min_ff(*softmax, hardmax);
1696 return &RNA_UnknownType;
1724 return pprop->
poll(
ptr, *value);
1730 const bool use_static,
1746 BLI_assert(idprop_item.identifier !=
nullptr);
1749 idprop_item.identifier,
1752 idprop_item.description ? idprop_item.description :
""};
1761 *r_totitem = totitem - 1;
1772 if (!use_static && (eprop->
item_fn !=
nullptr)) {
1775 (
ptr->owner_id ==
nullptr));
1776 if (
C !=
nullptr || no_context) {
1779 item = eprop->
item_fn(no_context ?
nullptr :
C,
ptr, prop, r_free);
1797 *r_item = eprop->
item;
1813#ifdef WITH_INTERNATIONAL
1814static void property_enum_translate(
PropertyRNA *prop,
1827 if (!(do_iface || do_tooltip)) {
1857 if (nitem[
i].
name && do_iface) {
1860 if (nitem[
i].description && do_tooltip) {
1879#ifdef WITH_INTERNATIONAL
1882 property_enum_translate(prop, (
EnumPropertyItem **)r_item, r_totitem, r_free);
1897 "enum_gettext_all");
1899 memcpy(item_array, eprop->
item, mem_size);
1905 if (eprop->
item_fn !=
nullptr) {
1908 (
ptr->owner_id ==
nullptr));
1909 if (
C !=
nullptr || no_context) {
1914 item = eprop->
item_fn(no_context ?
nullptr :
nullptr,
ptr, prop, &
free);
1920 bool exists =
false;
1925 for (i_fixed = 0; item[i_fixed].
identifier; i_fixed++) {
1926 if (
STREQ(item[i_fixed].identifier, item_array[
i].identifier)) {
1933 item_array[
i].
name =
nullptr;
1944#ifdef WITH_INTERNATIONAL
1945 property_enum_translate(prop, &item_array, r_totitem, r_free);
1947 *r_item = item_array;
1962 *r_value = item[
i].
value;
1991 const char **r_identifier)
1999 r_identifier[index] =
nullptr;
2007 *r_name = item[
i].
name;
2015 const char *translation_context,
2016 const char **r_name)
2031 const char **r_description)
2053 const char *identifier,
2060 *r_value = item[
i].
value;
2254 const char **r_info)
2256 ID *
id =
ptr->owner_id;
2260 const char *info =
"";
2264 if (r_info !=
nullptr) {
2275 if (r_info !=
nullptr && (*r_info)[0] ==
'\0') {
2276 *r_info =
N_(
"This property is for internal use only and cannot be edited");
2282 if (
id ==
nullptr) {
2289 if (is_linked_prop_exception) {
2292 if (r_info !=
nullptr && (*r_info)[0] ==
'\0') {
2293 *r_info =
N_(
"Cannot edit this property from a linked data-block");
2300 if (r_info !=
nullptr && (*r_info)[0] ==
'\0') {
2301 *r_info =
N_(
"Cannot edit this property from an override data-block");
2305 if (is_liboverride_system && !is_linked_prop_exception) {
2306 if (r_info !=
nullptr && (*r_info)[0] ==
'\0') {
2307 *r_info =
N_(
"Cannot edit this property from a system override data-block");
2335 const char *dummy_info;
2373 if (
ptr->owner_id) {
2375 if (anim_data && anim_data->
action &&
2397 nullptr,
ptr->owner_id,
nullptr,
nullptr);
2399 if (linked_reference_anim_data) {
2410 bool driven, special;
2420 for (index = 0; index <
len; index++) {
2438 if (
RNA_path_resolve(&id_ptr, path->c_str(), &ptr_test, &prop_test) ==
true) {
2439 ret = (prop == prop_test);
2488 const short id_type =
GS(
ptr->owner_id->name);
2524 if (
ptr->owner_id) {
2561 if (prop_rna_or_id.
idprop) {
2562#ifdef USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
2616#ifdef USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
2623 else if (bprop->
set) {
2626 else if (bprop->
set_ex) {
2631#ifdef USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
2647 const bool *defarr,
int defarr_length,
bool defvalue,
int out_length,
bool *r_values)
2649 if (defarr && defarr_length > 0) {
2650 defarr_length = std::min(defarr_length, out_length);
2651 memcpy(r_values, defarr,
sizeof(
bool) * defarr_length);
2657 for (
int i = defarr_length;
i < out_length;
i++) {
2658 r_values[
i] = defvalue;
2663 const int *defarr,
int defarr_length,
bool defvalue,
int out_length,
bool *r_values)
2665 if (defarr && defarr_length > 0) {
2666 defarr_length = std::min(defarr_length, out_length);
2667 for (
int i = 0;
i < defarr_length;
i++) {
2668 r_values[
i] = defarr[
i] != 0;
2675 for (
int i = defarr_length;
i < out_length;
i++) {
2676 r_values[
i] = defvalue;
2702 if (prop_rna_or_id.
idprop) {
2713 for (
int i = 0;
i < idprop->
len;
i++) {
2714 r_values[
i] = bool(values_src[
i]);
2719 for (
int i = 0;
i < idprop->
len;
i++) {
2720 r_values[
i] = values_src[
i];
2770 if (values_num >= array_num) {
2777 memcpy(values, value_buf.
data(),
sizeof(*values) * values_num);
2800 value = tmparray[index];
2836 final_values.
data(),
2839 final_values_storage.
data());
2840 final_values = final_values_storage.
as_span();
2860 final_values.
data(),
2861 sizeof(
decltype(final_values)::value_type) * idprop->
len);
2866 for (
int i = 0;
i < idprop->
len;
i++) {
2867 values_dst[
i] = int(final_values[
i]);
2886#ifdef USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
2894#ifdef USE_INT_IDPROPS_FOR_BOOLEAN_RNA_PROP
2896 for (
int i = 0;
i < idprop->
len;
i++) {
2897 values_dst[
i] = int(final_values[
i]);
2901 for (
int i = 0;
i < idprop->
len;
i++) {
2902 values_dst[
i] = final_values[
i];
2916 if (values_num >= array_num) {
2923 memcpy(value_buf.
data(), values,
sizeof(*values) * values_num);
2948 tmparray[index] = value;
3058 bool *tmparray, value;
3062 value = tmparray[index];
3070 if (prop_rna_or_id.
idprop) {
3125 else if (iprop->
set) {
3128 else if (iprop->
set_ex) {
3143 const int *defarr,
int defarr_length,
int defvalue,
int out_length,
int *r_values)
3145 if (defarr && defarr_length > 0) {
3146 defarr_length = std::min(defarr_length, out_length);
3147 memcpy(r_values, defarr,
sizeof(
int) * defarr_length);
3153 for (
int i = defarr_length;
i < out_length;
i++) {
3154 r_values[
i] = defvalue;
3180 if (prop_rna_or_id.
idprop) {
3188 memcpy(r_values.
data(),
3190 sizeof(
decltype(r_values)::value_type) * idprop->
len);
3239 if (values_num >= array_num) {
3246 memcpy(values, value_buf.
data(),
sizeof(*values) * values_num);
3253 if (array_len <= 0) {
3257 else if (array_len == 1) {
3259 values[1] = values[0];
3266 if (array_len > 32) {
3274 values[0] = values[1] = arr[0];
3275 for (
i = 1;
i < array_len;
i++) {
3276 values[0] = std::min(values[0], arr[
i]);
3277 values[1] = std::max(values[1], arr[
i]);
3280 if (arr != arr_stack) {
3300 int *tmparray, value;
3304 value = tmparray[index];
3337 final_values.
data(),
3340 final_values_storage.
data());
3341 final_values = final_values_storage.
as_span();
3351 final_values.
data(),
3352 sizeof(
decltype(final_values)::value_type) * idprop->
len);
3384 if (values_num >= array_num) {
3391 memcpy(value_buf.
data(), values,
sizeof(*values) * values_num);
3415 tmparray[index] = value;
3503 int *tmparray, value;
3507 value = tmparray[index];
3515 if (prop_rna_or_id.
idprop) {
3579 else if (fprop->
set) {
3582 else if (fprop->
set_ex) {
3597 const float *defarr,
int defarr_length,
float defvalue,
int out_length,
float *r_values)
3599 if (defarr && defarr_length > 0) {
3600 defarr_length = std::min(defarr_length, out_length);
3601 memcpy(r_values, defarr,
sizeof(
float) * defarr_length);
3607 for (
int i = defarr_length;
i < out_length;
i++) {
3608 r_values[
i] = defvalue;
3616 const int default_array_len,
3617 const double default_value,
3618 const int out_length,
3621 const int array_copy_len = std::min(out_length, default_array_len);
3623 for (
int i = 0;
i < array_copy_len;
i++) {
3624 r_values[
i] =
float(default_array[
i]);
3627 for (
int i = array_copy_len;
i < out_length;
i++) {
3628 r_values[
i] =
float(default_value);
3654 if (prop_rna_or_id.
idprop) {
3662 memcpy(r_values.
data(),
3664 sizeof(
decltype(r_values)::value_type) * idprop->
len);
3668 for (
int i = 0;
i < idprop->
len;
i++) {
3669 r_values[
i] =
float(src_values[
i]);
3720 if (values_num >= array_num) {
3727 memcpy(values, value_buf.
data(),
sizeof(*values) * values_num);
3734 if (array_len <= 0) {
3738 else if (array_len == 1) {
3740 values[1] = values[0];
3743 float arr_stack[32];
3747 if (array_len > 32) {
3755 values[0] = values[1] = arr[0];
3756 for (
i = 1;
i < array_len;
i++) {
3757 values[0] = std::min(values[0], arr[
i]);
3758 values[1] = std::max(values[1], arr[
i]);
3761 if (arr != arr_stack) {
3781 float *tmparray, value;
3785 value = tmparray[index];
3818 final_values.
data(),
3821 final_values_storage.
data());
3822 final_values = final_values_storage.
as_span();
3837 final_values.
data(),
3838 sizeof(
decltype(final_values)::value_type) * idprop->
len);
3842 for (
int i = 0;
i < idprop->
len;
i++) {
3843 dst_values[
i] = double(final_values[
i]);
3871 const float *values,
3876 if (values_num >= array_num) {
3883 memcpy(value_buf.
data(), values,
sizeof(*values) * values_num);
3907 tmparray[index] = value;
3993 float *tmparray, value;
3997 value = tmparray[index];
4005 if (prop_rna_or_id.
idprop) {
4008 return size_t(idprop->
len);
4015 return size_t(idprop->
len - 1);
4030 if (prop_rna_or_id.
idprop) {
4040 std::string string_ret;
4041 string_ret.resize(
length);
4043 sprop->
get(
ptr, string_ret.data());
4067 "Returned string exceeds the property's max length");
4076 memcpy(value, string_ret.c_str(), string_ret.size() + 1);
4089 if (string_ret.size() < fixedlen) {
4096 memcpy(buf, string_ret.c_str(), string_ret.size() + 1);
4098 *r_len = int(string_ret.size());
4120 return int(string_final.size());
4137 std::string value_set = value ? value :
"";
4151 else if (sprop->
set) {
4152 sprop->
set(
ptr, value_set.c_str());
4154 else if (sprop->
set_ex) {
4179 std::string value_set = {value, size_t(
len)};
4189 memcpy(idprop->
data.
pointer, value, value_set.size() + 1);
4192 else if (sprop->
set) {
4193 sprop->
set(
ptr, value_set.c_str());
4195 else if (sprop->
set_ex) {
4242 if (
length + 1 < fixedlen) {
4300 const char *edit_text,
4305 sprop->
search(
C,
ptr, prop, edit_text, visit_fn);
4316 return std::nullopt;
4323 if (prop_rna_or_id.
idprop) {
4377 else if (eprop->
set) {
4380 else if (eprop->
set_ex) {
4420 int result_value = from_value;
4422 int single_step = (
step < 0) ? -1 : 1;
4430 i =
mod_i(
i + single_step, totitem);
4431 if (item_array[
i].identifier[0]) {
4432 step_tot += single_step;
4434 }
while ((
i != i_init) && (step_tot !=
step));
4437 result_value = item_array[
i].
value;
4444 return result_value;
4513 "%s: expected %s type, not %s",
4532 "If the property is tagged with ID reference-counting, "
4533 "its current value should be null or an ID");
4548 pprop->
set(
ptr, ptr_value, reports);
4561 "If the property is tagged with ID reference-counting, its current value should be "
4564 static_cast<ID *
>(current_id_ptr.
data) :
4569 if (
ELEM(old_id, new_id, current_id)) {
4571 "Reassigning the same ID to a RNA pointer property, or assignment failure, "
4572 "should not modify the original ID user-count");
4574 else if (is_id_refcounting) {
4576 old_id_new_refcount < old_id_old_refcount,
4577 "Unassigning an ID from a reference-counting RNA pointer property should decrease "
4582 old_id_new_refcount == old_id_old_refcount,
4583 "Unassigning an ID from a non-reference-counting RNA pointer property should not "
4584 "modify its user-count");
4587 if (new_id && new_id != old_id) {
4589 if (current_id == old_id) {
4591 "Failed assigning a new ID to a RNA pointer property, should not modify "
4592 "the new ID user-count");
4594 else if (is_id_refcounting) {
4596 new_id_new_refcount > new_id_old_refcount,
4597 "Assigning an ID to a reference-counting RNA pointer property should increase "
4602 new_id_new_refcount == new_id_old_refcount,
4603 "Assigning an ID to a non-reference-counting RNA pointer property should not "
4604 "modify its user-count");
4613 ID *value =
static_cast<ID *
>(ptr_value.
data);
4621 BKE_reportf(reports,
RPT_ERROR,
"%s: cannot assign an embedded ID to an IDProperty", __func__);
4626 if (idprop !=
nullptr) {
4685 printf(
"%s %s.%s: only supported for id properties.\n",
4687 ptr->type->identifier,
4706 printf(
"%s %s.%s: only supported for id properties.\n",
4708 ptr->type->identifier,
4785 if (!internal->
skip) {
4843 bool test = iter.
valid;
4853 bool *r_is_liboverride)
4855 ID *
id =
ptr->owner_id;
4856 if (
id ==
nullptr) {
4857 *r_is_liboverride =
false;
4863 if (!is_liboverride) {
4893 bool is_liboverride;
4905 if (is_liboverride) {
4923 if (is_liboverride) {
4953 bool is_liboverride;
4965 if (key >= 0 && key <
len) {
4971 if (key + 1 <
len) {
4996 bool is_liboverride;
5008 if (key >= 0 && key < len && pos >= 0 &&
pos <
len && key !=
pos) {
5039 bool is_liboverride;
5045 if (is_liboverride) {
5049 for (
int i = 0;
i <
len;
i++) {
5170 char name_buf[256], *
name;
5172 int keylen = strlen(key);
5182 &iter.
ptr, nameprop, name_buf,
sizeof(name_buf), &namelen);
5184 if ((keylen == namelen) &&
STREQ(
name, key)) {
5189 if (
name != name_buf) {
5265 arrayp = (iter.
valid) ?
static_cast<char *
>(iter.
ptr.
data) :
nullptr;
5287#define RAW_GET(dtype, var, raw, a) \
5289 switch (raw.type) { \
5290 case PROP_RAW_CHAR: \
5291 var = (dtype)((char *)raw.array)[a]; \
5293 case PROP_RAW_INT8: \
5294 var = (dtype)((int8_t *)raw.array)[a]; \
5296 case PROP_RAW_UINT8: \
5297 var = (dtype)((uint8_t *)raw.array)[a]; \
5299 case PROP_RAW_SHORT: \
5300 var = (dtype)((short *)raw.array)[a]; \
5302 case PROP_RAW_UINT16: \
5303 var = (dtype)((uint16_t *)raw.array)[a]; \
5305 case PROP_RAW_INT: \
5306 var = (dtype)((int *)raw.array)[a]; \
5308 case PROP_RAW_BOOLEAN: \
5309 var = (dtype)((bool *)raw.array)[a]; \
5311 case PROP_RAW_FLOAT: \
5312 var = (dtype)((float *)raw.array)[a]; \
5314 case PROP_RAW_DOUBLE: \
5315 var = (dtype)((double *)raw.array)[a]; \
5317 case PROP_RAW_INT64: \
5318 var = (dtype)((int64_t *)raw.array)[a]; \
5320 case PROP_RAW_UINT64: \
5321 var = (dtype)((uint64_t *)raw.array)[a]; \
5329#define RAW_SET(dtype, raw, a, var) \
5331 switch (raw.type) { \
5332 case PROP_RAW_CHAR: \
5333 ((char *)raw.array)[a] = char(var); \
5335 case PROP_RAW_INT8: \
5336 ((int8_t *)raw.array)[a] = int8_t(var); \
5338 case PROP_RAW_UINT8: \
5339 ((uint8_t *)raw.array)[a] = uint8_t(var); \
5341 case PROP_RAW_SHORT: \
5342 ((short *)raw.array)[a] = short(var); \
5344 case PROP_RAW_UINT16: \
5345 ((uint16_t *)raw.array)[a] = uint16_t(var); \
5347 case PROP_RAW_INT: \
5348 ((int *)raw.array)[a] = int(var); \
5350 case PROP_RAW_BOOLEAN: \
5351 ((bool *)raw.array)[a] = bool(var); \
5353 case PROP_RAW_FLOAT: \
5354 ((float *)raw.array)[a] = float(var); \
5356 case PROP_RAW_DOUBLE: \
5357 ((double *)raw.array)[a] = double(var); \
5359 case PROP_RAW_INT64: \
5360 ((int64_t *)raw.array)[a] = int64_t(var); \
5362 case PROP_RAW_UINT64: \
5363 ((uint64_t *)raw.array)[a] = uint64_t(var); \
5375 return sizeof(char);
5377 return sizeof(int8_t);
5379 return sizeof(uint8_t);
5381 return sizeof(short);
5383 return sizeof(uint16_t);
5387 return sizeof(bool);
5389 return sizeof(
float);
5391 return sizeof(double);
5411 for (
size = 1,
i = 0;
i < dim;
i++) {
5421 const char *propname,
5459 BKE_report(reports,
RPT_ERROR,
"Only boolean, int, float, and enum properties supported");
5465 item_len = is_array ? array_len : 1;
5473 if (
in.len != item_len *
out.len) {
5476 "Array length mismatch (expected %d, got %d)",
5483 if (
out.type ==
in.type) {
5484 void *inp =
in.array;
5485 void *outp =
out.array;
5493 memcpy(outp, inp,
size *
out.len);
5496 memcpy(inp, outp,
size *
out.len);
5500 for (
int a = 0; a <
out.len; a++) {
5502 memcpy(outp, inp,
size);
5505 memcpy(inp, outp,
size);
5508 inp = (
char *)inp +
size;
5509 outp = (
char *)outp +
out.stride;
5520 "Enum array properties should not exist");
5524 void *tmparray =
nullptr;
5526 int err = 0, j, a = 0;
5551 item_len = is_array ? array_len : 1;
5562 reports,
RPT_ERROR,
"Only boolean, int, float and enum properties supported");
5567 "Enum array properties should not exist");
5572 if (a + item_len >
in.len) {
5574 reports,
RPT_ERROR,
"Array length mismatch (got %d, expected more)",
in.len);
5579 if (array_len == 0) {
5641 else if (needconv == 1) {
5643 if (tmparray && tmplen != array_len) {
5656 bool *
array =
static_cast<bool *
>(tmparray);
5657 for (j = 0; j < array_len; j++, a++) {
5664 int *
array =
static_cast<int *
>(tmparray);
5665 for (j = 0; j < array_len; j++, a++) {
5672 float *
array =
static_cast<float *
>(tmparray);
5673 for (j = 0; j < array_len; j++, a++) {
5687 bool *
array =
static_cast<bool *
>(tmparray);
5689 for (j = 0; j < array_len; j++, a++) {
5690 RAW_SET(
int,
in, a, ((
bool *)tmparray)[j]);
5695 int *
array =
static_cast<int *
>(tmparray);
5697 for (j = 0; j < array_len; j++, a++) {
5703 float *
array =
static_cast<float *
>(tmparray);
5705 for (j = 0; j < array_len; j++, a++) {
5780 switch (prop->
type) {
5799 const char *propname,
5810 const char *propname,
5829 internal->
link = (lb) ?
static_cast<Link *
>(lb->
first) :
nullptr;
5830 internal->
skip = skip;
5832 iter->
valid = (internal->
link !=
nullptr);
5834 if (skip && iter->
valid && skip(iter, internal->
link)) {
5843 if (internal->
skip) {
5846 iter->
valid = (internal->
link !=
nullptr);
5847 }
while (iter->
valid && internal->
skip(iter, internal->
link));
5851 iter->
valid = (internal->
link !=
nullptr);
5859 return internal->
link;
5882 if (
data ==
nullptr) {
5897 internal->
ptr =
static_cast<char *
>(
data);
5901 internal->
skip = skip;
5906 if (skip && iter->
valid && skip(iter, internal->
ptr)) {
5915 if (internal->
skip) {
5919 }
while (iter->
valid && internal->
skip(iter, internal->
ptr));
5931 return internal->
ptr;
5939 return *(
void **)(internal->
ptr);
5952 if (index < 0 || index >=
length) {
5955 if (
UNLIKELY(index > std::numeric_limits<uint64_t>::max() / itemsize)) {
5973 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
5985 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
5997 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6009 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6020 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6032 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6044 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6056 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6067 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6079 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6091 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6103 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6114 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6126 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6140 printf(
"%s: %s.%s has no enum id '%s'.\n", __func__,
ptr->type->identifier,
name,
id);
6144 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6172 printf(
"%s: %s.%s item %s not found.\n", __func__,
ptr->type->identifier,
name, enumname);
6175 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6183 *r_value = item[
i].
value;
6203 *r_icon = item[
i].
icon;
6213 *r_name = item[
i].
name;
6223 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6237 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6250 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6251 if (r_len !=
nullptr) {
6264 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6276 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6287 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6300 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6312 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6324 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6336 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6348 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6359 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6370 printf(
"%s: %s.%s not found.\n", __func__,
ptr->type->identifier,
name);
6379 return ((idprop !=
nullptr) && (use_ghost ==
false || !(idprop->
flag &
IDP_FLAG_GHOST)));
6451 std::stringstream ss;
6453 const char *propname;
6461 if (
STREQ(propname,
"rna_type")) {
6465 if (first_time == 0) {
6471 ss << fmt::format(
"\"{}\":{}", propname,
str);
6482 if (
ptr->type ==
nullptr ||
ptr->owner_id ==
nullptr) {
6497 if (ptr_prop->
data ==
nullptr) {
6508 const bool as_function,
6509 const bool all_args,
6510 const bool nested_args,
6511 const int max_prop_length,
6514 const char *arg_name =
nullptr;
6518 std::stringstream ss;
6520 bool first_iter =
true;
6521 int flag, flag_parameter;
6529 if (as_function && (flag_parameter &
PARM_OUTPUT)) {
6535 if (
STREQ(arg_name,
"rna_type")) {
6545 ss << fmt::format(fmt::runtime(first_iter ?
"{}" :
", {}"), arg_name);
6551 if (all_args ==
true) {
6574 ss << fmt::format(fmt::runtime(first_iter ?
"{}={}" :
", {}={}"), arg_name, buf);
6586 const bool as_function,
6587 const bool all_args,
6588 const bool nested_args,
6589 const int max_prop_length)
6596 C,
ptr, as_function, all_args, nested_args, max_prop_length, iterprop);
6601 const bool as_function,
6602 const bool all_args,
6603 const int max_prop_length)
6612 C, &funcptr, as_function, all_args,
true, max_prop_length, iterprop);
6617 return var ?
"True" :
"False";
6627 *r_buf_end = buf +
len;
6633 *r_buf_end = buf +
len;
6639 *r_buf_end = buf +
len;
6652 const int end =
len - 1;
6655 bool *buf =
static_cast<bool *
>(*buf_p);
6656 for (
int i = 0;
i <
len;
i++, buf++) {
6657 ss << fmt::format(fmt::runtime((
i < end || !end) ?
"{}, " :
"{}"),
6664 int *buf =
static_cast<int *
>(*buf_p);
6665 for (
int i = 0;
i <
len;
i++, buf++) {
6666 ss << fmt::format(fmt::runtime((
i < end || !end) ?
"{}, " :
"{}"), *buf);
6672 float *buf =
static_cast<float *
>(*buf_p);
6673 for (
int i = 0;
i <
len;
i++, buf++) {
6674 ss << fmt::format(fmt::runtime((
i < end || !end) ?
"{:g}, " :
"{:g}"), *buf);
6685 int type,
void **buf_p,
int totdim,
const int *dim_size, std::stringstream &ss)
6690 const int end = dim_size[totdim] - 1;
6691 for (
int i = 0;
i <= end;
i++) {
6693 if (
i < end || !end) {
6709 void *buf_step = buf;
6725 std::stringstream ss;
6779 ss << fmt::format(
"\"{}\"", buf_esc);
6785 const char *identifier;
6799 bool is_first =
true;
6802 ss << fmt::format(fmt::runtime(is_first ?
"'{}'" :
", '{}'"), item->
identifier);
6820 ss << fmt::format(
"'{}'", identifier);
6823 return "'<UNKNOWN ENUM>'";
6838 (
i < max_prop_length) && collect_iter.
valid;
6856 return "'<UNKNOWN TYPE>'";
6886 return func->
call !=
nullptr;
6896 const char *identifier)
6901 for (; parm; parm = parm->
next) {
6928 int alloc_size = 0,
size;
6959 data_alloc->
array =
nullptr;
6967 switch (parm->type) {
6969 if (parm->arraydimension) {
6978 if (parm->arraydimension) {
6987 if (parm->arraydimension) {
7000 if (defvalue && defvalue[0]) {
7029 for (; parm; parm = parm->
next) {
7032 vector->~CollectionVector();
7044 if (data_alloc->
array) {
7052 parms->
data =
nullptr;
7054 parms->
func =
nullptr;
7077 iter->
parms = parms;
7112 if (iter.
parm == parm) {
7121 *r_value = data_alloc->
array;
7124 *r_value = iter.
data;
7139 for (; parm; parm = parm->
next) {
7157 if (iter.
parm == parm) {
7167 switch (parm->
type) {
7169 size =
sizeof(char);
7182 if (data_alloc->
array) {
7197 memcpy(iter.
data, value, iter.
size);
7209 for (; parm; parm = parm->
next) {
7228 if (iter.
parm == parm) {
7249 if (iter.
parm == parm) {
7283 func->
call(
C, reports,
ptr, parms);
7429 fputc(
'\n', stdout);
7441 const int prop_index,
7446 if ((array_len == 0) || (prop_index < array_len)) {
7448 r_anim_rna->
prop = prop;
7449 r_anim_rna->
prop_index = array_len ? prop_index : -1;
bool id_can_have_animdata(const ID *id)
AnimData * BKE_animdata_from_id(const ID *id)
Scene * CTX_data_scene(const bContext *C)
Main * CTX_data_main(const bContext *C)
wmMsgBus * CTX_wm_message_bus(const bContext *C)
FCurve * BKE_fcurve_find_by_rna(PointerRNA *ptr, PropertyRNA *prop, int rnaindex, AnimData **r_adt, bAction **r_action, bool *r_driven, bool *r_special)
#define IDP_int_or_bool_set(prop, value)
#define IDP_float_get(prop)
IDProperty * IDP_GetPropertyFromGroup(const IDProperty *prop, blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
void IDP_FreeFromGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
eIDPropertyUIDataType IDP_ui_data_type(const IDProperty *prop)
#define IDP_bool_set(prop, value)
void IDP_AssignStringMaxSize(IDProperty *prop, const char *st, size_t st_maxncpy) ATTR_NONNULL()
#define IDP_int_get(prop)
#define IDP_array_double_get(prop)
void IDP_ReplaceInGroup_ex(IDProperty *group, IDProperty *prop, IDProperty *prop_exist, int flag)
@ IDP_UI_DATA_TYPE_BOOLEAN
IDProperty * IDP_GetIndexArray(IDProperty *prop, int index) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define IDP_int_set(prop, value)
#define IDP_string_get(prop)
#define IDP_double_get(prop)
IDProperty * IDP_New(char type, const IDPropertyTemplate *val, blender::StringRef name, eIDPropertyFlag flags={}) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define IDP_array_bool_get(prop)
#define IDP_array_int_get(prop)
void IDP_ResizeIDPArray(IDProperty *prop, int newlen)
#define IDP_property_array_get(prop)
bool IDP_AddToGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
void IDP_AppendArray(IDProperty *prop, IDProperty *item)
void IDP_AssignID(IDProperty *prop, ID *id, int flag)
void IDP_ResizeArray(IDProperty *prop, int newlen)
#define IDP_int_or_bool_get(prop)
IDProperty * IDP_NewStringMaxSize(const char *st, size_t st_maxncpy, blender::StringRef name, eIDPropertyFlag flags={}) ATTR_WARN_UNUSED_RESULT
#define IDP_float_set(prop, value)
IDPropertyUIData * IDP_ui_data_ensure(IDProperty *prop)
void IDP_ReplaceInGroup(IDProperty *group, IDProperty *prop) ATTR_NONNULL()
#define IDP_double_set(prop, value)
#define IDP_array_float_get(prop)
IDProperty * IDP_NewIDPArray(blender::StringRef name) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
#define IDP_bool_get(prop)
bool BKE_id_can_use_id(const ID &id_from, const ID &id_to)
bool BKE_lib_override_library_is_system_defined(const Main *bmain, const ID *id)
IDOverrideLibrary * BKE_lib_override_library_get(Main *bmain, ID *id, ID *owner_id_hint, ID **r_owner_id)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
void BKE_report(ReportList *reports, eReportType type, const char *message)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
A dynamically sized string ADT.
char * BLI_dynstr_get_cstring(const DynStr *ds) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
DynStr * BLI_dynstr_new(void) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void BLI_dynstr_free(DynStr *ds) ATTR_NONNULL()
void BLI_dynstr_appendf(DynStr *__restrict ds, const char *__restrict format,...) ATTR_PRINTF_FORMAT(2
void BLI_dynstr_append(DynStr *__restrict ds, const char *cstr) ATTR_NONNULL()
GHash * BLI_ghash_str_new_ex(const char *info, unsigned int nentries_reserve) ATTR_MALLOC ATTR_WARN_UNUSED_RESULT
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_ghash_insert(GHash *gh, void *key, void *val)
void BLI_kdtree_nd_ free(KDTree *tree)
void * BLI_findlink(const ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
#define LISTBASE_FOREACH(type, var, list)
void * BLI_findstring_ptr(const ListBase *listbase, const char *id, int offset) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
MINLINE float max_ff(float a, float b)
MINLINE int min_ii(int a, int b)
MINLINE float min_ff(float a, float b)
MINLINE int max_ii(int a, int b)
MINLINE int mod_i(int i, int n)
ATTR_WARN_UNUSED_RESULT const size_t num
#define BLI_string_debug_size(str, str_maxncpy)
char * STRNCPY(char(&dst)[N], const char *src)
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
char * BLI_strncpy(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
bool BLT_translate_iface()
const char * BLT_pgettext(const char *msgctxt, const char *msgid)
#define CTX_IFACE_(context, msgid)
const char * BLT_translate_do_tooltip(const char *msgctxt, const char *msgid)
bool BLT_translate_tooltips()
const char * BLT_translate_do_iface(const char *msgctxt, const char *msgid)
void BPY_free_srna_pytype(StructRNA *srna)
#define CLOG_WARN(clg_ref,...)
void DEG_id_tag_update(ID *id, unsigned int flags)
void DEG_relations_tag_update(Main *bmain)
ID and Library types, which are fundamental for SDNA.
#define ID_REFCOUNTING_USERS(id)
#define ID_TYPE_USE_COPY_ON_EVAL(_id_type)
#define ID_IS_EDITABLE(_id)
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ IDP_FLAG_OVERRIDELIBRARY_LOCAL
Read Guarded memory(de)allocation.
#define RNA_STRUCT_BEGIN(sptr, prop)
#define RNA_PROP_BEGIN(sptr, itemptr, prop)
StructRNA * ID_code_to_RNA_type(short idcode)
#define RNA_MAX_ARRAY_LENGTH
#define RNA_MAX_ARRAY_DIMENSION
bool(*)(CollectionPropertyIterator *iter, void *data) IteratorSkipFunc
@ STRUCT_NO_CONTEXT_WITHOUT_OWNER_ID
@ STRUCT_PUBLIC_NAMESPACE
@ STRUCT_NO_DATABLOCK_IDPROPERTIES
@ STRUCT_CONTAINS_DATABLOCK_IDPROPERTIES
eStringPropertySearchFlag
@ PROP_STRING_SEARCH_SUPPORTED
StructRNA *(*)(Main *bmain, ReportList *reports, void *data, const char *identifier, StructValidateFunc validate, StructCallbackFunc call, StructFreeFunc free) StructRegisterFunc
bool(*)(Main *bmain, StructRNA *type) StructUnregisterFunc
#define RNA_SUBTYPE_UNIT(subtype)
@ PROPOVERRIDE_LIBRARY_INSERTION
@ PROP_CONTEXT_PROPERTY_UPDATE
BMesh const char void * data
unsigned long long int uint64_t
static DBVT_INLINE btScalar size(const btDbvtVolume &a)
SIMD_FORCE_INLINE btScalar length() const
Return the length of the vector.
Span< T > as_span() const
MutableSpan< T > as_mutable_span()
void reinitialize(const int64_t new_size)
constexpr T * data() const
constexpr Span< T > as_span() const
constexpr const T * data() const
VecBase< float, D > step(VecOp< float, D >, VecOp< float, D >) RET
float length(VecOp< float, D >) RET
void * MEM_mallocN(size_t len, const char *str)
void * MEM_calloc_arrayN(size_t len, size_t size, const char *str)
void * MEM_callocN(size_t len, const char *str)
void * MEM_malloc_arrayN(size_t len, size_t size, const char *str)
void MEM_freeN(void *vmemh)
std::unique_ptr< IDProperty, IDPropertyDeleter > create_bool(StringRef prop_name, bool value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_BOOLEAN, set its name and value.
std::unique_ptr< IDProperty, IDPropertyDeleter > create(StringRef prop_name, int32_t value, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_INT, set its name and value.
std::unique_ptr< IDProperty, IDPropertyDeleter > create_group(StringRef prop_name, eIDPropertyFlag flags={})
Allocate a new IDProperty of type IDP_GROUP.
PointerRNA rna_listbase_lookup_int(PointerRNA *ptr, StructRNA *type, ListBase *lb, int index)
StructUnregisterFunc RNA_struct_unregister(StructRNA *type)
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_is_runtime(const PropertyRNA *prop)
bool RNA_property_collection_lookup_int_has_fn(PropertyRNA *prop)
void RNA_boolean_set_array(PointerRNA *ptr, const char *name, const bool *values)
bool RNA_property_enum_value(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *identifier, int *r_value)
StructRegisterFunc RNA_struct_register(StructRNA *type)
bool RNA_property_enum_item_from_value(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, EnumPropertyItem *r_item)
IDProperty * rna_idproperty_find(PointerRNA *ptr, const char *name)
PointerRNA RNA_pointer_create_id_subdata(ID &id, StructRNA *type, void *data)
void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
static void property_float_get_array(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id, blender::MutableSpan< float > r_values)
bool RNA_property_enum_identifier(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **r_identifier)
int RNA_enum_bitflag_identifiers(const EnumPropertyItem *item, const int value, const char **r_identifier)
static void rna_property_float_fill_default_array_values_double(const double *default_array, const int default_array_len, const double default_value, const int out_length, float *r_values)
void RNA_int_set_array(PointerRNA *ptr, const char *name, const int *values)
void RNA_property_boolean_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, bool value)
void RNA_property_int_set(PointerRNA *ptr, PropertyRNA *prop, int value)
const StructRNA * RNA_struct_base_child_of(const StructRNA *type, const StructRNA *parent_type)
void RNA_property_int_ui_range(PointerRNA *ptr, PropertyRNA *prop, int *softmin, int *softmax, int *step)
std::optional< AncestorPointerRNA > RNA_struct_search_closest_ancestor_by_type(PointerRNA *ptr, const StructRNA *srna)
PropertyRNA * RNA_struct_type_find_property(StructRNA *srna, const char *identifier)
const char * RNA_property_ui_description(const PropertyRNA *prop)
bool RNA_property_update_check(PropertyRNA *prop)
bool RNA_property_array_check(PropertyRNA *prop)
bool RNA_struct_is_a(const StructRNA *type, const StructRNA *srna)
PropertyRNA * RNA_struct_find_collection_property_check(PointerRNA &props, const char *name, const StructRNA *struct_type_check)
bool RNA_property_is_unlink(PropertyRNA *prop)
std::string RNA_pointer_as_string_id(bContext *C, PointerRNA *ptr)
void RNA_parameter_get(ParameterList *parms, PropertyRNA *parm, void **r_value)
void rna_property_rna_or_id_get(PropertyRNA *prop, PointerRNA *ptr, PropertyRNAOrID *r_prop_rna_or_id)
StructRNA * RNA_struct_find(const char *identifier)
static void rna_property_int_fill_default_array_values(const int *defarr, int defarr_length, int defvalue, int out_length, int *r_values)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
bool RNA_property_assign_default(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_function_identifier(FunctionRNA *func)
void RNA_parameter_list_end(ParameterIterator *)
PropertyScaleType RNA_property_ui_scale(PropertyRNA *prop)
void RNA_struct_state_owner_set(const char *name)
bool RNA_property_int_set_default(PropertyRNA *prop, int value)
void RNA_struct_py_type_set(StructRNA *srna, void *py_type)
void rna_iterator_array_end(CollectionPropertyIterator *iter)
void RNA_int_get_array(PointerRNA *ptr, const char *name, int *values)
bool RNA_property_path_from_ID_check(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_boolean_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
static void rna_property_int_get_default_array_values(PointerRNA *ptr, IntPropertyRNA *iprop, int *r_values)
IDProperty ** RNA_struct_idprops_p(PointerRNA *ptr)
bool RNA_property_float_set_default(PropertyRNA *prop, float value)
void RNA_property_int_get_array_at_most(PointerRNA *ptr, PropertyRNA *prop, int *values, int values_num)
void RNA_string_set(PointerRNA *ptr, const char *name, const char *value)
static void rna_property_float_get_default_array_values(PointerRNA *ptr, FloatPropertyRNA *fprop, float *r_values)
PointerRNA RNA_pointer_get(PointerRNA *ptr, const char *name)
int RNA_collection_length(PointerRNA *ptr, const char *name)
int RNA_enum_from_name(const EnumPropertyItem *item, const char *name)
bool RNA_struct_system_idprops_unset(PointerRNA *ptr, const char *identifier)
IDProperty ** RNA_struct_system_idprops_p(PointerRNA *ptr)
int RNA_property_int_clamp(PointerRNA *ptr, PropertyRNA *prop, int *value)
int RNA_parameter_dynamic_length_get_data(ParameterList *, PropertyRNA *parm, void *data)
int RNA_property_float_clamp(PointerRNA *ptr, PropertyRNA *prop, float *value)
static size_t property_string_length_storage(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
int RNA_property_int_get_default(PointerRNA *ptr, PropertyRNA *prop)
void RNA_pointer_set(PointerRNA *ptr, const char *name, PointerRNA ptr_value)
void RNA_boolean_get_array(PointerRNA *ptr, const char *name, bool *values)
int RNA_property_enum_bitflag_identifiers(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **r_identifier)
bool RNA_struct_available_or_report(ReportList *reports, const char *identifier)
bool RNA_enum_is_equal(bContext *C, PointerRNA *ptr, const char *name, const char *enumname)
PropertyRNA * RNA_struct_find_property_check(PointerRNA &props, const char *name, const PropertyType property_type_check)
bool RNA_struct_is_ID(const StructRNA *type)
int RNA_property_int_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
char * RNA_property_string_get_default_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
void RNA_property_float_ui_range(PointerRNA *ptr, PropertyRNA *prop, float *softmin, float *softmax, float *step, float *precision)
const ListBase * RNA_struct_type_properties(StructRNA *srna)
void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, float value)
bool RNA_enum_value_from_id(const EnumPropertyItem *item, const char *identifier, int *r_value)
const ListBase * RNA_struct_type_functions(StructRNA *srna)
PropertyRNA * rna_struct_find_nested(PointerRNA *ptr, StructRNA *srna)
bool RNA_struct_idprops_check(const StructRNA *srna)
void rna_iterator_listbase_end(CollectionPropertyIterator *)
bool RNA_property_collection_assign_int(PointerRNA *ptr, PropertyRNA *prop, const int key, const PointerRNA *assign_ptr)
static void rna_property_boolean_get_default_array_values(PointerRNA *ptr, BoolPropertyRNA *bprop, bool *r_values)
eStringPropertySearchFlag RNA_property_string_search_flag(PropertyRNA *prop)
bool RNA_property_collection_is_empty(PointerRNA *ptr, PropertyRNA *prop)
PropertyUnit RNA_property_unit(PropertyRNA *prop)
void RNA_struct_blender_type_set(StructRNA *srna, void *blender_type)
int RNA_function_defined(FunctionRNA *func)
int RNA_property_ui_icon(const PropertyRNA *prop)
static const char * rna_ensure_property_identifier(const PropertyRNA *prop)
int RNA_property_collection_lookup_index(PointerRNA *ptr, PropertyRNA *prop, const PointerRNA *t_ptr)
void RNA_collection_clear(PointerRNA *ptr, const char *name)
bool RNA_property_reset(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_parameter_dynamic_length_set(ParameterList *parms, PropertyRNA *parm, int length)
static void rna_array_as_string_elem(int type, void **buf_p, int len, std::stringstream &ss)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
void RNA_parameter_dynamic_length_set_data(ParameterList *, PropertyRNA *parm, void *data, int length)
PropertyRNA * RNA_struct_find_property(PointerRNA *ptr, const char *identifier)
bool RNA_path_resolved_create(PointerRNA *ptr, PropertyRNA *prop, const int prop_index, PathResolvedRNA *r_anim_rna)
bool RNA_collection_is_empty(PointerRNA *ptr, const char *name)
static const char * bool_as_py_string(const int var)
float RNA_property_float_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_property_pointer_set(PointerRNA *ptr, PropertyRNA *prop, PointerRNA ptr_value, ReportList *reports)
void RNA_property_string_search(const bContext *C, PointerRNA *ptr, PropertyRNA *prop, const char *edit_text, blender::FunctionRef< void(StringPropertySearchVisitParams)> visit_fn)
char * RNA_struct_name_get_alloc(PointerRNA *ptr, char *fixedbuf, int fixedlen, int *r_len)
void _RNA_warning(const char *format,...)
void RNA_boolean_set(PointerRNA *ptr, const char *name, bool value)
const EnumPropertyItem * RNA_struct_property_tag_defines(const StructRNA *type)
void RNA_property_collection_skip(CollectionPropertyIterator *iter, int num)
#define RAW_GET(dtype, var, raw, a)
float RNA_property_float_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
void RNA_pointer_add(PointerRNA *ptr, const char *name)
bool RNA_property_collection_lookup_string_has_nameprop(PropertyRNA *prop)
int RNA_enum_from_identifier(const EnumPropertyItem *item, const char *identifier)
IDProperty * rna_system_idproperty_find(PointerRNA *ptr, const char *name)
int RNA_property_collection_raw_get(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, const char *propname, void *array, RawPropertyType type, int len)
BLI_INLINE void rna_pointer_refine(PointerRNA &r_ptr)
std::string RNA_pointer_as_string_keywords_ex(bContext *C, PointerRNA *ptr, const bool as_function, const bool all_args, const bool nested_args, const int max_prop_length, PropertyRNA *iterprop)
uint RNA_enum_items_count(const EnumPropertyItem *item)
int RNA_property_multi_array_length(PointerRNA *ptr, PropertyRNA *prop, int dimension)
bool RNA_property_is_set_ex(PointerRNA *ptr, PropertyRNA *prop, bool use_ghost)
bool RNA_property_editable_index(const PointerRNA *ptr, PropertyRNA *prop, const int index)
int RNA_property_enum_get_default(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_ui_description_raw(const PropertyRNA *prop)
bool RNA_property_collection_lookup_string_supported(PropertyRNA *prop)
void RNA_parameter_set(ParameterList *parms, PropertyRNA *parm, const void *value)
static void rna_system_idproperty_free(PointerRNA *ptr, const char *name)
bool RNA_struct_property_is_set_ex(PointerRNA *ptr, const char *identifier, bool use_ghost)
bool RNA_property_is_set(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_description(PropertyRNA *prop)
void RNA_property_collection_begin(PointerRNA *ptr, PropertyRNA *prop, CollectionPropertyIterator *iter)
bool RNA_enum_icon_from_value(const EnumPropertyItem *item, int value, int *r_icon)
void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin, float *hardmax)
bool RNA_property_animateable(const PointerRNA *ptr, PropertyRNA *prop_orig)
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
PropertyType RNA_property_type(PropertyRNA *prop)
const char * RNA_function_ui_description_raw(FunctionRNA *func)
const PointerRNA PointerRNA_NULL
char * RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
void RNA_property_pointer_add(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_int_set_array_at_most(PointerRNA *ptr, PropertyRNA *prop, const int *values, int values_num)
static PropertyRNA * arraytypemap[IDP_NUMTYPES]
void RNA_int_set(PointerRNA *ptr, const char *name, int value)
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
PointerRNA RNA_property_pointer_get_default(PointerRNA *, PropertyRNA *)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
void * RNA_struct_blender_type_get(StructRNA *srna)
void RNA_property_float_get_array_at_most(PointerRNA *ptr, PropertyRNA *prop, float *values, int values_num)
void ** RNA_struct_instance(PointerRNA *ptr)
char RNA_property_array_item_char(PropertyRNA *prop, int index)
int RNA_property_enum_step(const bContext *C, PointerRNA *ptr, PropertyRNA *prop, int from_value, int step)
void RNA_parameter_list_free(ParameterList *parms)
static const char * rna_ensure_property_name(const PropertyRNA *prop)
bool RNA_struct_contains_property(PointerRNA *ptr, PropertyRNA *prop_test)
std::string RNA_pointer_as_string_keywords(bContext *C, PointerRNA *ptr, const bool as_function, const bool all_args, const bool nested_args, const int max_prop_length)
IDProperty * RNA_struct_idprops(PointerRNA *ptr, bool create)
void RNA_float_get_array(PointerRNA *ptr, const char *name, float *values)
void rna_idproperty_touch(IDProperty *idprop)
void RNA_property_update(bContext *C, PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_int_get_default_index(PointerRNA *ptr, PropertyRNA *prop, int index)
size_t RNA_raw_type_sizeof(RawPropertyType type)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_get_array_range(PointerRNA *ptr, PropertyRNA *prop, float values[2])
void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
const char * RNA_struct_identifier(const StructRNA *type)
bool RNA_struct_idprops_contains_datablock(const StructRNA *type)
void RNA_property_boolean_get_array_at_most(PointerRNA *ptr, PropertyRNA *prop, bool *values, int values_num)
void RNA_property_int_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, int value)
static int rna_property_array_length_all_dimensions(PointerRNA *ptr, PropertyRNA *prop)
static float property_float_get(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
bool RNA_property_enum_name_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **r_name)
void RNA_property_enum_items_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
bool RNA_enum_id_from_value(const EnumPropertyItem *item, int value, const char **r_identifier)
IDProperty * RNA_struct_system_idprops(PointerRNA *ptr, bool create)
PointerRNA rna_array_lookup_int(PointerRNA *ptr, StructRNA *type, void *data, size_t itemsize, int64_t length, int64_t index)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_translation_context(const PropertyRNA *prop)
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, ListBase *lb, IteratorSkipFunc skip)
void RNA_property_collection_next(CollectionPropertyIterator *iter)
char * RNA_struct_name_get_alloc_ex(PointerRNA *ptr, char *fixedbuf, int fixedlen, int *r_len, PropertyRNA **r_nameprop)
void RNA_collection_add(PointerRNA *ptr, const char *name, PointerRNA *r_value)
void RNA_parameter_list_next(ParameterIterator *iter)
void * rna_iterator_array_get(CollectionPropertyIterator *iter)
void RNA_enum_set_identifier(bContext *C, PointerRNA *ptr, const char *name, const char *id)
const char * RNA_property_ui_name(const PropertyRNA *prop, const PointerRNA *ptr)
PropertyPathTemplateType RNA_property_path_template_type(PropertyRNA *prop)
static void * rna_array_as_string_alloc(int type, int len, PointerRNA *ptr, PropertyRNA *prop, void **r_buf_end)
void RNA_property_float_set_array_at_most(PointerRNA *ptr, PropertyRNA *prop, const float *values, int values_num)
static bool rna_idproperty_verify_valid(PointerRNA *ptr, PropertyRNA *prop, IDProperty *idprop)
static int property_int_get(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
static void rna_property_float_fill_default_array_values(const float *defarr, int defarr_length, float defvalue, int out_length, float *r_values)
const char * RNA_function_ui_description(FunctionRNA *func)
int RNA_int_get(PointerRNA *ptr, const char *name)
static void rna_ensure_property_multi_array_length(const PointerRNA *ptr, PropertyRNA *prop, int length[])
int RNA_property_array_dimension(const PointerRNA *ptr, PropertyRNA *prop, int length[])
bool RNA_enum_value_from_identifier(const EnumPropertyItem *item, const char *identifier, int *r_value)
bool RNA_enum_name_from_value(const EnumPropertyItem *item, int value, const char **r_name)
PropertyRNA * RNA_struct_type_find_property_no_base(StructRNA *srna, const char *identifier)
int RNA_function_flag(FunctionRNA *func)
void * RNA_property_py_data_get(PropertyRNA *prop)
std::string RNA_function_as_string_keywords(bContext *C, FunctionRNA *func, const bool as_function, const bool all_args, const int max_prop_length)
void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
float RNA_property_float_get_default(PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_pointer_create_from_ancestor(const PointerRNA &ptr, const int ancestor_idx)
const DeprecatedRNA * RNA_property_deprecated(const PropertyRNA *prop)
std::optional< std::string > RNA_property_string_path_filter(const bContext *C, PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_anim_editable(const PointerRNA *ptr, PropertyRNA *prop_orig)
static bool rna_property_editable_do(const PointerRNA *ptr, PropertyRNA *prop_orig, const int index, const char **r_info)
bool RNA_property_pointer_poll(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *value)
int RNA_property_flag(PropertyRNA *prop)
char * RNA_string_get_alloc(PointerRNA *ptr, const char *name, char *fixedbuf, int fixedlen, int *r_len)
RawPropertyType RNA_property_raw_type(PropertyRNA *prop)
static void rna_property_boolean_fill_default_array_values_from_ints(const int *defarr, int defarr_length, bool defvalue, int out_length, bool *r_values)
const char * RNA_struct_ui_description_raw(const StructRNA *type)
int RNA_struct_ui_icon(const StructRNA *type)
void RNA_property_boolean_set(PointerRNA *ptr, PropertyRNA *prop, bool value)
float RNA_float_get(PointerRNA *ptr, const char *name)
bool RNA_property_builtin(PropertyRNA *prop)
void RNA_property_int_get_array_range(PointerRNA *ptr, PropertyRNA *prop, int values[2])
void rna_iterator_listbase_next(CollectionPropertyIterator *iter)
std::string RNA_string_get(PointerRNA *ptr, const char *name)
bool RNA_struct_system_idprops_register_check(const StructRNA *type)
const char * RNA_struct_ui_description(const StructRNA *type)
int RNA_parameter_list_arg_count(const ParameterList *parms)
bool RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr)
void RNA_parameter_set_lookup(ParameterList *parms, const char *identifier, const void *value)
static char rna_struct_state_owner[128]
void RNA_property_string_get_default(PropertyRNA *prop, char *value, const int value_maxncpy)
void RNA_property_string_set_bytes(PointerRNA *ptr, PropertyRNA *prop, const char *value, int len)
bool RNA_struct_system_idprops_check(StructRNA *srna)
void RNA_float_set(PointerRNA *ptr, const char *name, float value)
int RNA_string_length(PointerRNA *ptr, const char *name)
static PropertyRNA * typemap[IDP_NUMTYPES]
bool RNA_property_enum_item_from_value_gettexted(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, EnumPropertyItem *r_item)
const char * RNA_struct_ui_name(const StructRNA *type)
bool RNA_struct_undo_check(const StructRNA *type)
void RNA_collection_begin(PointerRNA *ptr, const char *name, CollectionPropertyIterator *iter)
void RNA_struct_property_unset(PointerRNA *ptr, const char *identifier)
void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr)
bool RNA_pointer_is_null(const PointerRNA *ptr)
int RNA_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_enum_description(const EnumPropertyItem *item, const int value, const char **r_description)
StructRNA * RNA_struct_base(StructRNA *type)
static std::optional< std::string > rna_pointer_as_string__bldata(PointerRNA *ptr)
FunctionRNA * RNA_struct_find_function(StructRNA *srna, const char *identifier)
static int rna_ensure_property_array_length(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_enum_name(const EnumPropertyItem *item, const int value, const char **r_name)
bool RNA_property_is_idprop(const PropertyRNA *prop)
static void rna_property_update(bContext *C, Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_string_maxlength(PropertyRNA *prop)
void RNA_property_enum_items_gettexted_all(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
const char * RNA_struct_state_owner_get()
std::optional< std::string > RNA_pointer_as_string(bContext *C, PointerRNA *ptr, PropertyRNA *prop_ptr, PointerRNA *ptr_prop)
bool RNA_struct_idprops_datablock_allowed(const StructRNA *type)
static void rna_array_as_string(int type, int len, PointerRNA *ptr, PropertyRNA *prop, std::stringstream &ss)
int RNA_property_string_default_length(PointerRNA *, PropertyRNA *prop)
static bool property_boolean_get(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
bool RNA_property_editable(const PointerRNA *ptr, PropertyRNA *prop)
bool RNA_property_collection_lookup_string_index(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr, int *r_index)
void RNA_property_float_set_array(PointerRNA *ptr, PropertyRNA *prop, const float *values)
void RNA_property_int_set_array(PointerRNA *ptr, PropertyRNA *prop, const int *values)
void RNA_property_int_get_default_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
static bool property_collection_liboverride_editable(PointerRNA *ptr, PropertyRNA *prop, bool *r_is_liboverride)
bool RNA_property_enum_name(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const int value, const char **r_name)
bool RNA_property_editable_info(const PointerRNA *ptr, PropertyRNA *prop, const char **r_info)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, size_t itemsize, int64_t length, bool free_ptr, IteratorSkipFunc skip)
int RNA_property_enum_get(PointerRNA *ptr, PropertyRNA *prop)
void rna_iterator_array_next(CollectionPropertyIterator *iter)
PointerRNA RNA_pointer_recast(PointerRNA *ptr)
void RNA_property_float_set(PointerRNA *ptr, PropertyRNA *prop, float value)
PropertyRNA * RNA_struct_name_property(const StructRNA *type)
static const char * rna_ensure_property_description(const PropertyRNA *prop)
std::string RNA_property_string_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_int_get_array(PointerRNA *ptr, PropertyRNA *prop, int *values)
bool RNA_property_collection_move(PointerRNA *ptr, PropertyRNA *prop, int key, int pos)
int RNA_enum_from_value(const EnumPropertyItem *item, const int value)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
static void property_int_get_array(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id, blender::MutableSpan< int > r_values)
static PointerRNA property_pointer_get(PointerRNA *ptr, PropertyRNA *prop, const bool do_create)
static std::string property_string_get(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
bool RNA_struct_property_is_set(PointerRNA *ptr, const char *identifier)
int RNA_parameter_list_ret_count(const ParameterList *parms)
PointerRNA RNA_main_pointer_create(Main *main)
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
bool RNA_boolean_get(PointerRNA *ptr, const char *name)
void rna_pointer_create_with_ancestors(const PointerRNA &parent, StructRNA *type, void *data, PointerRNA &r_ptr)
int RNA_function_call(bContext *C, ReportList *reports, PointerRNA *ptr, FunctionRNA *func, ParameterList *parms)
int RNA_parameter_dynamic_length_get(ParameterList *parms, PropertyRNA *parm)
static void rna_array_as_string_recursive(int type, void **buf_p, int totdim, const int *dim_size, std::stringstream &ss)
const char * RNA_struct_ui_name_raw(const StructRNA *type)
bool RNA_property_collection_lookup_string(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr)
ParameterList * RNA_parameter_list_create(ParameterList *parms, PointerRNA *, FunctionRNA *func)
void RNA_property_enum_items(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
std::optional< blender::StringRefNull > RNA_translate_ui_text(const char *text, const char *text_ctxt, StructRNA *type, PropertyRNA *prop, int translate)
PropertyRNA * RNA_function_get_parameter(PointerRNA *, FunctionRNA *func, int index)
bool RNA_property_driver_editable(const PointerRNA *ptr, PropertyRNA *prop)
static int property_enum_get(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id)
void RNA_property_collection_clear(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_tags(PropertyRNA *prop)
bool RNA_enum_identifier(const EnumPropertyItem *item, const int value, const char **r_identifier)
void * rna_iterator_array_dereference_get(CollectionPropertyIterator *iter)
static bool rna_ensure_property_array_check(PropertyRNA *prop)
bool RNA_property_collection_type_get(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr)
void RNA_property_collection_end(CollectionPropertyIterator *iter)
bool RNA_property_collection_lookup_string_has_fn(PropertyRNA *prop)
void RNA_enum_set(PointerRNA *ptr, const char *name, int value)
void RNA_float_set_array(PointerRNA *ptr, const char *name, const float *values)
int RNA_property_array_item_index(PropertyRNA *prop, char name)
static void rna_property_boolean_fill_default_array_values(const bool *defarr, int defarr_length, bool defvalue, int out_length, bool *r_values)
PointerRNA RNA_blender_rna_pointer_create()
bool RNA_property_boolean_get_index(PointerRNA *ptr, PropertyRNA *prop, int index)
bool RNA_property_boolean_get_default(PointerRNA *ptr, PropertyRNA *prop)
bool RNA_struct_bl_idname_ok_or_report(ReportList *reports, const char *identifier, const char *sep)
const char * RNA_property_ui_name_raw(const PropertyRNA *prop, const PointerRNA *ptr)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
bool RNA_property_collection_remove(PointerRNA *ptr, PropertyRNA *prop, int key)
int RNA_enum_get(PointerRNA *ptr, const char *name)
void * rna_iterator_listbase_get(CollectionPropertyIterator *iter)
#define RAW_SET(dtype, raw, a, var)
static void property_boolean_get_array(PointerRNA *ptr, PropertyRNAOrID &prop_rna_or_id, blender::MutableSpan< bool > r_values)
void RNA_property_unset(PointerRNA *ptr, PropertyRNA *prop)
uint RNA_struct_count_properties(StructRNA *srna)
void RNA_parameter_list_begin(ParameterList *parms, ParameterIterator *iter)
IDProperty * rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
void RNA_property_boolean_set_array_at_most(PointerRNA *ptr, PropertyRNA *prop, const bool *values, int values_num)
void RNA_property_pointer_remove(PointerRNA *ptr, PropertyRNA *prop)
std::string RNA_property_as_string(bContext *C, PointerRNA *ptr, PropertyRNA *prop, int index, int max_prop_length)
int RNA_property_string_length(PointerRNA *ptr, PropertyRNA *prop)
PropertyRNA * RNA_struct_iterator_property(StructRNA *type)
void RNA_property_enum_items_ex(bContext *C, PointerRNA *ptr, PropertyRNA *prop, const bool use_static, const EnumPropertyItem **r_item, int *r_totitem, bool *r_free)
int RNA_parameter_list_size(const ParameterList *parms)
int RNA_parameter_flag(PropertyRNA *prop)
void RNA_parameter_get_lookup(ParameterList *parms, const char *identifier, void **r_value)
void * RNA_struct_py_type_get(StructRNA *srna)
bool RNA_property_editable_flag(const PointerRNA *ptr, PropertyRNA *prop)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
PropertyRNA * RNA_function_find_parameter(PointerRNA *, FunctionRNA *func, const char *identifier)
const char * RNA_struct_translation_context(const StructRNA *type)
int RNA_property_collection_raw_set(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, const char *propname, void *array, RawPropertyType type, int len)
bool RNA_property_animated(PointerRNA *ptr, PropertyRNA *prop)
const char * RNA_property_identifier(const PropertyRNA *prop)
int RNA_property_collection_raw_array(PointerRNA *ptr, PropertyRNA *prop, PropertyRNA *itemprop, bool set, RawArray *array)
const ListBase * RNA_function_defined_parameters(FunctionRNA *func)
static const char * rna_property_type_identifier(PropertyType prop_type)
PropertyRNA * rna_ensure_property(PropertyRNA *prop)
static int rna_raw_access(ReportList *reports, PointerRNA *ptr, PropertyRNA *prop, const char *propname, void *inarray, RawPropertyType intype, int inlen, int set)
bool RNA_enum_name_gettexted(const EnumPropertyItem *item, int value, const char *translation_context, const char **r_name)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const bool *values)
PointerRNA RNA_id_pointer_create(ID *id)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
PointerRNA RNA_property_pointer_get_never_create(PointerRNA *ptr, PropertyRNA *prop)
static void rna_property_collection_get_idp(CollectionPropertyIterator *iter)
bool RNA_property_overridable_get(const PointerRNA *ptr, PropertyRNA *prop)
void RNA_free(BlenderRNA *brna)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
int rna_parameter_size(PropertyRNA *parm)
int rna_parameter_size_pad(const int size)
std::optional< blender::StringRefNull > rna_translate_ui_text(const char *text, const char *text_ctxt, StructRNA *type, PropertyRNA *prop, bool translate)
bool(*)(PointerRNA *ptr, const PointerRNA value, const PropertyRNA *prop) PropPointerPollFuncPy
void(*)(bContext *C, PointerRNA *ptr, PropertyRNA *prop) ContextPropUpdateFunc
void(*)(bContext *C, PointerRNA *ptr) ContextUpdateFunc
std::optional< std::string > RNA_path_full_struct_py(const PointerRNA *ptr)
std::string RNA_path_full_ID_py(ID *id)
std::optional< std::string > RNA_path_from_ID_to_property(const PointerRNA *ptr, PropertyRNA *prop)
bool RNA_path_resolve_property(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
bool RNA_path_resolve(const PointerRNA *ptr, const char *path, PointerRNA *r_ptr, PropertyRNA **r_prop)
PropBooleanArrayGetTransformFunc getarray_transform
PropBooleanGetFuncEx get_default
PropBooleanSetTransformFunc set_transform
PropBooleanArraySetFuncEx setarray_ex
PropBooleanArrayGetFuncEx getarray_ex
PropBooleanGetTransformFunc get_transform
PropBooleanArraySetFunc setarray
const bool * defaultarray
PropBooleanArrayGetFuncEx get_default_array
PropBooleanSetFuncEx set_ex
PropBooleanGetFuncEx get_ex
PropBooleanArraySetTransformFunc setarray_transform
PropBooleanArrayGetFunc getarray
union CollectionPropertyIterator::@220100362304005352221007113371015217044252346141 internal
ListBaseIterator listbase
PropCollectionNextFunc next
PropCollectionLookupStringFunc lookupstring
PropCollectionLengthFunc length
PropCollectionLookupIntFunc lookupint
PropCollectionBeginFunc begin
PropCollectionAssignIntFunc assignint
PropCollectionEndFunc end
blender::CustomIDVectorSet< PropertyRNA *, PropertyRNAIdentifierGetter > * prop_lookup_set
const EnumPropertyItem * item
PropEnumGetTransformFunc get_transform
PropEnumGetFuncEx get_default
PropEnumSetTransformFunc set_transform
PropFloatSetTransformFunc set_transform
PropFloatSetFuncEx set_ex
PropertyScaleType ui_scale_type
PropFloatRangeFuncEx range_ex
PropFloatArrayGetTransformFunc getarray_transform
PropFloatArrayGetFuncEx getarray_ex
PropFloatArraySetFuncEx setarray_ex
PropFloatArrayGetFunc getarray
PropFloatGetFuncEx get_default
PropFloatArraySetTransformFunc setarray_transform
PropFloatGetTransformFunc get_transform
const float * defaultarray
PropFloatArraySetFunc setarray
PropFloatGetFuncEx get_ex
PropFloatArrayGetFuncEx get_default_array
IDPropertyUIDataEnumItem * enum_items
IDPropertyUIData * ui_data
PropIntRangeFuncEx range_ex
PropIntArrayGetFunc getarray
PropIntArrayGetFuncEx getarray_ex
PropIntArraySetTransformFunc setarray_transform
PropIntArraySetFunc setarray
PropIntArrayGetFuncEx get_default_array
PropIntSetTransformFunc set_transform
PropIntArraySetFuncEx setarray_ex
PropIntGetTransformFunc get_transform
PropertyScaleType ui_scale_type
PropIntArrayGetTransformFunc getarray_transform
PropIntGetFuncEx get_default
PropPointerTypeFunc type_fn
bool is_rna_storage_idprop
ItemEditableFunc itemeditable
PropArrayLengthGetFunc getlength
const char * translation_context
unsigned int arraydimension
const DeprecatedRNA * deprecated
PropertyPathTemplateType path_template_type
PropUINameFunc ui_name_func
unsigned int arraylength[RNA_MAX_ARRAY_DIMENSION]
unsigned int totarraylength
StringPropertyPathFilterFunc path_filter
const char * defaultvalue
PropStringLengthFuncEx length_ex
PropStringLengthFunc length
PropStringGetFuncEx get_ex
PropStringSetFuncEx set_ex
PropStringGetTransformFunc get_transform
PropStringSetTransformFunc set_transform
StringPropertySearchFunc search
eStringPropertySearchFlag search_flag
StructUnregisterFunc unreg
StructInstanceFunc instance
const char * translation_context
const EnumPropertyItem * prop_tag_defines
PropertyRNA * nameproperty
IDPropertiesFunc idproperties
PropertyRNA * iteratorproperty
IDPropertiesFunc system_idproperties
struct IDPropertyTemplate::@032057005265002020267344110225167212360002125060 array
struct IDPropertyTemplate::@306303166102371126056157213146124155011254157272 string
void WM_main_add_notifier(uint type, void *reference)
void WM_msg_publish_rna(wmMsgBus *mbus, PointerRNA *ptr, PropertyRNA *prop)