32 {0,
"DEFAULT", 0,
"Default",
""},
47 {
PROP_ENUM,
"ENUM", 0,
"Enumeration",
""},
57 #define RNA_ENUM_PROPERTY_SUBTYPE_STRING_ITEMS \
58 {PROP_FILEPATH, "FILE_PATH", 0, "File Path", ""}, \
59 {PROP_DIRPATH, "DIR_PATH", 0, "Directory Path", ""}, \
60 {PROP_FILENAME, "FILE_NAME", 0, "File Name", ""}, \
61 {PROP_BYTESTRING, "BYTE_STRING", 0, "Byte String", ""}, \
62 {PROP_PASSWORD, "PASSWORD", 0, "Password", "A string that is displayed hidden ('********')"}
64 #define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ITEMS \
65 {PROP_PIXEL, "PIXEL", 0, "Pixel", ""}, \
66 {PROP_UNSIGNED, "UNSIGNED", 0, "Unsigned", ""}, \
67 {PROP_PERCENTAGE, "PERCENTAGE", 0, "Percentage", ""}, \
68 {PROP_FACTOR, "FACTOR", 0, "Factor", ""}, \
69 {PROP_ANGLE, "ANGLE", 0, "Angle", ""}, \
70 {PROP_TIME, "TIME", 0, "Time (Scene Relative)", \
71 "Time specified in frames, converted to seconds based on scene frame rate"}, \
72 {PROP_TIME_ABSOLUTE, "TIME_ABSOLUTE", 0, "Time (Absolute)", \
73 "Time specified in seconds, independent of the scene"}, \
74 {PROP_DISTANCE, "DISTANCE", 0, "Distance", ""}, \
75 {PROP_DISTANCE_CAMERA, "DISTANCE_CAMERA", 0, "Camera Distance", ""}, \
76 {PROP_POWER, "POWER", 0, "Power", ""}, \
77 {PROP_TEMPERATURE, "TEMPERATURE", 0, "Temperature", ""}
79 #define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS \
80 {PROP_COLOR, "COLOR", 0, "Color", ""}, \
81 {PROP_TRANSLATION, "TRANSLATION", 0, "Translation", ""}, \
82 {PROP_DIRECTION, "DIRECTION", 0, "Direction", ""}, \
83 {PROP_VELOCITY, "VELOCITY", 0, "Velocity", ""}, \
84 {PROP_ACCELERATION, "ACCELERATION", 0, "Acceleration", ""}, \
85 {PROP_MATRIX, "MATRIX", 0, "Matrix", ""}, \
86 {PROP_EULER, "EULER", 0, "Euler Angles", ""}, \
87 {PROP_QUATERNION, "QUATERNION", 0, "Quaternion", ""}, \
88 {PROP_AXISANGLE, "AXISANGLE", 0, "Axis-Angle", ""}, \
89 {PROP_XYZ, "XYZ", 0, "XYZ", ""}, \
90 {PROP_XYZ_LENGTH, "XYZ_LENGTH", 0, "XYZ Length", ""}, \
91 {PROP_COLOR_GAMMA, "COLOR_GAMMA", 0, "Color", ""}, \
92 {PROP_COORDS, "COORDINATES", 0, "Coordinates", ""}, \
94 {PROP_LAYER, "LAYER", 0, "Layer", ""}, \
95 {PROP_LAYER_MEMBER, "LAYER_MEMBER", 0, "Layer Member", ""}
157 {
PROP_PROPORTIONAL,
"PROPORTIONAL", 0,
"Adjust values proportionally to each other",
""},
161 "Update on every keystroke in textedit 'mode'",
178 "LIBRARY_OVERRIDABLE",
180 "Library Overridable",
181 "Make that property editable in library overrides of linked data-blocks"},
187 "LIBRARY_OVERRIDABLE",
189 "Library Overridable",
190 "Make that property editable in library overrides of linked data-blocks"},
195 "Do not use the names of the items, only their indices in the collection"},
200 "Allow users to add new items in that collection in library overrides"},
210 "Search results are suggestions (other values may be entered)"},
225 static CLG_LogRef LOG_COMPARE_OVERRIDE = {
"rna.rna_compare_override"};
229 static void rna_Struct_identifier_get(
PointerRNA *
ptr,
char *value)
239 static void rna_Struct_description_get(
PointerRNA *
ptr,
char *value)
249 static void rna_Struct_name_get(
PointerRNA *
ptr,
char *value)
259 static void rna_Struct_translation_context_get(
PointerRNA *
ptr,
char *value)
264 static int rna_Struct_translation_context_length(
PointerRNA *
ptr)
303 }
while ((ptype = ptype->
base));
337 for (i = iter->
level; i > 0; i--) {
357 rna_inheritance_next_level_restart(iter, skip, 0);
364 rna_inheritance_next_level_restart(iter, skip, 0);
372 rna_inheritance_next_level_restart(iter, skip, 1);
379 rna_inheritance_next_level_restart(iter, skip, 1);
387 if (internal->flag) {
393 rna_inheritance_properties_listbase_next(iter, rna_property_builtin);
421 rna_inheritance_properties_listbase_begin(iter, &srna->
cont.
properties, rna_property_builtin);
435 rna_inheritance_functions_listbase_next(iter, rna_function_builtin);
450 rna_inheritance_functions_listbase_begin(iter, &srna->
functions, rna_function_builtin);
482 newptr.
type = &RNA_Struct;
495 rna_Struct_properties_begin(iter, &newptr);
500 rna_Struct_properties_next(iter);
505 return rna_Struct_properties_get(iter);
521 propptr.
type = &RNA_Property;
531 propptr.
type = &RNA_Property;
539 }
while ((srna = srna->
base));
556 return &RNA_BoolProperty;
558 return &RNA_IntProperty;
560 return &RNA_FloatProperty;
562 return &RNA_StringProperty;
564 return &RNA_EnumProperty;
566 return &RNA_PointerProperty;
568 return &RNA_CollectionProperty;
570 return &RNA_Property;
574 static void rna_Property_identifier_get(
PointerRNA *
ptr,
char *value)
586 static void rna_Property_name_get(
PointerRNA *
ptr,
char *value)
590 strcpy(value, name ? name :
"");
597 return name ? strlen(name) : 0;
600 static void rna_Property_description_get(
PointerRNA *
ptr,
char *value)
604 strcpy(value, description ? description :
"");
610 return description ? strlen(description) : 0;
613 static void rna_Property_translation_context_get(
PointerRNA *
ptr,
char *value)
619 static int rna_Property_translation_context_length(
PointerRNA *
ptr)
696 static bool rna_Property_is_argument_optional_get(
PointerRNA *
ptr)
726 static bool rna_Property_is_library_editable_flag_get(
PointerRNA *
ptr)
749 struct_tags !=
NULL && struct_tags->identifier !=
NULL;
751 memcpy(&tmp, struct_tags,
sizeof(tmp));
767 static void rna_Property_array_dimensions_get(
PointerRNA *
ptr,
790 static bool rna_Property_is_registered_optional_get(
PointerRNA *
ptr)
816 static int rna_NumberProperty_default_array_get_length(
const PointerRNA *
ptr,
833 static void rna_IntProperty_default_array_get(
PointerRNA *
ptr,
int *values)
843 static void rna_BoolProperty_default_array_get(
PointerRNA *
ptr,
bool *values)
853 static void rna_FloatProperty_default_array_get(
PointerRNA *
ptr,
float *values)
946 static void rna_StringProperty_default_get(
PointerRNA *
ptr,
char *value)
952 static int rna_StringProperty_default_length(
PointerRNA *
ptr)
959 static int rna_StringProperty_max_length_get(
PointerRNA *
ptr)
982 if ((eprop->item_fn ==
NULL) || (eprop->item_fn == rna_EnumProperty_default_itemf) ||
989 return eprop->item_fn(
C,
ptr, prop, r_free);
1024 static void rna_EnumPropertyItem_identifier_get(
PointerRNA *
ptr,
char *value)
1029 static int rna_EnumPropertyItem_identifier_length(
PointerRNA *
ptr)
1034 static void rna_EnumPropertyItem_name_get(
PointerRNA *
ptr,
char *value)
1040 strcpy(value, eprop->
name);
1047 static int rna_EnumPropertyItem_name_length(
PointerRNA *
ptr)
1051 return strlen(eprop->
name);
1056 static void rna_EnumPropertyItem_description_get(
PointerRNA *
ptr,
char *value)
1068 static int rna_EnumPropertyItem_description_length(
PointerRNA *
ptr)
1104 static void rna_Function_identifier_get(
PointerRNA *
ptr,
char *value)
1114 static void rna_Function_description_get(
PointerRNA *
ptr,
char *value)
1136 static bool rna_Function_registered_optional_get(
PointerRNA *
ptr)
1188 static int rna_BlenderRNA_structs_lookup_string(
PointerRNA *
ptr,
1206 static bool rna_property_override_diff_propptr_validate_diffing(
PointerRNA *propptr_a,
1208 const bool no_ownership,
1209 const bool no_prop_name,
1212 bool *r_is_type_diff,
1213 char **r_propname_a,
1214 char *propname_a_buff,
1215 size_t propname_a_buff_size,
1216 char **r_propname_b,
1217 char *propname_b_buff,
1218 size_t propname_b_buff_size)
1222 bool is_valid_for_diffing =
true;
1223 const bool do_force_name = !no_prop_name && r_propname_a !=
NULL;
1225 if (do_force_name) {
1230 *r_is_id = *r_is_null = *r_is_type_diff =
false;
1240 *r_is_type_diff = propptr_a->
type != propptr_b->
type;
1242 is_valid_for_diffing =
false;
1247 *r_is_type_diff = (propptr_b ==
NULL || propptr_b->
type != propptr_a->
type);
1248 is_valid_for_diffing = !((*r_is_id && no_ownership) || *r_is_null);
1251 if (propptr_b ==
NULL || propptr_a->
type != propptr_b->
type) {
1252 *r_is_type_diff =
true;
1253 is_valid_for_diffing =
false;
1261 if (!no_prop_name && (is_valid_for_diffing || do_force_name)) {
1269 int propname_a_len = 0, propname_b_len = 0;
1270 char *propname_a =
NULL;
1271 char *propname_b =
NULL;
1274 if (nameprop_a !=
NULL) {
1275 if (r_propname_a ==
NULL && propname_a_buff ==
NULL) {
1276 propname_a_buff = buff_a;
1277 propname_a_buff_size =
sizeof(buff_a);
1281 propptr_a, nameprop_a, propname_a_buff, propname_a_buff_size, &propname_a_len);
1284 if (r_propname_a !=
NULL) {
1285 *r_propname_a = propname_a;
1289 if (nameprop_b !=
NULL) {
1290 if (r_propname_b ==
NULL && propname_b_buff ==
NULL) {
1291 propname_b_buff = buff_b;
1292 propname_b_buff_size =
sizeof(buff_b);
1296 propptr_b, nameprop_b, propname_b_buff, propname_b_buff_size, &propname_b_len);
1298 if (r_propname_b !=
NULL) {
1299 *r_propname_b = propname_b;
1302 if (propname_a !=
NULL && propname_b !=
NULL) {
1303 if (propname_a_len != propname_b_len || propname_a[0] != propname_b[0] ||
1304 !
STREQ(propname_a, propname_b)) {
1305 is_valid_for_diffing =
false;
1315 return is_valid_for_diffing;
1319 static int rna_property_override_diff_propptr(
Main *bmain,
1325 const bool no_ownership,
1326 const bool no_prop_name,
1328 const char *rna_path,
1329 size_t rna_path_len,
1330 const uint property_type,
1331 const char *rna_itemname_a,
1332 const char *rna_itemname_b,
1333 const int rna_itemindex_a,
1334 const int rna_itemindex_b,
1336 bool *r_override_changed)
1344 bool is_null =
false;
1345 bool is_type_diff =
false;
1348 bool is_valid_for_diffing = rna_property_override_diff_propptr_validate_diffing(propptr_a,
1378 if (no_ownership || is_null || is_type_diff || !is_valid_for_diffing) {
1382 const int comp = (propptr_a->
data != propptr_b->
data);
1384 if (do_create && comp != 0) {
1385 bool created =
false;
1387 override, rna_path, &created);
1399 if (created || rna_itemname_a !=
NULL || rna_itemname_b !=
NULL ||
1400 rna_itemindex_a != -1 || rna_itemindex_b != -1) {
1414 if (r_override_changed) {
1415 *r_override_changed = created;
1422 if (is_id && no_ownership) {
1436 ID *id_a = propptr_a->
data;
1437 ID *id_b = propptr_b->
data;
1450 "Not checking matching ID pointer properties, since owner %s is tagged as "
1451 "needing resync.\n",
1472 # define RNA_PATH_BUFFSIZE 8192
1475 char *extended_rna_path = extended_rna_path_buffer;
1476 size_t extended_rna_path_len = 0;
1482 if ((rna_itemname_a !=
NULL && rna_itemname_a[0] !=
'\0') &&
1483 (rna_itemname_b !=
NULL && rna_itemname_b[0] !=
'\0')) {
1489 extended_rna_path_len = rna_path_len + 2 + esc_item_name_len + 2;
1491 extended_rna_path =
MEM_mallocN(extended_rna_path_len + 1, __func__);
1494 memcpy(extended_rna_path, rna_path, rna_path_len);
1495 extended_rna_path[rna_path_len] =
'[';
1496 extended_rna_path[rna_path_len + 1] =
'"';
1497 memcpy(extended_rna_path + rna_path_len + 2, esc_item_name, esc_item_name_len);
1498 extended_rna_path[rna_path_len + 2 + esc_item_name_len] =
'"';
1499 extended_rna_path[rna_path_len + 2 + esc_item_name_len + 1] =
']';
1500 extended_rna_path[extended_rna_path_len] =
'\0';
1502 else if (rna_itemindex_a != -1) {
1503 BLI_assert(rna_itemindex_a == rna_itemindex_b);
1506 char item_index_buff[32];
1507 size_t item_index_buff_len = 0;
1508 if (rna_itemindex_a == 0) {
1509 item_index_buff[0] =
'0';
1510 item_index_buff_len = 1;
1514 for (index = rna_itemindex_a;
1515 index > 0 && item_index_buff_len <
sizeof(item_index_buff);
1517 item_index_buff[item_index_buff_len++] =
'0' + (char)(index % 10);
1522 extended_rna_path_len = rna_path_len + item_index_buff_len + 2;
1524 extended_rna_path =
MEM_mallocN(extended_rna_path_len + 1, __func__);
1527 memcpy(extended_rna_path, rna_path, rna_path_len);
1528 extended_rna_path[rna_path_len] =
'[';
1529 for (
size_t i = 1; i <= item_index_buff_len; i++) {
1532 extended_rna_path[rna_path_len + i] = item_index_buff[item_index_buff_len - i];
1534 extended_rna_path[rna_path_len + 1 + item_index_buff_len] =
']';
1535 extended_rna_path[extended_rna_path_len] =
'\0';
1538 extended_rna_path = (
char *)rna_path;
1539 extended_rna_path_len = rna_path_len;
1548 extended_rna_path_len,
1553 *r_override_changed =
true;
1556 if (!
ELEM(extended_rna_path, extended_rna_path_buffer, rna_path)) {
1560 # undef RNA_PATH_BUFFSIZE
1572 # define RNA_PROPERTY_GET_SINGLE(_typename, _ptr, _prop, _index) \
1573 (is_array ? RNA_property_##_typename##_get_index((_ptr), (_prop), (_index)) : \
1574 RNA_property_##_typename##_get((_ptr), (_prop)))
1575 # define RNA_PROPERTY_SET_SINGLE(_typename, _ptr, _prop, _index, _value) \
1576 (is_array ? RNA_property_##_typename##_set_index((_ptr), (_prop), (_index), (_value)) : \
1577 RNA_property_##_typename##_set((_ptr), (_prop), (_value)))
1589 const char *rna_path,
1590 const size_t rna_path_len,
1592 bool *r_override_changed)
1618 bool created =
false;
1621 switch (rna_prop_type) {
1625 bool *array_a, *array_b;
1635 const int comp = memcmp(array_a, array_b,
sizeof(
bool) * len_a);
1637 if (do_create && comp != 0) {
1641 if (op !=
NULL && created) {
1644 if (r_override_changed) {
1645 *r_override_changed = created;
1653 if (array_a != array_stack_a) {
1656 if (array_b != array_stack_b) {
1665 const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
1667 if (do_create && comp != 0) {
1670 if (op !=
NULL && created) {
1673 if (r_override_changed) {
1674 *r_override_changed = created;
1686 int *array_a, *array_b;
1696 const int comp = memcmp(array_a, array_b,
sizeof(
int) * len_a);
1698 if (do_create && comp != 0) {
1702 if (op !=
NULL && created) {
1705 if (r_override_changed) {
1706 *r_override_changed = created;
1714 if (array_a != array_stack_a) {
1717 if (array_b != array_stack_b) {
1726 const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
1728 if (do_create && comp != 0) {
1731 if (op !=
NULL && created) {
1734 if (r_override_changed) {
1735 *r_override_changed = created;
1747 float *array_a, *array_b;
1757 const int comp = memcmp(array_a, array_b,
sizeof(
float) * len_a);
1759 if (do_create && comp != 0) {
1763 if (op !=
NULL && created) {
1766 if (r_override_changed) {
1767 *r_override_changed = created;
1775 if (array_a != array_stack_a) {
1778 if (array_b != array_stack_b) {
1787 const int comp = (value_a < value_b) ? -1 : (value_a > value_b) ? 1 : 0;
1789 if (do_create && comp != 0) {
1792 if (op !=
NULL && created) {
1795 if (r_override_changed) {
1796 *r_override_changed = created;
1808 const int comp = value_a != value_b;
1810 if (do_create && comp != 0) {
1813 if (op !=
NULL && created) {
1816 if (r_override_changed) {
1817 *r_override_changed = created;
1826 char fixed_a[4096], fixed_b[4096];
1827 int len_str_a, len_str_b;
1829 ptr_a, rawprop_a, fixed_a,
sizeof(fixed_a), &len_str_a);
1831 ptr_b, rawprop_b, fixed_b,
sizeof(fixed_b), &len_str_b);
1836 const int comp = len_str_a < len_str_b ?
1838 len_str_a > len_str_b ? 1 : strcmp(value_a, value_b);
1840 const int comp = strcmp(value_a, value_b);
1842 if (do_create && comp != 0) {
1845 if (op !=
NULL && created) {
1848 if (r_override_changed) {
1849 *r_override_changed = created;
1854 if (value_a != fixed_a) {
1857 if (value_b != fixed_b) {
1869 const bool no_prop_name =
true;
1877 return rna_property_override_diff_propptr(bmain,
1894 r_override_changed);
1912 char buff_prev_a[4096] = {0};
1914 char *propname_a =
NULL;
1915 char *prev_propname_a = buff_prev_a;
1916 char *propname_b =
NULL;
1918 if (use_collection_insertion) {
1934 for (; iter_a.
valid && !abort;) {
1935 bool is_valid_for_diffing;
1936 bool is_valid_for_insertion;
1938 bool is_id =
false, is_null =
false, is_type_diff =
false;
1940 is_valid_for_insertion = use_collection_insertion;
1945 is_valid_for_diffing = rna_property_override_diff_propptr_validate_diffing(
1961 is_valid_for_diffing =
false;
1962 if (is_valid_for_insertion) {
1964 rna_property_override_diff_propptr_validate_diffing(&iter_a.
ptr,
1981 if (is_id || is_valid_for_diffing) {
1982 is_valid_for_insertion =
false;
1988 "Checking %s, %s [%d] vs %s [%d]; is_id: %d, diffing: %d; "
1989 "insert: %d (could be used: %d, do_create: %d)\n",
1991 propname_a ? propname_a :
"",
1993 propname_b ? propname_b :
"",
1996 is_valid_for_diffing,
1997 is_valid_for_insertion,
1998 use_collection_insertion,
2003 if (!(is_id || is_valid_for_diffing || is_valid_for_insertion)) {
2018 if (is_valid_for_insertion && use_collection_insertion) {
2023 no_prop_name ?
NULL : prev_propname_a,
2024 no_prop_name ?
NULL : propname_a,
2031 printf(
"%s: Adding insertion op override after '%s'/%d\n",
2040 else if (is_id || is_valid_for_diffing) {
2041 if (equals || do_create) {
2042 const int comp = rna_property_override_diff_propptr(bmain,
2059 r_override_changed);
2060 equals = equals && (comp == 0);
2064 if (prev_propname_a != buff_prev_a) {
2066 prev_propname_a = buff_prev_a;
2068 prev_propname_a[0] =
'\0';
2069 if (propname_a !=
NULL &&
2071 sizeof(buff_prev_a) - 1) {
2074 if (propname_a != buff_a) {
2076 propname_a = buff_a;
2078 propname_a[0] =
'\0';
2079 if (propname_b != buff_b) {
2081 propname_b = buff_b;
2083 propname_b[0] =
'\0';
2085 if (!do_create && !equals) {
2090 if (!(use_collection_insertion && !(is_id || is_valid_for_diffing))) {
2098 }
while (iter_a.
valid);
2111 equals = equals && !(iter_a.
valid || iter_b.
valid) && !abort;
2115 return (equals ==
false);
2140 const int len_local,
2141 const int len_reference,
2142 const int len_storage,
2145 BLI_assert(len_local == len_reference && (!ptr_storage || len_local == len_storage));
2148 bool changed =
false;
2149 const bool is_array = len_local > 0;
2169 BLI_assert_msg(0,
"Boolean properties support no override diff operation");
2172 int prop_min, prop_max;
2175 if (is_array && index == -1) {
2177 int *array_a, *array_b;
2180 MEM_mallocN(
sizeof(*array_a) * len_local, __func__) :
2193 MEM_mallocN(
sizeof(*array_b) * len_local, __func__) :
2196 for (
int i = len_local; i--;) {
2197 array_b[i] = fac * (array_b[i] - array_a[i]);
2198 if (array_b[i] < prop_min || array_b[i] > prop_max) {
2200 for (
int j = len_local; j--;) {
2201 array_b[j] = j >= i ? -array_b[j] : fac * (array_a[j] - array_b[j]);
2202 if (array_b[j] < prop_min || array_b[j] > prop_max) {
2217 if (array_b != array_stack_b) {
2223 BLI_assert_msg(0,
"Unsupported RNA override diff operation on integer");
2227 if (array_a != array_stack_a) {
2232 const int value = RNA_PROPERTY_GET_SINGLE(
int, ptr_reference, prop_reference, index);
2241 int b = fac * (RNA_PROPERTY_GET_SINGLE(
int, ptr_local, prop_local, index) - value);
2242 if (b < prop_min || b > prop_max) {
2245 if (b < prop_min || b > prop_max) {
2251 RNA_PROPERTY_SET_SINGLE(
int, ptr_storage, prop_storage, index,
b);
2255 BLI_assert_msg(0,
"Unsupported RNA override diff operation on integer");
2262 float prop_min, prop_max;
2265 if (is_array && index == -1) {
2267 float *array_a, *array_b;
2270 MEM_mallocN(
sizeof(*array_a) * len_local, __func__) :
2283 MEM_mallocN(
sizeof(*array_b) * len_local, __func__) :
2286 for (
int i = len_local; i--;) {
2287 array_b[i] = fac * (array_b[i] - array_a[i]);
2288 if (array_b[i] < prop_min || array_b[i] > prop_max) {
2290 for (
int j = len_local; j--;) {
2291 array_b[j] = j >= i ? -array_b[j] : fac * (array_a[j] - array_b[j]);
2292 if (array_b[j] < prop_min || array_b[j] > prop_max) {
2307 if (array_b != array_stack_b) {
2315 MEM_mallocN(
sizeof(*array_b) * len_local, __func__) :
2318 for (
int i = len_local; i--;) {
2319 array_b[i] = array_a[i] == 0.0f ? array_b[i] : array_b[i] / array_a[i];
2320 if (array_b[i] < prop_min || array_b[i] > prop_max) {
2330 if (array_b != array_stack_b) {
2336 BLI_assert_msg(0,
"Unsupported RNA override diff operation on float");
2340 if (array_a != array_stack_a) {
2345 const float value = RNA_PROPERTY_GET_SINGLE(
float, ptr_reference, prop_reference, index);
2354 float b = fac * (RNA_PROPERTY_GET_SINGLE(
float, ptr_local, prop_local, index) - value);
2355 if (b < prop_min || b > prop_max) {
2358 if (b < prop_min || b > prop_max) {
2364 RNA_PROPERTY_SET_SINGLE(
float, ptr_storage, prop_storage, index,
b);
2369 (value == 0.0f ? 1.0f : value);
2370 if (b < prop_min || b > prop_max) {
2379 BLI_assert_msg(0,
"Unsupported RNA override diff operation on float");
2387 BLI_assert_msg(0,
"Enum properties support no override diff operation");
2390 BLI_assert_msg(0,
"Pointer properties support no override diff operation");
2393 BLI_assert_msg(0,
"String properties support no override diff operation");
2397 BLI_assert_msg(0,
"Collection properties support no override diff operation");
2415 const int len_storage,
2426 if (prop_src_type != prop_dst_type ||
2429 "%s.%s: Inconsistency between stored property type (%d) and linked reference one "
2430 "(%d), skipping liboverride apply",
2432 "<unknown RNA path>",
2440 BLI_assert(len_dst == len_src && (!prop_storage || len_dst == len_storage));
2443 const bool is_array = len_dst > 0;
2445 const short override_op = opop->
operation;
2447 bool ret_success =
true;
2451 if (is_array && index == -1) {
2460 switch (override_op) {
2465 BLI_assert_msg(0,
"Unsupported RNA override operation on boolean");
2469 if (array_a != array_stack_a) {
2474 const bool value = RNA_PROPERTY_GET_SINGLE(
boolean, ptr_src, prop_src, index);
2476 switch (override_op) {
2478 RNA_PROPERTY_SET_SINGLE(
boolean, ptr_dst, prop_dst, index, value);
2481 BLI_assert_msg(0,
"Unsupported RNA override operation on boolean");
2487 if (is_array && index == -1) {
2489 int *array_a, *array_b;
2494 switch (override_op) {
2503 MEM_mallocN(
sizeof(*array_b) * len_dst, __func__) :
2507 for (
int i = len_dst; i--;) {
2508 array_a[i] += array_b[i];
2512 for (
int i = len_dst; i--;) {
2513 array_a[i] -= array_b[i];
2517 if (array_b != array_stack_b) {
2522 BLI_assert_msg(0,
"Unsupported RNA override operation on integer");
2526 if (array_a != array_stack_a) {
2531 const int storage_value = ptr_storage ? RNA_PROPERTY_GET_SINGLE(
2532 int, ptr_storage, prop_storage, index) :
2535 switch (override_op) {
2537 RNA_PROPERTY_SET_SINGLE(
int,
2541 RNA_PROPERTY_GET_SINGLE(
int, ptr_src, prop_src, index));
2544 RNA_PROPERTY_SET_SINGLE(
int,
2548 RNA_PROPERTY_GET_SINGLE(
int, ptr_dst, prop_dst, index) -
2552 RNA_PROPERTY_SET_SINGLE(
int,
2556 RNA_PROPERTY_GET_SINGLE(
int, ptr_dst, prop_dst, index) -
2560 BLI_assert_msg(0,
"Unsupported RNA override operation on integer");
2566 if (is_array && index == -1) {
2568 float *array_a, *array_b;
2573 switch (override_op) {
2583 MEM_mallocN(
sizeof(*array_b) * len_dst, __func__) :
2587 for (
int i = len_dst; i--;) {
2588 array_a[i] += array_b[i];
2592 for (
int i = len_dst; i--;) {
2593 array_a[i] -= array_b[i];
2597 for (
int i = len_dst; i--;) {
2598 array_a[i] *= array_b[i];
2602 if (array_b != array_stack_b) {
2607 BLI_assert_msg(0,
"Unsupported RNA override operation on float");
2611 if (array_a != array_stack_a) {
2616 const float storage_value = ptr_storage ? RNA_PROPERTY_GET_SINGLE(
2617 float, ptr_storage, prop_storage, index) :
2620 switch (override_op) {
2622 RNA_PROPERTY_SET_SINGLE(
float,
2626 RNA_PROPERTY_GET_SINGLE(
float, ptr_src, prop_src, index));
2629 RNA_PROPERTY_SET_SINGLE(
float,
2633 RNA_PROPERTY_GET_SINGLE(
float, ptr_dst, prop_dst, index) +
2637 RNA_PROPERTY_SET_SINGLE(
float,
2641 RNA_PROPERTY_GET_SINGLE(
float, ptr_dst, prop_dst, index) -
2645 RNA_PROPERTY_SET_SINGLE(
float,
2649 RNA_PROPERTY_GET_SINGLE(
float, ptr_dst, prop_dst, index) *
2653 BLI_assert_msg(0,
"Unsupported RNA override operation on float");
2661 switch (override_op) {
2675 switch (override_op) {
2680 BLI_assert_msg(0,
"Unsupported RNA override operation on pointer");
2689 switch (override_op) {
2694 BLI_assert_msg(0,
"Unsupported RNA override operation on string");
2698 if (value != buff) {
2709 if (!(is_src_idprop && is_dst_idprop)) {
2710 BLI_assert_msg(0,
"You need to define a specific override apply callback for collections");
2714 switch (override_op) {
2716 PointerRNA item_ptr_src, item_ptr_ref, item_ptr_dst;
2721 int item_index_src, item_index_ref;
2730 item_index_dst = item_index_ref + 1;
2768 ptr_dst, prop_dst, item_index_added, item_index_dst);
2772 BLI_assert_msg(0,
"Unsupported RNA override operation on collection");
2790 # undef RNA_PROPERTY_GET_SINGLE
2791 # undef RNA_PROPERTY_SET_SINGLE
2812 prop,
"rna_Struct_identifier_get",
"rna_Struct_identifier_length",
NULL);
2819 prop,
"rna_Struct_description_get",
"rna_Struct_description_length",
NULL);
2825 prop,
"rna_Struct_translation_context_get",
"rna_Struct_translation_context_length",
NULL);
2827 prop,
"Translation Context",
"Translation context of the struct's name");
2842 "Struct in which this struct is always nested, and to which it logically belongs");
2854 "rna_Struct_properties_begin",
2855 "rna_Struct_properties_next",
2856 "rna_iterator_listbase_end",
2857 "rna_Struct_properties_get",
2868 "rna_Struct_functions_begin",
2869 "rna_Struct_functions_next",
2870 "rna_iterator_listbase_end",
2871 "rna_Struct_functions_get",
2882 "rna_Struct_property_tags_begin",
2883 "rna_iterator_array_next",
2884 "rna_iterator_array_end",
2885 "rna_iterator_array_get",
2891 prop,
"Property Tags",
"Tags that properties can use to influence behavior");
2915 prop,
"rna_Property_identifier_get",
"rna_Property_identifier_length",
NULL);
2922 prop,
"rna_Property_description_get",
"rna_Property_description_length",
NULL);
2928 "rna_Property_translation_context_get",
2929 "rna_Property_translation_context_length",
2932 prop,
"Translation Context",
"Translation context of the property's name");
2951 prop,
"Base",
"Struct definition used for properties assigned to this item");
2984 prop,
"Required",
"False when this property is an optional argument in an RNA function");
2991 "Optional Argument",
2992 "True when the property is optional in a Python function implementing an RNA function");
3013 prop,
"Return",
"True when this property is an output value from an RNA function");
3019 prop,
"Registered",
"Property is registered as part of type registration");
3025 "Registered Optionally",
3026 "Property is optionally registered as part of type registration");
3042 prop,
"Library Editable",
"Property is editable from linked instances (changes not saved)");
3050 prop,
"Tags",
"Subset of tags (defined in parent struct) that are set for this property");
3065 prop,
"rna_Function_identifier_get",
"rna_Function_identifier_length",
NULL);
3072 prop,
"rna_Function_description_get",
"rna_Function_description_length",
NULL);
3079 "rna_Function_parameters_begin",
3080 "rna_iterator_listbase_next",
3081 "rna_iterator_listbase_end",
3082 "rna_iterator_listbase_get",
3093 prop,
"Registered",
"Function is registered as callback as part of type registration");
3100 "Registered Optionally",
3101 "Function is optionally registered as callback part of type registration");
3109 "Function does not pass itself as an argument (becomes a static method in python)");
3116 "Function passes itself type as an argument (becomes a class method "
3117 "in python if use_self is false)");
3150 prop,
"rna_NumberProperty_default_array_get_length");
3236 prop,
"Step",
"Step size used by number buttons, for floats 1/100th of the step size");
3244 "Number of digits after the dot used by buttons. Fraction is "
3245 "automatically hidden for exact integer values of fields with unit "
3246 "'NONE' or 'TIME' (frame count) and step divisible by 100");
3257 prop,
"rna_StringProperty_default_get",
"rna_StringProperty_default_length",
NULL);
3264 prop,
"Maximum Length",
"Maximum length of the string, 0 means unlimited");
3281 prop,
"rna_EnumProperty_default_get",
NULL,
"rna_EnumProperty_default_itemf");
3290 prop,
"rna_EnumProperty_default_get",
NULL,
"rna_EnumProperty_default_itemf");
3297 "rna_EnumProperty_items_begin",
3298 "rna_iterator_array_next",
3299 "rna_iterator_array_end",
3300 "rna_iterator_array_get",
3311 "rna_EnumProperty_items_begin",
3312 "rna_iterator_array_next",
3313 "rna_iterator_array_end",
3314 "rna_iterator_array_get",
3322 "Possible values for the property (never calls optional dynamic generation of those)");
3326 srna,
"Enum Item Definition",
"Definition of a choice in an RNA enum property");
3332 prop,
"rna_EnumPropertyItem_name_get",
"rna_EnumPropertyItem_name_length",
NULL);
3338 "rna_EnumPropertyItem_description_get",
3339 "rna_EnumPropertyItem_description_length",
3346 prop,
"rna_EnumPropertyItem_identifier_get",
"rna_EnumPropertyItem_identifier_length",
NULL);
3374 prop,
"rna_CollectionProperty_fixed_type_get",
NULL,
NULL,
NULL);
3404 "RNA floating-point number (single precision) property definition");
3417 "RNA enumeration property definition, to choose from a number of predefined options");
3423 srna,
"Pointer Definition",
"RNA pointer property to point to another RNA struct");
3429 "Collection Definition",
3430 "RNA collection property to define lists, arrays and mappings");
3445 "rna_BlenderRNA_structs_begin",
3446 "rna_iterator_listbase_next",
3447 "rna_iterator_listbase_end",
3448 "rna_iterator_listbase_get",
3456 "rna_BlenderRNA_structs_length",
3457 "rna_BlenderRNA_structs_lookup_int",
3458 "rna_BlenderRNA_structs_lookup_string",
void IDP_CopyPropertyContent(struct IDProperty *dst, struct IDProperty *src) ATTR_NONNULL()
struct IDOverrideLibraryProperty * BKE_lib_override_library_property_get(struct IDOverrideLibrary *override, const char *rna_path, bool *r_created)
struct IDOverrideLibraryPropertyOperation * BKE_lib_override_library_property_operation_find(struct IDOverrideLibraryProperty *override_property, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict)
struct IDOverrideLibraryProperty * BKE_lib_override_library_property_find(struct IDOverrideLibrary *override, const char *rna_path)
void BKE_lib_override_library_operations_tag(struct IDOverrideLibraryProperty *override_property, short tag, bool do_set)
struct IDOverrideLibraryPropertyOperation * BKE_lib_override_library_property_operation_get(struct IDOverrideLibraryProperty *override_property, short operation, const char *subitem_refname, const char *subitem_locname, int subitem_refindex, int subitem_locindex, bool strict, bool *r_strict, bool *r_created)
void BKE_lib_override_library_property_operation_delete(struct IDOverrideLibraryProperty *override_property, struct IDOverrideLibraryPropertyOperation *override_property_operation)
#define BLI_assert_unreachable()
#define BLI_assert_msg(a, msg)
void * BLI_ghash_lookup(const GHash *gh, const void *key) ATTR_WARN_UNUSED_RESULT
void BLI_kdtree_nd_() free(KDTree *tree)
#define LISTBASE_FOREACH_MUTABLE(type, var, list)
void * BLI_findlink(const struct ListBase *listbase, int number) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
int BLI_listbase_count(const struct ListBase *listbase) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1)
size_t BLI_strncpy_rlen(char *__restrict dst, const char *__restrict src, size_t maxncpy) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL()
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL() ATTR_MALLOC
size_t size_t char size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL()
#define UNUSED_VARS_NDEBUG(...)
#define CLOG_WARN(clg_ref,...)
#define CLOG_INFO(clg_ref, level,...)
ID and Library types, which are fundamental for sdna.
#define ID_IS_OVERRIDE_LIBRARY_VIRTUAL(_id)
@ IDOVERRIDE_LIBRARY_FLAG_IDPOINTER_MATCH_REFERENCE
@ IDP_FLAG_OVERRIDABLE_LIBRARY
@ IDOVERRIDE_LIBRARY_OP_MULTIPLY
@ IDOVERRIDE_LIBRARY_OP_INSERT_AFTER
@ IDOVERRIDE_LIBRARY_OP_SUBTRACT
@ IDOVERRIDE_LIBRARY_OP_ADD
@ IDOVERRIDE_LIBRARY_OP_INSERT_BEFORE
@ IDOVERRIDE_LIBRARY_OP_REPLACE
@ LIB_TAG_LIB_OVERRIDE_NEED_RESYNC
#define ID_IS_OVERRIDE_LIBRARY(_id)
@ IDOVERRIDE_LIBRARY_TAG_UNUSED
_GL_VOID GLfloat value _GL_VOID_RET _GL_VOID const GLuint GLboolean *residences _GL_BOOL_RET _GL_VOID GLsizei GLfloat GLfloat GLfloat GLfloat const GLubyte *bitmap _GL_VOID_RET _GL_VOID GLenum type
Read Guarded memory(de)allocation.
@ RNA_OVERRIDE_COMPARE_CREATE
@ RNA_OVERRIDE_MATCH_RESULT_CREATED
#define RNA_MAX_ARRAY_DIMENSION
@ STRUCT_PUBLIC_NAMESPACE
@ PROP_STRING_SEARCH_SUGGESTION
@ PROP_STRING_SEARCH_SORT
@ PROP_UNIT_TIME_ABSOLUTE
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
@ PROPOVERRIDE_LIBRARY_INSERTION
@ PROPOVERRIDE_NO_PROP_NAME
int(* IteratorSkipFunc)(struct CollectionPropertyIterator *iter, void *data)
return(oflags[bm->toolflag_index].f &oflag) !=0
void(* MEM_freeN)(void *vmemh)
void *(* MEM_mallocN)(size_t len, const char *str)
T length(const vec_base< T, Size > &a)
static const pxr::TfToken b("b", pxr::TfToken::Immortal)
float RNA_property_float_get(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_float_get_default_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
bool RNA_property_array_check(PropertyRNA *prop)
int RNA_property_collection_lookup_string_index(PointerRNA *ptr, PropertyRNA *prop, const char *key, PointerRNA *r_ptr, int *r_index)
void RNA_property_float_get_array(PointerRNA *ptr, PropertyRNA *prop, float *values)
PropertyRNA * rna_ensure_property(PropertyRNA *prop)
IDProperty * rna_idproperty_check(PropertyRNA **prop, PointerRNA *ptr)
void RNA_pointer_create(ID *id, StructRNA *type, void *data, PointerRNA *r_ptr)
bool RNA_struct_is_ID(const StructRNA *type)
const char * RNA_property_identifier(const PropertyRNA *prop)
const char * RNA_property_ui_description_raw(const PropertyRNA *prop)
void RNA_property_float_set_index(PointerRNA *ptr, PropertyRNA *prop, int index, float value)
PropertyUnit RNA_property_unit(PropertyRNA *prop)
int RNA_property_ui_icon(const PropertyRNA *prop)
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_collection_begin(PointerRNA *ptr, PropertyRNA *prop, CollectionPropertyIterator *iter)
void RNA_property_float_range(PointerRNA *ptr, PropertyRNA *prop, float *hardmin, float *hardmax)
void rna_iterator_listbase_end(CollectionPropertyIterator *UNUSED(iter))
void RNA_property_boolean_get_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
PropertyType RNA_property_type(PropertyRNA *prop)
const PointerRNA PointerRNA_NULL
void RNA_property_enum_set(PointerRNA *ptr, PropertyRNA *prop, int value)
PointerRNA RNA_property_pointer_get(PointerRNA *ptr, PropertyRNA *prop)
int RNA_property_collection_lookup_int(PointerRNA *ptr, PropertyRNA *prop, int key, PointerRNA *r_ptr)
void rna_iterator_listbase_begin(CollectionPropertyIterator *iter, ListBase *lb, IteratorSkipFunc skip)
bool RNA_property_boolean_get(PointerRNA *ptr, PropertyRNA *prop)
char * RNA_property_string_get_alloc(PointerRNA *ptr, PropertyRNA *prop, char *fixedbuf, int fixedlen, int *r_len)
void RNA_property_boolean_get_default_array(PointerRNA *ptr, PropertyRNA *prop, bool *values)
unsigned int RNA_enum_items_count(const EnumPropertyItem *item)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, void *ptr, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
int RNA_property_int_get(PointerRNA *ptr, PropertyRNA *prop)
IDProperty * RNA_struct_idprops(PointerRNA *ptr, bool create)
void RNA_property_collection_next(CollectionPropertyIterator *iter)
const char * RNA_property_translation_context(const PropertyRNA *prop)
StructRNA * RNA_property_pointer_type(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
void rna_iterator_listbase_next(CollectionPropertyIterator *iter)
PointerRNA rna_pointer_inherit_refine(PointerRNA *ptr, StructRNA *type, void *data)
const EnumPropertyItem * RNA_struct_property_tag_defines(const StructRNA *type)
PropertyRNA * RNA_struct_name_property(const StructRNA *type)
void RNA_property_collection_add(PointerRNA *ptr, PropertyRNA *prop, PointerRNA *r_ptr)
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)
int RNA_property_enum_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)
PropertySubType RNA_property_subtype(PropertyRNA *prop)
void RNA_property_int_range(PointerRNA *ptr, PropertyRNA *prop, int *hardmin, int *hardmax)
int RNA_property_tags(PropertyRNA *prop)
void RNA_property_collection_end(CollectionPropertyIterator *iter)
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)
const char * RNA_property_ui_name_raw(const PropertyRNA *prop)
int RNA_property_collection_length(PointerRNA *ptr, PropertyRNA *prop)
void RNA_property_boolean_set_array(PointerRNA *ptr, PropertyRNA *prop, const bool *values)
void RNA_property_string_set(PointerRNA *ptr, PropertyRNA *prop, const char *value)
bool RNA_struct_equals(Main *bmain, PointerRNA *ptr_a, PointerRNA *ptr_b, eRNACompareMode mode)
#define RNA_PATH_BUFFSIZE
bool RNA_struct_override_matches(Main *bmain, PointerRNA *ptr_local, PointerRNA *ptr_reference, const char *root_path, const size_t root_path_len, IDOverrideLibrary *override, const eRNAOverrideMatch flags, eRNAOverrideMatchResult *r_report_flags)
void RNA_def_struct_refine_func(StructRNA *srna, const char *refine)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_collection_funcs(PropertyRNA *prop, const char *begin, const char *next, const char *end, const char *get, const char *length, const char *lookupint, const char *lookupstring, const char *assignint)
void RNA_def_struct_ui_text(StructRNA *srna, const char *name, const char *description)
void RNA_def_property_boolean_funcs(PropertyRNA *prop, const char *get, const char *set)
void RNA_def_property_dynamic_array_funcs(PropertyRNA *prop, const char *getlength)
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_enum_item_end(EnumPropertyItem **items, int *totitem)
void RNA_def_struct_name_property(struct StructRNA *srna, struct PropertyRNA *prop)
void RNA_def_property_clear_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_pointer_funcs(PropertyRNA *prop, const char *get, const char *set, const char *type_fn, const char *poll)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_enum_item_add(EnumPropertyItem **items, int *totitem, const EnumPropertyItem *item)
void RNA_def_property_int_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_def_struct_ui_icon(StructRNA *srna, int icon)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
int rna_builtin_properties_lookup_string(PointerRNA *ptr, const char *key, PointerRNA *r_ptr)
PointerRNA rna_builtin_properties_get(struct CollectionPropertyIterator *iter)
void rna_builtin_properties_next(struct CollectionPropertyIterator *iter)
bool rna_property_override_store_default(struct Main *bmain, struct PointerRNA *ptr_local, struct PointerRNA *ptr_reference, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_local, struct PropertyRNA *prop_reference, struct PropertyRNA *prop_storage, int len_local, int len_reference, int len_storage, struct IDOverrideLibraryPropertyOperation *opop)
int rna_property_override_diff_default(struct Main *bmain, struct PropertyRNAOrID *prop_a, struct PropertyRNAOrID *prop_b, int mode, struct IDOverrideLibrary *override, const char *rna_path, size_t rna_path_len, int flags, bool *r_override_changed)
void rna_builtin_properties_begin(struct CollectionPropertyIterator *iter, struct PointerRNA *ptr)
bool rna_property_override_apply_default(struct Main *bmain, struct PointerRNA *ptr_dst, struct PointerRNA *ptr_src, struct PointerRNA *ptr_storage, struct PropertyRNA *prop_dst, struct PropertyRNA *prop_src, struct PropertyRNA *prop_storage, int len_dst, int len_src, int len_storage, struct PointerRNA *ptr_item_dst, struct PointerRNA *ptr_item_src, struct PointerRNA *ptr_item_storage, struct IDOverrideLibraryPropertyOperation *opop)
PointerRNA rna_builtin_type_get(struct PointerRNA *ptr)
void RNA_def_rna(BlenderRNA *brna)
const EnumPropertyItem rna_enum_property_type_items[]
const EnumPropertyItem rna_enum_property_override_flag_collection_items[]
static void rna_def_pointer_property(StructRNA *srna, PropertyType type)
const EnumPropertyItem rna_enum_property_subtype_number_array_items[]
const EnumPropertyItem DummyRNA_DEFAULT_items[]
static void rna_def_number_property(StructRNA *srna, PropertyType type)
static void rna_def_enum_property(BlenderRNA *brna, StructRNA *srna)
static void rna_def_property(BlenderRNA *brna)
const EnumPropertyItem rna_enum_property_unit_items[]
const EnumPropertyItem rna_enum_property_subtype_number_items[]
static void rna_def_string_property(StructRNA *srna)
const EnumPropertyItem rna_enum_property_string_search_flag_items[]
#define RNA_ENUM_PROPERTY_SUBTYPE_STRING_ITEMS
const EnumPropertyItem rna_enum_property_override_flag_items[]
static void rna_def_struct(BlenderRNA *brna)
const EnumPropertyItem rna_enum_property_subtype_items[]
const EnumPropertyItem rna_enum_property_subtype_string_items[]
#define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ARRAY_ITEMS
static void rna_def_function(BlenderRNA *brna)
const EnumPropertyItem DummyRNA_NULL_items[]
const EnumPropertyItem rna_enum_property_flag_items[]
#define RNA_ENUM_PROPERTY_SUBTYPE_NUMBER_ITEMS
const EnumPropertyItem rna_enum_property_flag_enum_items[]
const EnumPropertyItem rna_enum_icon_items[]
struct GHash * structs_map
PointerRNA builtin_parent
ListBaseIterator listbase
union CollectionPropertyIterator::@1147 internal
struct PropertyRNA * prop
int subitem_reference_index
char * subitem_local_name
char * subitem_reference_name
unsigned int rna_prop_type
IDOverrideLibrary * override_library
unsigned int arraydimension
struct PropertyRNA * next
unsigned int arraylength[RNA_MAX_ARRAY_DIMENSION]
unsigned int totarraylength