31 {
BMO_DELIM_UV,
"UV", 0,
"UVs",
"Delimit by UV coordinates"},
32 {0,
nullptr, 0,
nullptr,
nullptr},
36 {
REMESH_VOXEL,
"VOXEL", 0,
"Voxel",
"Use the voxel remesher"},
37 {
REMESH_QUAD,
"QUAD", 0,
"Quad",
"Use the quad remesher"},
38 {0,
nullptr, 0,
nullptr,
nullptr},
43# include <fmt/format.h>
93 return rna_mesh_vdata_helper(mesh);
98 return rna_mesh_ldata_helper(mesh);
113static void rna_MeshVertexLayer_name_set(
PointerRNA *
ptr,
const char *value)
122 rna_cd_layer_name_set(rna_mesh_vdata(
ptr), layer, value);
126static void rna_MeshEdgeLayer_name_set(
PointerRNA *
ptr,
const char *value)
135 rna_cd_layer_name_set(rna_mesh_edata(
ptr), layer, value);
139static void rna_MeshLoopLayer_name_set(
PointerRNA *
ptr,
const char *value)
148 rna_cd_layer_name_set(rna_mesh_ldata(
ptr), layer, value);
175static void rna_Mesh_update_data_legacy_deg_tag_all(
Main * ,
179 ID *
id =
ptr->owner_id;
190 ID *
id =
ptr->owner_id;
203 rna_Mesh_update_data_legacy_deg_tag_all(bmain, scene,
ptr);
210 rna_Mesh_update_data_legacy_deg_tag_all(bmain, scene,
ptr);
214 ID *
id =
ptr->owner_id;
224 ID *
id =
ptr->owner_id;
269 rna_Mesh_update_data_legacy_deg_tag_all(bmain, scene,
ptr);
280 const Mesh *mesh = rna_mesh(
ptr);
282 const int index = int(position - mesh->vert_positions().data());
291 const Mesh *mesh = rna_mesh(
ptr);
295 const int index = int(edge - edges);
303 const Mesh *mesh = rna_mesh(
ptr);
304 const int *face_offset =
static_cast<const int *
>(
ptr->data);
305 const int index = int(face_offset - mesh->face_offsets().data());
313 const Mesh *mesh = rna_mesh(
ptr);
314 const int *corner_vert =
static_cast<const int *
>(
ptr->data);
315 const int index = int(corner_vert - mesh->corner_verts().data());
323 const Mesh *mesh = rna_mesh(
ptr);
325 const int index = int(tri - mesh->corner_tris().data());
331static int rna_MeshLoopTriangle_polygon_index_get(
PointerRNA *
ptr)
333 const Mesh *mesh = rna_mesh(
ptr);
334 const int index = rna_MeshLoopTriangle_index_get(
ptr);
335 return mesh->corner_tri_faces()[index];
340 const Mesh *mesh = rna_mesh(
ptr);
353 const Mesh *mesh = rna_mesh(
ptr);
359 const Mesh *mesh = rna_mesh(
ptr);
365 &RNA_MeshLoopTriangle,
374 const Mesh *mesh = rna_mesh(
ptr);
377 const_cast<int *
>(mesh->corner_tri_faces().data()),
386 const Mesh *mesh = rna_mesh(
ptr);
392 *
ptr, &RNA_ReadOnlyInteger,
const_cast<int *
>(&mesh->corner_tri_faces()[index]), *r_ptr);
396static void rna_MeshVertex_co_get(
PointerRNA *
ptr,
float *value)
401static void rna_MeshVertex_co_set(
PointerRNA *
ptr,
const float *value)
405 mesh->tag_positions_changed();
408static void rna_MeshVertex_normal_get(
PointerRNA *
ptr,
float *value)
412 const int index = rna_MeshVertex_index_get(
ptr);
418 const Mesh *mesh = rna_mesh(
ptr);
419 const bool *hide_vert =
static_cast<const bool *
>(
421 const int index = rna_MeshVertex_index_get(
ptr);
422 return hide_vert ==
nullptr ?
false : hide_vert[index];
425static void rna_MeshVertex_hide_set(
PointerRNA *
ptr,
bool value)
438 const int index = rna_MeshVertex_index_get(
ptr);
439 hide_vert[index] = value;
444 const Mesh *mesh = rna_mesh(
ptr);
445 const bool *select_vert =
static_cast<const bool *
>(
447 const int index = rna_MeshVertex_index_get(
ptr);
448 return select_vert ==
nullptr ?
false : select_vert[index];
451static void rna_MeshVertex_select_set(
PointerRNA *
ptr,
bool value)
464 const int index = rna_MeshVertex_index_get(
ptr);
465 select_vert[index] = value;
470 return *(
int *)
ptr->data;
473static void rna_MeshLoop_vertex_index_set(
PointerRNA *
ptr,
int value)
475 *(
int *)
ptr->data = value;
480 const Mesh *mesh = rna_mesh(
ptr);
481 const int index = rna_MeshLoop_index_get(
ptr);
482 return mesh->corner_edges()[index];
485static void rna_MeshLoop_edge_index_set(
PointerRNA *
ptr,
int value)
488 const int index = rna_MeshLoop_index_get(
ptr);
489 mesh->corner_edges_for_write()[index] = value;
492static void rna_MeshLoop_normal_get(
PointerRNA *
ptr,
float *values)
495 const int index = rna_MeshLoop_index_get(
ptr);
496 copy_v3_v3(values, mesh->corner_normals()[index]);
499static void rna_MeshLoop_tangent_get(
PointerRNA *
ptr,
float *values)
502 const int index = rna_MeshLoop_index_get(
ptr);
503 const float(*layer)[4] =
static_cast<const float(*)[4]
>(
510 copy_v3_v3(values, (
const float *)(layer + index));
517 const int index = rna_MeshLoop_index_get(
ptr);
518 const float(*vec)[4] =
static_cast<const float(*)[4]
>(
521 return (vec) ? vec[index][3] : 0.0f;
524static void rna_MeshLoop_bitangent_get(
PointerRNA *
ptr,
float *values)
527 const int index = rna_MeshLoop_index_get(
ptr);
528 const float(*vec)[4] =
static_cast<const float(*)[4]
>(
532 cross_v3_v3v3(values, mesh->corner_normals()[index], vec[index]);
540static void rna_MeshPolygon_normal_get(
PointerRNA *
ptr,
float *values)
544 const int poly_start = *((
const int *)
ptr->data);
545 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
546 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
553 const Mesh *mesh = rna_mesh(
ptr);
554 const bool *hide_poly =
static_cast<const bool *
>(
556 const int index = rna_MeshPolygon_index_get(
ptr);
557 return hide_poly ==
nullptr ?
false : hide_poly[index];
560static void rna_MeshPolygon_hide_set(
PointerRNA *
ptr,
bool value)
573 const int index = rna_MeshPolygon_index_get(
ptr);
574 hide_poly[index] = value;
579 const Mesh *mesh = rna_mesh(
ptr);
580 const bool *sharp_faces =
static_cast<const bool *
>(
582 const int index = rna_MeshPolygon_index_get(
ptr);
583 return !(sharp_faces && sharp_faces[index]);
586static void rna_MeshPolygon_use_smooth_set(
PointerRNA *
ptr,
bool value)
599 const int index = rna_MeshPolygon_index_get(
ptr);
600 if (value == sharp_faces[index]) {
601 sharp_faces[index] = !value;
602 mesh->tag_sharpness_changed();
608 const Mesh *mesh = rna_mesh(
ptr);
609 const bool *select_poly =
static_cast<const bool *
>(
611 const int index = rna_MeshPolygon_index_get(
ptr);
612 return select_poly ==
nullptr ?
false : select_poly[index];
615static void rna_MeshPolygon_select_set(
PointerRNA *
ptr,
bool value)
628 const int index = rna_MeshPolygon_index_get(
ptr);
629 select_poly[index] = value;
632static int rna_MeshPolygon_material_index_get(
PointerRNA *
ptr)
635 const Mesh *mesh = rna_mesh(
ptr);
639 return material_index[rna_MeshPolygon_index_get(
ptr)];
642static void rna_MeshPolygon_material_index_set(
PointerRNA *
ptr,
int value)
649 material_index.
varray.set(rna_MeshPolygon_index_get(
ptr),
max_ii(0, value));
653static void rna_MeshPolygon_center_get(
PointerRNA *
ptr,
float *values)
657 const int poly_start = *((
const int *)
ptr->data);
658 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
659 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
668 const int poly_start = *((
const int *)
ptr->data);
669 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
670 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
674static void rna_MeshPolygon_flip(
ID *
id,
MIntProperty *poly_offset_p)
678 const int index =
reinterpret_cast<int *
>(poly_offset_p) - mesh->faces().data().data();
684static void rna_MeshLoopTriangle_verts_get(
PointerRNA *
ptr,
int *values)
689 values[0] = corner_verts[tri[0]];
690 values[1] = corner_verts[tri[1]];
691 values[2] = corner_verts[tri[2]];
694static void rna_MeshLoopTriangle_normal_get(
PointerRNA *
ptr,
float *values)
700 const int v1 = corner_verts[tri[0]];
701 const int v2 = corner_verts[tri[1]];
702 const int v3 = corner_verts[tri[2]];
707static void rna_MeshLoopTriangle_split_normals_get(
PointerRNA *
ptr,
float *values)
712 copy_v3_v3(values + 0, corner_normals[tri[0]]);
713 copy_v3_v3(values + 3, corner_normals[tri[1]]);
714 copy_v3_v3(values + 6, corner_normals[tri[2]]);
723 const int v1 = corner_verts[tri[0]];
724 const int v2 = corner_verts[tri[1]];
725 const int v3 = corner_verts[tri[2]];
726 return area_tri_v3(positions[v1], positions[
v2], positions[v3]);
729static void rna_MeshLoopColor_color_get(
PointerRNA *
ptr,
float *values)
733 values[0] = mlcol->r / 255.0f;
734 values[1] = mlcol->g / 255.0f;
735 values[2] = mlcol->b / 255.0f;
736 values[3] = mlcol->a / 255.0f;
739static void rna_MeshLoopColor_color_set(
PointerRNA *
ptr,
const float *values)
749static int rna_Mesh_texspace_editable(
const PointerRNA *
ptr,
const char ** )
755static void rna_Mesh_texspace_size_get(
PointerRNA *
ptr,
float values[3])
764static void rna_Mesh_texspace_location_get(
PointerRNA *
ptr,
float values[3])
776 MDeformVert *dverts = mesh->deform_verts_for_write().data();
778 const int index = rna_MeshVertex_index_get(
ptr);
789static void rna_MeshVertex_undeformed_co_get(
PointerRNA *
ptr,
float values[3])
792 const float *position = (
const float *)
ptr->data;
793 const float(*orco)[3] =
static_cast<const float(*)[3]
>(
797 const int index = rna_MeshVertex_index_get(
ptr);
799 float texspace_location[3], texspace_size[3];
803 madd_v3_v3v3v3(values, texspace_location, orco[index], texspace_size);
829static void rna_CustomDataLayer_active_set(
861static bool rna_MEdge_freestyle_edge_mark_get(
PointerRNA *
ptr)
863 const Mesh *mesh = rna_mesh(
ptr);
864 const int index = rna_MeshEdge_index_get(
ptr);
871static void rna_MEdge_freestyle_edge_mark_set(
PointerRNA *
ptr,
bool value)
874 const int index = rna_MeshEdge_index_get(
ptr);
890static bool rna_MPoly_freestyle_face_mark_get(
PointerRNA *
ptr)
892 const Mesh *mesh = rna_mesh(
ptr);
893 const int index = rna_MeshPolygon_index_get(
ptr);
900static void rna_MPoly_freestyle_face_mark_set(
PointerRNA *
ptr,
bool value)
903 const int index = rna_MeshPolygon_index_get(
ptr);
933static std::optional<std::string> rna_MeshUVLoopLayer_path(
const PointerRNA *
ptr)
936 char name_esc[
sizeof(cdl->
name) * 2];
938 return fmt::format(
"uv_layers[\"{}\"]", name_esc);
945 const int length = (mesh->
runtime->edit_mesh) ? 0 : mesh->corners_num;
960 if (layer ==
nullptr) {
977 const StringRef name = layername_func(layer->name, buffer);
981 MeshUVLoopLayer_get_bool_layer(mesh, name),
1000 const StringRef name = layername_func(layer->name, buffer);
1002 *
ptr, &RNA_BoolAttributeValue, MeshUVLoopLayer_get_bool_layer(mesh, name) + index, *r_ptr);
1013static bool rna_MeshUVLoopLayer_vert_select_lookup_int(
PointerRNA *
ptr,
1027static bool rna_MeshUVLoopLayer_edge_select_lookup_int(
PointerRNA *
ptr,
1067 *
ptr, &RNA_Float2AttributeValue, (
float *)layer->data + 2 * index, *r_ptr);
1071static bool rna_MeshUVLoopLayer_active_render_get(
PointerRNA *
ptr)
1086static void rna_MeshUVLoopLayer_active_render_set(
PointerRNA *
ptr,
bool value)
1091static void rna_MeshUVLoopLayer_active_set(
PointerRNA *
ptr,
bool value)
1096static void rna_MeshUVLoopLayer_clone_set(
PointerRNA *
ptr,
bool value)
1114static void rna_Mesh_vertex_color_active_set(
PointerRNA *
ptr,
1128static int rna_Mesh_vertex_color_active_index_get(
PointerRNA *
ptr)
1141static void rna_Mesh_vertex_color_active_index_set(
PointerRNA *
ptr,
int value)
1147 fprintf(stderr,
"Invalid loop byte attribute index %d\n", value);
1170static int rna_MeshLoopColorLayer_data_length(
PointerRNA *
ptr)
1176static bool rna_mesh_color_active_render_get(
PointerRNA *
ptr)
1178 const Mesh *mesh = rna_mesh(
ptr);
1185 const Mesh *mesh = rna_mesh(
ptr);
1190static void rna_mesh_color_active_render_set(
PointerRNA *
ptr,
bool value)
1192 if (value ==
false) {
1200static void rna_mesh_color_active_set(
PointerRNA *
ptr,
bool value)
1202 if (value ==
false) {
1214static std::optional<std::string> rna_MeshSkinVertexLayer_path(
const PointerRNA *
ptr)
1217 char name_esc[
sizeof(cdl->
name) * 2];
1219 return fmt::format(
"skin_vertices[\"{}\"]", name_esc);
1222static std::optional<std::string> rna_VertCustomData_data_path(
const PointerRNA *
ptr,
1223 const char *collection,
1225static std::optional<std::string> rna_MeshSkinVertex_path(
const PointerRNA *
ptr)
1243static int rna_MeshSkinVertexLayer_data_length(
PointerRNA *
ptr)
1252static int rna_MeshPoly_vertices_get_length(
const PointerRNA *
ptr,
1255 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1256 const int poly_start = *poly_offset_p;
1257 const int poly_size = *(poly_offset_p + 1) - poly_start;
1260 return (
length[0] = poly_size);
1263static void rna_MeshPoly_vertices_get(
PointerRNA *
ptr,
int *values)
1265 const Mesh *mesh = rna_mesh(
ptr);
1266 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1267 const int poly_start = *poly_offset_p;
1268 const int poly_size = *(poly_offset_p + 1) - poly_start;
1269 memcpy(values, &mesh->corner_verts()[poly_start],
sizeof(
int) * poly_size);
1274 const int *
data =
static_cast<const int *
>(
ptr->data);
1278static void rna_MeshPoly_vertices_set(
PointerRNA *
ptr,
const int *values)
1281 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1282 const int poly_start = *poly_offset_p;
1283 const int poly_size = *(poly_offset_p + 1) - poly_start;
1284 memcpy(&mesh->corner_verts_for_write()[poly_start], values,
sizeof(
int) * poly_size);
1289static void rna_MeshPoly_material_index_range(
1300 const Mesh *mesh = rna_mesh(
ptr);
1301 const bool *hide_edge =
static_cast<const bool *
>(
1303 const int index = rna_MeshEdge_index_get(
ptr);
1304 return hide_edge ==
nullptr ?
false : hide_edge[index];
1307static void rna_MeshEdge_hide_set(
PointerRNA *
ptr,
bool value)
1320 const int index = rna_MeshEdge_index_get(
ptr);
1321 hide_edge[index] = value;
1326 const Mesh *mesh = rna_mesh(
ptr);
1327 const bool *select_edge =
static_cast<const bool *
>(
1329 const int index = rna_MeshEdge_index_get(
ptr);
1330 return select_edge ==
nullptr ?
false : select_edge[index];
1333static void rna_MeshEdge_select_set(
PointerRNA *
ptr,
bool value)
1346 const int index = rna_MeshEdge_index_get(
ptr);
1347 select_edge[index] = value;
1352 const Mesh *mesh = rna_mesh(
ptr);
1353 const bool *sharp_edge =
static_cast<const bool *
>(
1355 const int index = rna_MeshEdge_index_get(
ptr);
1356 return sharp_edge ==
nullptr ?
false : sharp_edge[index];
1359static void rna_MeshEdge_use_edge_sharp_set(
PointerRNA *
ptr,
bool value)
1372 const int index = rna_MeshEdge_index_get(
ptr);
1373 if (value != sharp_edge[index]) {
1374 sharp_edge[index] = value;
1375 mesh->tag_sharpness_changed();
1381 const Mesh *mesh = rna_mesh(
ptr);
1382 const bool *seam_edge =
static_cast<const bool *
>(
1384 const int index = rna_MeshEdge_index_get(
ptr);
1385 return seam_edge ==
nullptr ?
false : seam_edge[index];
1388static void rna_MeshEdge_use_seam_set(
PointerRNA *
ptr,
bool value)
1401 const int index = rna_MeshEdge_index_get(
ptr);
1402 seam_edge[index] = value;
1407 const Mesh *mesh = rna_mesh(
ptr);
1408 const int index = rna_MeshEdge_index_get(
ptr);
1413static int rna_MeshLoopTriangle_material_index_get(
PointerRNA *
ptr)
1416 const Mesh *mesh = rna_mesh(
ptr);
1420 return material_indices[rna_MeshLoopTriangle_polygon_index_get(
ptr)];
1423static bool rna_MeshLoopTriangle_use_smooth_get(
PointerRNA *
ptr)
1425 const Mesh *mesh = rna_mesh(
ptr);
1426 const int face_i = rna_MeshLoopTriangle_polygon_index_get(
ptr);
1427 const bool *sharp_faces =
static_cast<const bool *
>(
1429 return !(sharp_faces && sharp_faces[face_i]);
1434static std::optional<std::string> rna_VertexGroupElement_path(
const PointerRNA *
ptr)
1436 const Mesh *mesh = rna_mesh(
ptr);
1438 const MDeformVert *dvert = mesh->deform_verts().data();
1441 for (a = 0; a < mesh->
verts_num; a++, dvert++) {
1443 if (dw == &dvert->
dw[
b]) {
1444 return fmt::format(
"vertices[{}].groups[{}]", a,
b);
1449 return std::nullopt;
1452static std::optional<std::string> rna_MeshPolygon_path(
const PointerRNA *
ptr)
1454 return fmt::format(
"polygons[{}]", rna_MeshPolygon_index_get(
const_cast<PointerRNA *
>(
ptr)));
1457static std::optional<std::string> rna_MeshLoopTriangle_path(
const PointerRNA *
ptr)
1459 const int index = rna_MeshLoopTriangle_index_get(
const_cast<PointerRNA *
>(
ptr));
1460 return fmt::format(
"loop_triangles[{}]", index);
1463static std::optional<std::string> rna_MeshEdge_path(
const PointerRNA *
ptr)
1465 return fmt::format(
"edges[{}]", rna_MeshEdge_index_get(
const_cast<PointerRNA *
>(
ptr)));
1468static std::optional<std::string> rna_MeshLoop_path(
const PointerRNA *
ptr)
1470 return fmt::format(
"loops[{}]", rna_MeshLoop_index_get(
const_cast<PointerRNA *
>(
ptr)));
1473static std::optional<std::string> rna_MeshVertex_path(
const PointerRNA *
ptr)
1475 return fmt::format(
"vertices[{}]", rna_MeshVertex_index_get(
const_cast<PointerRNA *
>(
ptr)));
1478static std::optional<std::string> rna_VertCustomData_data_path(
const PointerRNA *
ptr,
1479 const char *collection,
1483 const Mesh *mesh = rna_mesh(
ptr);
1485 int a,
b, totvert = (mesh->
runtime->edit_mesh) ? 0 : mesh->verts_num;
1487 for (cdl = vdata->
layers, a = 0; a < vdata->totlayer; cdl++, a++) {
1488 if (cdl->
type == type) {
1490 if (
b >= 0 &&
b < totvert) {
1491 char name_esc[
sizeof(cdl->
name) * 2];
1493 return fmt::format(
"{}[\"{}\"].data[{}]", collection, name_esc,
b);
1498 return std::nullopt;
1501static std::optional<std::string> rna_LoopCustomData_data_path(
const PointerRNA *
ptr,
1502 const char *collection,
1506 const Mesh *mesh = rna_mesh(
ptr);
1508 int a,
b, totloop = (mesh->
runtime->edit_mesh) ? 0 : mesh->corners_num;
1510 for (cdl = ldata->
layers, a = 0; a < ldata->totlayer; cdl++, a++) {
1511 if (cdl->
type == type) {
1513 if (
b >= 0 &&
b < totloop) {
1514 char name_esc[
sizeof(cdl->
name) * 2];
1516 return fmt::format(
"{}[\"{}\"].data[{}]", collection, name_esc,
b);
1521 return std::nullopt;
1529 mesh->vert_positions_for_write().data(),
1537 const Mesh *mesh = rna_mesh(
ptr);
1543 if (index < 0 || index >= mesh->
verts_num) {
1547 *
ptr, &RNA_MeshVertex, &mesh->vert_positions_for_write()[index], *r_ptr);
1562 const Mesh *mesh = rna_mesh(
ptr);
1569 if (index < 0 || index >= mesh->
edges_num) {
1583 mesh->face_offsets_for_write().data(),
1591 const Mesh *mesh = rna_mesh(
ptr);
1597 if (index < 0 || index >= mesh->
faces_num) {
1601 *
ptr, &RNA_MeshPolygon, &mesh->face_offsets_for_write()[index], *r_ptr);
1610 mesh->corner_verts_for_write().data(),
1618 const Mesh *mesh = rna_mesh(
ptr);
1628 *
ptr, &RNA_MeshLoop, &mesh->corner_verts_for_write()[index], *r_ptr);
1634 return int(rna_mesh(
ptr)->normals_domain());
1639 const Mesh *mesh = rna_mesh(
ptr);
1652 const Mesh *mesh = rna_mesh(
ptr);
1658 const Mesh *mesh = rna_mesh(
ptr);
1659 if (index < 0 || index >= mesh->
verts_num) {
1664 &RNA_MeshNormalValue,
1672 const Mesh *mesh = rna_mesh(
ptr);
1685 const Mesh *mesh = rna_mesh(
ptr);
1691 const Mesh *mesh = rna_mesh(
ptr);
1692 if (index < 0 || index >= mesh->
faces_num) {
1697 &RNA_MeshNormalValue,
1705 const Mesh *mesh = rna_mesh(
ptr);
1708 iter->
valid =
false;
1717 const Mesh *mesh = rna_mesh(
ptr);
1723 const Mesh *mesh = rna_mesh(
ptr);
1734static std::optional<std::string> rna_MeshUVLoop_path(
const PointerRNA *
ptr)
1749 int *r_uv_map_index,
1750 int *r_index_in_attribute)
1752 const Mesh *mesh = rna_mesh(
ptr);
1757 for (
int layer_i = 0; layer_i < uv_layers_num; layer_i++) {
1760 const ptrdiff_t index = uv_coord - layer_data;
1761 if (index >= 0 && index < mesh->corners_num) {
1762 *r_uv_map_index = layer_i;
1763 *r_index_in_attribute = index;
1774 const Mesh *mesh = rna_mesh(
ptr);
1777 const bool *
select =
nullptr;
1778 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1784static void rna_MeshUVLoop_select_set(
PointerRNA *
ptr,
const bool value)
1789 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1791 select[loop_index] = value;
1797 const Mesh *mesh = rna_mesh(
ptr);
1800 const bool *select_edge =
nullptr;
1801 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1804 return select_edge ? select_edge[loop_index] :
false;
1807static void rna_MeshUVLoop_select_edge_set(
PointerRNA *
ptr,
const bool value)
1812 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1814 select_edge[loop_index] = value;
1820 const Mesh *mesh = rna_mesh(
ptr);
1823 const bool *pin_uv =
nullptr;
1824 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1827 return pin_uv ? pin_uv[loop_index] :
false;
1830static void rna_MeshUVLoop_pin_uv_set(
PointerRNA *
ptr,
const bool value)
1835 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1837 pin_uv[loop_index] = value;
1841static void rna_MeshUVLoop_uv_get(
PointerRNA *
ptr,
float *value)
1846static void rna_MeshUVLoop_uv_set(
PointerRNA *
ptr,
const float *value)
1851static std::optional<std::string> rna_MeshLoopColorLayer_path(
const PointerRNA *
ptr)
1854 char name_esc[
sizeof(cdl->
name) * 2];
1856 return fmt::format(
"vertex_colors[\"{}\"]", name_esc);
1859static std::optional<std::string> rna_MeshColor_path(
const PointerRNA *
ptr)
1869 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totvertsel : 0;
1874 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totedgesel : 0;
1879 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totfacesel : 0;
1892 ldata = rna_mesh_ldata_helper(mesh);
1923 ldata = rna_mesh_ldata_helper(mesh);
1945 return (mesh->
runtime->edit_mesh !=
nullptr);
1948static bool rna_Mesh_materials_override_apply(
Main *bmain,
1958 "Unsupported RNA override operation on collections' objects");
1963 if (ptr_item_dst->type ==
nullptr || ptr_item_src->type ==
nullptr) {
1971 if (mat_src == mat_dst) {
1975 bool is_modified =
false;
1976 for (
int i = 0;
i < mesh_dst->totcol;
i++) {
1977 if (mesh_dst->mat[
i] == mat_dst) {
1979 mesh_dst->mat[
i] = mat_src;
2009 srna,
"Vertex Group Element",
"Weight value of a vertex in a vertex group");
2062 "rna_MeshVertex_groups_begin",
2063 "rna_iterator_array_next",
2064 "rna_iterator_array_end",
2065 "rna_iterator_array_get",
2072 prop,
"Groups",
"Weights for the vertex groups this vertex is member of");
2083 "Undeformed Location",
2084 "For meshes with modifiers applied, the coordinate of the vertex with no deforming "
2085 "modifiers applied, as used for generated texture coordinates");
2127 prop,
"rna_MeshEdge_use_edge_sharp_get",
"rna_MeshEdge_use_edge_sharp_set");
2138 prop,
"rna_MEdge_freestyle_edge_mark_get",
"rna_MEdge_freestyle_edge_mark_set");
2152 const int splitnor_dim[] = {3, 3};
2183 prop,
"Triangle Normal",
"Local space unit length normal vector for this triangle");
2193 "Local space unit length split normal vectors of the face corners of this triangle");
2228 prop,
"rna_MeshLoop_vertex_index_get",
"rna_MeshLoop_vertex_index_set",
nullptr);
2234 prop,
"rna_MeshLoop_edge_index_get",
"rna_MeshLoop_edge_index_set",
nullptr);
2250 "The normal direction of the face corner, taking into account sharp "
2251 "faces, sharp edges, and custom normal data");
2260 "Local space unit length tangent vector of this vertex for this face "
2261 "(must be computed beforehand using calc_tangents)");
2270 "Sign of the bitangent vector of this vertex for this face (must be computed "
2271 "beforehand using calc_tangents, bitangent = bitangent_sign * cross(normal, tangent))");
2281 "Bitangent vector of this vertex for this face (must be computed beforehand using "
2282 "calc_tangents, use it only if really needed, slower access than bitangent_sign)");
2307 prop,
"rna_MeshPoly_vertices_get",
"rna_MeshPoly_vertices_set",
nullptr);
2324 prop,
"rna_MeshPolygon_material_index_get",
"rna_MeshPolygon_material_index_set",
nullptr);
2345 prop,
"rna_MeshPolygon_use_smooth_get",
"rna_MeshPolygon_use_smooth_set");
2351 prop,
"rna_MPoly_freestyle_face_mark_get",
"rna_MPoly_freestyle_face_mark_set");
2361 prop,
"Polygon Normal",
"Local space unit length normal vector for this face");
2398 "MeshUVLoop (Deprecated)",
2399 "Deprecated, use 'uv', 'vertex_select', 'edge_select' or 'pin' properties instead");
2402 "rna_MeshUVLoopLayer_data_begin",
2403 "rna_iterator_array_next",
2404 "rna_iterator_array_end",
2405 "rna_iterator_array_get",
2406 "rna_MeshUVLoopLayer_data_length",
2420 prop,
"rna_MeshUVLoopLayer_active_get",
"rna_MeshUVLoopLayer_active_set");
2428 prop,
"rna_MeshUVLoopLayer_active_render_get",
"rna_MeshUVLoopLayer_active_render_set");
2435 prop,
"rna_MeshUVLoopLayer_clone_get",
"rna_MeshUVLoopLayer_clone_set");
2445 "rna_MeshUVLoopLayer_uv_begin",
2446 "rna_iterator_array_next",
2447 "rna_iterator_array_end",
2448 "rna_iterator_array_get",
2449 "rna_MeshUVLoopLayer_data_length",
2450 "rna_MeshUVLoopLayer_uv_lookup_int",
2458 prop,
"UV Vertex Selection",
"Selection state of the face corner the UV editor");
2461 "rna_MeshUVLoopLayer_vert_select_begin",
2462 "rna_iterator_array_next",
2463 "rna_iterator_array_end",
2464 "rna_iterator_array_get",
2465 "rna_MeshUVLoopLayer_data_length",
2466 "rna_MeshUVLoopLayer_vert_select_lookup_int",
2474 prop,
"UV Edge Selection",
"Selection state of the edge in the UV editor");
2477 "rna_MeshUVLoopLayer_edge_select_begin",
2478 "rna_iterator_array_next",
2479 "rna_iterator_array_end",
2480 "rna_iterator_array_get",
2481 "rna_MeshUVLoopLayer_data_length",
2482 "rna_MeshUVLoopLayer_edge_select_lookup_int",
2492 "rna_MeshUVLoopLayer_pin_begin",
2493 "rna_iterator_array_next",
2494 "rna_iterator_array_end",
2495 "rna_iterator_array_get",
2496 "rna_MeshUVLoopLayer_data_length",
2497 "rna_MeshUVLoopLayer_pin_lookup_int",
2503 srna,
"Mesh UV Layer",
"(Deprecated) Layer of UV coordinates in a Mesh data-block");
2523 prop,
"rna_MeshUVLoop_select_edge_get",
"rna_MeshUVLoop_select_edge_set");
2535 srna,
"Mesh Vertex Color Layer",
"Layer of vertex colors in a Mesh data-block");
2556 prop,
"rna_mesh_color_active_render_get",
"rna_mesh_color_active_render_set");
2566 "rna_MeshLoopColorLayer_data_begin",
2567 "rna_iterator_array_next",
2568 "rna_iterator_array_end",
2569 "rna_iterator_array_get",
2570 "rna_MeshLoopColorLayer_data_length",
2584 prop,
"rna_MeshLoopColor_color_get",
"rna_MeshLoopColor_color_set",
nullptr);
2598 "Auto Texture Space",
2599 "Adjust active object's texture space automatically when transforming object");
2632 "rna_IDMaterials_assign_int");
2653 func,
"count", 0, 0, INT_MAX,
"Count",
"Number of vertices to add", 0, INT_MAX);
2658 RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of vertices to remove", 0, INT_MAX);
2678 parm =
RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of edges to add", 0, INT_MAX);
2683 RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of edges to remove", 0, INT_MAX);
2696 srna,
"Mesh Loop Triangles",
"Tessellation of mesh polygons into triangles");
2716 parm =
RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of loops to add", 0, INT_MAX);
2743 func,
"count", 0, 0, INT_MAX,
"Count",
"Number of polygons to add", 0, INT_MAX);
2782 "Whether new layer's data should be initialized by copying current active one");
2783 parm =
RNA_def_pointer(func,
"layer",
"MeshLoopColorLayer",
"",
"The newly created layer");
2790 parm =
RNA_def_pointer(func,
"layer",
"MeshLoopColorLayer",
"",
"The layer to remove");
2797 "rna_Mesh_vertex_color_active_get",
2798 "rna_Mesh_vertex_color_active_set",
2807 "rna_Mesh_vertex_color_active_index_get",
2808 "rna_Mesh_vertex_color_active_index_set",
2809 "rna_Mesh_vertex_color_index_range");
2836 "Whether new layer's data should be initialized by copying current active one, "
2837 "or if none is active, with a default UVmap");
2838 parm =
RNA_def_pointer(func,
"layer",
"MeshUVLoopLayer",
"",
"The newly created layer");
2845 parm =
RNA_def_pointer(func,
"layer",
"MeshUVLoopLayer",
"",
"The layer to remove");
2851 prop,
"rna_Mesh_uv_layer_active_get",
"rna_Mesh_uv_layer_active_set",
nullptr,
nullptr);
2859 "rna_Mesh_uv_layer_active_index_get",
2860 "rna_Mesh_uv_layer_active_index_set",
2861 "rna_Mesh_uv_layer_index_range");
2874 srna,
"Mesh Skin Vertex Layer",
"Per-vertex skin data for use with the Skin modifier");
2890 "rna_MeshSkinVertexLayer_data_begin",
2891 "rna_iterator_array_next",
2892 "rna_iterator_array_end",
2893 "rna_iterator_array_get",
2894 "rna_MeshSkinVertexLayer_data_length",
2903 srna,
"Skin Vertex",
"Per-vertex skin data for use with the Skin modifier");
2918 "Vertex is a root for rotation calculations and armature generation, "
2919 "setting this flag does not clear other roots in the same mesh island");
2925 prop,
"Loose",
"If vertex has multiple adjacent edges, it is hulled to them directly");
2952 "rna_Mesh_vertices_begin",
2953 "rna_iterator_array_next",
2954 "rna_iterator_array_end",
2955 "rna_iterator_array_get",
2956 "rna_Mesh_vertices_length",
2957 "rna_Mesh_vertices_lookup_int",
2967 "rna_Mesh_edges_begin",
2968 "rna_iterator_array_next",
2969 "rna_iterator_array_end",
2970 "rna_iterator_array_get",
2971 "rna_Mesh_edges_length",
2972 "rna_Mesh_edges_lookup_int",
2982 "rna_Mesh_loops_begin",
2983 "rna_iterator_array_next",
2984 "rna_iterator_array_end",
2985 "rna_iterator_array_get",
2986 "rna_Mesh_loops_length",
2987 "rna_Mesh_loops_lookup_int",
2997 "rna_Mesh_polygons_begin",
2998 "rna_iterator_array_next",
2999 "rna_iterator_array_end",
3000 "rna_iterator_array_get",
3001 "rna_Mesh_polygons_length",
3002 "rna_Mesh_polygons_lookup_int",
3016 {0,
nullptr, 0,
nullptr,
nullptr},
3024 "The attribute domain that gives enough information to represent the mesh's normals");
3033 "The normal direction of each vertex, defined as the average of the "
3034 "surrounding face normals");
3036 "rna_Mesh_vertex_normals_begin",
3037 "rna_iterator_array_next",
3038 "rna_iterator_array_end",
3039 "rna_iterator_array_get",
3040 "rna_Mesh_vertex_normals_length",
3041 "rna_Mesh_vertex_normals_lookup_int",
3050 "The normal direction of each face, defined by the winding order "
3051 "and position of its vertices");
3053 "rna_Mesh_poly_normals_begin",
3054 "rna_iterator_array_next",
3055 "rna_iterator_array_end",
3056 "rna_iterator_array_get",
3057 "rna_Mesh_poly_normals_length",
3058 "rna_Mesh_poly_normals_lookup_int",
3068 "The \"slit\" normal direction of each face corner, influenced by vertex normals, "
3069 "sharp faces, sharp edges, and custom normals. May be empty.");
3071 "rna_Mesh_corner_normals_begin",
3072 "rna_iterator_array_next",
3073 "rna_iterator_array_end",
3074 "rna_iterator_array_get",
3075 "rna_Mesh_corner_normals_length",
3076 "rna_Mesh_corner_normals_lookup_int",
3082 "rna_Mesh_loop_triangles_begin",
3083 "rna_iterator_array_next",
3084 "rna_iterator_array_end",
3085 "rna_iterator_array_get",
3086 "rna_Mesh_loop_triangles_length",
3087 "rna_Mesh_loop_triangles_lookup_int",
3099 "rna_Mesh_loop_triangle_polygons_begin",
3100 "rna_iterator_array_next",
3101 "rna_iterator_array_end",
3102 "rna_iterator_array_get",
3103 "rna_Mesh_loop_triangles_length",
3104 "rna_Mesh_loop_triangle_polygons_lookup_int",
3120 "Use another mesh for texture indices (vertex indices must be aligned)");
3126 "rna_Mesh_uv_layers_begin",
3130 "rna_Mesh_uv_layers_length",
3142 prop,
"rna_Mesh_uv_layer_clone_get",
"rna_Mesh_uv_layer_clone_set",
nullptr,
nullptr);
3146 prop,
"Clone UV Loop Layer",
"UV loop layer to be used as cloning source");
3150 "rna_Mesh_uv_layer_clone_index_get",
3151 "rna_Mesh_uv_layer_clone_index_set",
3152 "rna_Mesh_uv_layer_index_range");
3159 prop,
"rna_Mesh_uv_layer_stencil_get",
"rna_Mesh_uv_layer_stencil_set",
nullptr,
nullptr);
3166 "rna_Mesh_uv_layer_stencil_index_get",
3167 "rna_Mesh_uv_layer_stencil_index_set",
3168 "rna_Mesh_uv_layer_index_range");
3178 "rna_Mesh_vertex_colors_begin",
3182 "rna_Mesh_vertex_colors_length",
3191 "Legacy vertex color layers. Deprecated, use color attributes instead.");
3198 "rna_Mesh_skin_vertices_begin",
3202 "rna_Mesh_skin_vertices_length",
3224 "Size of the voxel in object space used for volume evaluation. Lower "
3225 "values preserve finer details.");
3237 "Reduces the final face count by simplifying geometry where detail is not needed, "
3238 "generating triangles. A value greater than 0 disables Fix Poles.");
3255 "Projects the mesh to preserve the volume and details of the original mesh");
3300 "Mirror Vertex Groups",
3301 "Mirror the left/right vertex groups when painting. The symmetry axis "
3302 "is determined by the symmetry settings.");
3311 prop,
"Has Custom Normals",
"True if there are custom split normals data in this mesh");
3320 prop,
"Texture Space Mesh",
"Derive texture coordinates from another mesh");
3333 "Auto Texture Space",
3334 "Adjust active object's texture space automatically when transforming object");
3343 prop,
"rna_Mesh_texspace_location_get",
"rna_Mesh_texspace_location_set",
nullptr);
3353 "Use topology based mirroring "
3354 "(for when both sides of mesh have matching, unique topology)");
Generic geometry attributes built on CustomData.
void BKE_id_attributes_default_color_set(struct ID *id, std::optional< blender::StringRef > name)
blender::StringRef BKE_uv_map_pin_name_get(blender::StringRef uv_map_name, char *buffer)
struct CustomDataLayer * BKE_attribute_search_for_write(AttributeOwner &owner, blender::StringRef name, eCustomDataMask type, AttrDomainMask domain_mask)
struct CustomDataLayer * BKE_attribute_find(const AttributeOwner &owner, blender::StringRef name, eCustomDataType type, blender::bke::AttrDomain domain)
bool BKE_attribute_remove(AttributeOwner &owner, blender::StringRef name, struct ReportList *reports)
@ ATTR_DOMAIN_MASK_CORNER
const struct CustomDataLayer * BKE_attribute_search(const AttributeOwner &owner, blender::StringRef name, eCustomDataMask type, AttrDomainMask domain_mask)
blender::StringRef BKE_uv_map_edge_select_name_get(blender::StringRef uv_map_name, char *buffer)
blender::StringRef BKE_uv_map_vert_select_name_get(blender::StringRef uv_map_name, char *buffer)
bool BKE_attribute_rename(AttributeOwner &owner, blender::StringRef old_name, blender::StringRef new_name, struct ReportList *reports)
void BKE_id_attributes_active_color_set(struct ID *id, std::optional< blender::StringRef > name)
CustomData interface, see also DNA_customdata_types.h.
int CustomData_sizeof(eCustomDataType type)
void * CustomData_get_layer_named_for_write(CustomData *data, eCustomDataType type, blender::StringRef name, int totelem)
int CustomData_get_layer_index_n(const CustomData *data, eCustomDataType type, int n)
const void * CustomData_get_layer_n(const CustomData *data, eCustomDataType type, int n)
const void * CustomData_get_layer(const CustomData *data, eCustomDataType type)
const void * CustomData_get_layer_named(const CustomData *data, eCustomDataType type, blender::StringRef name)
void * CustomData_add_layer_named(CustomData *data, eCustomDataType type, eCDAllocType alloctype, int totelem, blender::StringRef name)
void CustomData_set_layer_render(CustomData *data, eCustomDataType type, int n)
int CustomData_get_layer_index(const CustomData *data, eCustomDataType type)
void CustomData_set_layer_clone_index(CustomData *data, eCustomDataType type, int n)
void * CustomData_get_layer_for_write(CustomData *data, eCustomDataType type, int totelem)
void CustomData_set_layer_unique_name(CustomData *data, int index)
void CustomData_ensure_data_is_mutable(CustomDataLayer *layer, int totelem)
void * CustomData_add_layer(CustomData *data, eCustomDataType type, eCDAllocType alloctype, int totelem)
int CustomData_get_active_layer_index(const CustomData *data, eCustomDataType type)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType type)
#define CD_TYPE_AS_MASK(_type)
int CustomData_get_render_layer_index(const CustomData *data, eCustomDataType type)
void CustomData_set_layer_active(CustomData *data, eCustomDataType type, int n)
int CustomData_get_clone_layer_index(const CustomData *data, eCustomDataType type)
void BKE_mesh_batch_cache_dirty_tag(Mesh *mesh, eMeshBatchDirtyMode mode)
void BKE_mesh_tessface_clear(Mesh *mesh)
bool BKE_mesh_has_custom_loop_normals(Mesh *mesh)
void BKE_mesh_texspace_ensure(Mesh *mesh)
@ BKE_MESH_BATCH_DIRTY_ALL
void BKE_mesh_texspace_get(Mesh *mesh, float r_texspace_location[3], float r_texspace_size[3])
void BKE_mesh_runtime_clear_geometry(Mesh *mesh)
int BKE_mesh_runtime_corner_tris_len(const Mesh *mesh)
void BKE_reportf(ReportList *reports, eReportType type, const char *format,...) ATTR_PRINTF_FORMAT(3
#define BLI_assert_msg(a, msg)
MINLINE int max_ii(int a, int b)
MINLINE unsigned char round_fl_to_uchar_clamp(float a)
float area_tri_v3(const float v1[3], const float v2[3], const float v3[3])
float normal_tri_v3(float n[3], const float v1[3], const float v2[3], const float v3[3])
MINLINE void madd_v3_v3v3v3(float r[3], const float a[3], const float b[3], const float c[3])
MINLINE void copy_v2_v2(float r[2], const float a[2])
MINLINE void mul_v3_fl(float r[3], float f)
MINLINE void copy_v3_v3(float r[3], const float a[3])
MINLINE void cross_v3_v3v3(float r[3], const float a[3], const float b[3])
MINLINE void zero_v3(float r[3])
char * BLI_strdup(const char *str) ATTR_WARN_UNUSED_RESULT ATTR_NONNULL(1) ATTR_MALLOC
size_t BLI_str_escape(char *__restrict dst, const char *__restrict src, size_t dst_maxncpy) ATTR_NONNULL(1
#define STRNCPY_UTF8(dst, src)
#define UNUSED_VARS_NDEBUG(...)
void DEG_id_tag_update(ID *id, unsigned int flags)
@ ME_REMESH_REPROJECT_ATTRIBUTES
@ ME_REMESH_REPROJECT_VOLUME
@ ME_EDIT_MIRROR_VERTEX_GROUPS
bool * ED_mesh_uv_map_edge_select_layer_ensure(Mesh *mesh, int uv_index)
int ED_mesh_uv_add(Mesh *mesh, const char *name, bool active_set, bool do_init, ReportList *reports)
int ED_mesh_color_add(Mesh *mesh, const char *name, bool active_set, bool do_init, ReportList *reports)
const bool * ED_mesh_uv_map_vert_select_layer_get(const Mesh *mesh, int uv_index)
bool * ED_mesh_uv_map_vert_select_layer_ensure(Mesh *mesh, int uv_index)
const bool * ED_mesh_uv_map_pin_layer_get(const Mesh *mesh, int uv_index)
bool * ED_mesh_uv_map_pin_layer_ensure(Mesh *mesh, int uv_index)
const bool * ED_mesh_uv_map_edge_select_layer_get(const Mesh *mesh, int uv_index)
#define RNA_MAX_ARRAY_DIMENSION
@ PROPOVERRIDE_OVERRIDABLE_LIBRARY
BMesh const char void * data
ATTR_WARN_UNUSED_RESULT const BMVert * v2
static AttributeOwner from_id(ID *id)
constexpr const T * data() const
constexpr int64_t size() const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const void *default_value=nullptr) const
GAttributeWriter lookup_or_add_for_write(StringRef attribute_id, AttrDomain domain, eCustomDataType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
static float normals[][3]
float length(VecOp< float, D >) RET
#define MAX_CUSTOMDATA_LAYER_NAME
#define CD_MASK_PROP_BYTE_COLOR
#define MAX_CUSTOMDATA_LAYER_NAME_NO_PREFIX
float3 face_normal_calc(Span< float3 > vert_positions, Span< int > face_verts)
float face_area_calc(Span< float3 > vert_positions, Span< int > face_verts)
float3 face_center_calc(Span< float3 > vert_positions, Span< int > face_verts)
void mesh_flip_faces(Mesh &mesh, const IndexMask &selection)
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
VecBase< int32_t, 3 > int3
VecBase< float, 3 > float3
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, int itemsize, int length, bool free_ptr, IteratorSkipFunc skip)
void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
void rna_pointer_create_with_ancestors(const PointerRNA &parent, StructRNA *type, void *data, PointerRNA &r_ptr)
PointerRNA RNA_pointer_create_discrete(ID *id, StructRNA *type, void *data)
PointerRNA RNA_pointer_create_with_parent(const PointerRNA &parent, StructRNA *type, void *data)
void rna_def_animdata_common(StructRNA *srna)
void rna_def_attributes_common(StructRNA *srna, const AttributeOwnerType type)
void RNA_def_property_boolean_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_struct_name_property(StructRNA *srna, PropertyRNA *prop)
PropertyRNA * RNA_def_string(StructOrFunctionRNA *cont_, const char *identifier, const char *default_value, const int maxlen, const char *ui_name, const char *ui_description)
void RNA_def_property_pointer_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_struct_path_func(StructRNA *srna, const char *path)
void RNA_def_property_string_funcs(PropertyRNA *prop, const char *get, const char *length, const char *set)
void RNA_def_function_return(FunctionRNA *func, PropertyRNA *ret)
void RNA_def_property_float_funcs(PropertyRNA *prop, const char *get, const char *set, const char *range)
void RNA_define_verify_sdna(bool verify)
void RNA_def_property_ui_text(PropertyRNA *prop, const char *name, const char *description)
void RNA_def_property_ui_icon(PropertyRNA *prop, int icon, int consecutive)
void RNA_def_property_srna(PropertyRNA *prop, const char *type)
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_multi_array(PropertyRNA *prop, int dimension, const int length[])
void RNA_def_property_enum_items(PropertyRNA *prop, const EnumPropertyItem *item)
void RNA_def_struct_sdna(StructRNA *srna, const char *structname)
FunctionRNA * RNA_def_function(StructRNA *srna, const char *identifier, const char *call)
void RNA_def_property_array(PropertyRNA *prop, int length)
void RNA_def_property_range(PropertyRNA *prop, double min, double max)
PropertyRNA * RNA_def_pointer(StructOrFunctionRNA *cont_, const char *identifier, const char *type, const char *ui_name, const char *ui_description)
void RNA_def_property_string_maxlength(PropertyRNA *prop, int maxlength)
void RNA_def_property_struct_type(PropertyRNA *prop, const char *type)
void RNA_def_property_collection_sdna(PropertyRNA *prop, const char *structname, const char *propname, const char *lengthpropname)
void RNA_def_function_ui_description(FunctionRNA *func, const char *description)
void RNA_def_property_update(PropertyRNA *prop, int noteflag, const char *func)
PropertyRNA * RNA_def_property(StructOrFunctionRNA *cont_, const char *identifier, int type, int subtype)
void RNA_def_property_enum_funcs(PropertyRNA *prop, const char *get, const char *set, const char *item)
void RNA_def_property_editable_func(PropertyRNA *prop, const char *editable)
StructRNA * RNA_def_struct(BlenderRNA *brna, const char *identifier, const char *from)
void RNA_def_function_flag(FunctionRNA *func, int flag)
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)
void RNA_def_property_enum_sdna(PropertyRNA *prop, const char *structname, const char *propname)
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)
PropertyRNA * RNA_def_boolean(StructOrFunctionRNA *cont_, const char *identifier, const bool default_value, const char *ui_name, const char *ui_description)
void RNA_def_property_override_funcs(PropertyRNA *prop, const char *diff, const char *store, const char *apply)
void RNA_def_property_flag(PropertyRNA *prop, PropertyFlag flag)
void RNA_def_property_float_sdna(PropertyRNA *prop, const char *structname, const char *propname)
void RNA_def_property_ui_range(PropertyRNA *prop, double min, double max, double step, int precision)
void RNA_def_property_int_sdna(PropertyRNA *prop, const char *structname, const char *propname)
PropertyRNA * RNA_def_int(StructOrFunctionRNA *cont_, const char *identifier, const int default_value, const int hardmin, const int hardmax, const char *ui_name, const char *ui_description, const int softmin, const int softmax)
void RNA_def_property_boolean_negative_sdna(PropertyRNA *prop, const char *structname, const char *propname, int64_t booleanbit)
void RNA_def_property_override_flag(PropertyRNA *prop, PropertyOverrideFlag flag)
void RNA_def_parameter_flags(PropertyRNA *prop, PropertyFlag flag_property, ParameterFlag flag_parameter)
void RNA_api_mesh(StructRNA *srna)
void rna_Mesh_update_draw(Main *bmain, Scene *scene, PointerRNA *ptr)
void rna_def_texmat_common(StructRNA *srna, const char *texspace_editable)
static void rna_def_mesh_edges(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_mvert(BlenderRNA *brna)
static void rna_def_mloopuv(BlenderRNA *brna)
static void rna_def_mlooptri(BlenderRNA *brna)
static void rna_def_uv_layers(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_normal_layer_value(BlenderRNA *brna)
static void rna_def_mpolygon(BlenderRNA *brna)
static void rna_def_mesh_looptris(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_mesh_vertices(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_mesh_polygons(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_skin_vertices(BlenderRNA *brna, PropertyRNA *)
static void rna_def_mloopcol(BlenderRNA *brna)
void RNA_def_mesh(BlenderRNA *brna)
static void rna_def_loop_colors(BlenderRNA *brna, PropertyRNA *cprop)
static void rna_def_looptri_poly_value(BlenderRNA *brna)
const EnumPropertyItem rna_enum_mesh_delimit_mode_items[]
static void rna_def_mesh(BlenderRNA *brna)
static void rna_def_mvert_group(BlenderRNA *brna)
static const EnumPropertyItem rna_enum_mesh_remesh_mode_items[]
static void rna_def_medge(BlenderRNA *brna)
static void rna_def_mloop(BlenderRNA *brna)
static void rna_def_mesh_loops(BlenderRNA *brna, PropertyRNA *cprop)
#define DEFINE_CUSTOMDATA_LAYER_COLLECTION(collection_name, customdata_type, layer_type)
#define DEFINE_CUSTOMDATA_LAYER_COLLECTION_ACTIVEITEM(collection_name, customdata_type, layer_type, active_type, layer_rna_type)
MeshRuntimeHandle * runtime
char * default_color_attribute
float texspace_location[3]
char * active_color_attribute
IDOverrideLibraryPropertyOperation * liboverride_operation
VMutableArray< T > varray
blender::BitVector is_loose_bits
void WM_main_add_notifier(uint type, void *reference)