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);
294 const int index = int(edge - edges);
302 const Mesh *mesh = rna_mesh(
ptr);
303 const int *face_offset =
static_cast<const int *
>(
ptr->data);
304 const int index = int(face_offset - mesh->face_offsets().data());
312 const Mesh *mesh = rna_mesh(
ptr);
313 const int *corner_vert =
static_cast<const int *
>(
ptr->data);
314 const int index = int(corner_vert - mesh->corner_verts().data());
322 const Mesh *mesh = rna_mesh(
ptr);
324 const int index = int(tri - mesh->corner_tris().data());
330static int rna_MeshLoopTriangle_polygon_index_get(
PointerRNA *
ptr)
332 const Mesh *mesh = rna_mesh(
ptr);
333 const int index = rna_MeshLoopTriangle_index_get(
ptr);
334 return mesh->corner_tri_faces()[index];
339 const Mesh *mesh = rna_mesh(
ptr);
352 const Mesh *mesh = rna_mesh(
ptr);
358 const Mesh *mesh = rna_mesh(
ptr);
364 &RNA_MeshLoopTriangle,
373 const Mesh *mesh = rna_mesh(
ptr);
376 const_cast<int *
>(mesh->corner_tri_faces().data()),
385 const Mesh *mesh = rna_mesh(
ptr);
391 *
ptr, &RNA_ReadOnlyInteger,
const_cast<int *
>(&mesh->corner_tri_faces()[index]), *r_ptr);
395static void rna_MeshVertex_co_get(
PointerRNA *
ptr,
float *value)
400static void rna_MeshVertex_co_set(
PointerRNA *
ptr,
const float *value)
404 mesh->tag_positions_changed();
407static void rna_MeshVertex_normal_get(
PointerRNA *
ptr,
float *value)
411 const int index = rna_MeshVertex_index_get(
ptr);
417 const Mesh *mesh = rna_mesh(
ptr);
421 const int index = rna_MeshVertex_index_get(
ptr);
422 return hide_vert[index];
425static void rna_MeshVertex_hide_set(
PointerRNA *
ptr,
bool value)
431 const int index = rna_MeshVertex_index_get(
ptr);
432 hide_vert.
varray.set(index, value);
438 const Mesh *mesh = rna_mesh(
ptr);
439 const int index = rna_MeshVertex_index_get(
ptr);
443 return select_vert[index];
446static void rna_MeshVertex_select_set(
PointerRNA *
ptr,
bool value)
449 const int index = rna_MeshVertex_index_get(
ptr);
453 select_vert.
varray.set(index, value);
459 return *(
int *)
ptr->data;
462static void rna_MeshLoop_vertex_index_set(
PointerRNA *
ptr,
int value)
464 *(
int *)
ptr->data = value;
469 const Mesh *mesh = rna_mesh(
ptr);
470 const int index = rna_MeshLoop_index_get(
ptr);
471 return mesh->corner_edges()[index];
474static void rna_MeshLoop_edge_index_set(
PointerRNA *
ptr,
int value)
477 const int index = rna_MeshLoop_index_get(
ptr);
478 mesh->corner_edges_for_write()[index] = value;
481static void rna_MeshLoop_normal_get(
PointerRNA *
ptr,
float *values)
484 const int index = rna_MeshLoop_index_get(
ptr);
485 copy_v3_v3(values, mesh->corner_normals()[index]);
488static void rna_MeshLoop_tangent_get(
PointerRNA *
ptr,
float *values)
491 const int index = rna_MeshLoop_index_get(
ptr);
499 copy_v3_v3(values, (
const float *)(layer + index));
506 const int index = rna_MeshLoop_index_get(
ptr);
510 return (vec) ? vec[index][3] : 0.0f;
513static void rna_MeshLoop_bitangent_get(
PointerRNA *
ptr,
float *values)
516 const int index = rna_MeshLoop_index_get(
ptr);
521 cross_v3_v3v3(values, mesh->corner_normals()[index], vec[index]);
529static void rna_MeshPolygon_normal_get(
PointerRNA *
ptr,
float *values)
533 const int poly_start = *((
const int *)
ptr->data);
534 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
535 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
542 const Mesh *mesh = rna_mesh(
ptr);
543 const int index = rna_MeshPolygon_index_get(
ptr);
547 return hide_poly[index];
550static void rna_MeshPolygon_hide_set(
PointerRNA *
ptr,
bool value)
553 const int index = rna_MeshPolygon_index_get(
ptr);
557 hide_poly.
varray.set(index, value);
563 const Mesh *mesh = rna_mesh(
ptr);
564 const int index = rna_MeshPolygon_index_get(
ptr);
568 return !sharp_face[index];
571static void rna_MeshPolygon_use_smooth_set(
PointerRNA *
ptr,
bool value)
574 const int index = rna_MeshPolygon_index_get(
ptr);
578 sharp_face.
varray.set(index, !value);
584 const Mesh *mesh = rna_mesh(
ptr);
585 const int index = rna_MeshPolygon_index_get(
ptr);
589 return select_poly[index];
592static void rna_MeshPolygon_select_set(
PointerRNA *
ptr,
bool value)
595 const int index = rna_MeshPolygon_index_get(
ptr);
599 select_poly.
varray.set(index, value);
603static int rna_MeshPolygon_material_index_get(
PointerRNA *
ptr)
606 const Mesh *mesh = rna_mesh(
ptr);
610 return material_index[rna_MeshPolygon_index_get(
ptr)];
613static void rna_MeshPolygon_material_index_set(
PointerRNA *
ptr,
int value)
620 material_index.
varray.set(rna_MeshPolygon_index_get(
ptr),
max_ii(0, value));
624static void rna_MeshPolygon_center_get(
PointerRNA *
ptr,
float *values)
628 const int poly_start = *((
const int *)
ptr->data);
629 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
630 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
639 const int poly_start = *((
const int *)
ptr->data);
640 const int poly_size = *(((
const int *)
ptr->data) + 1) - poly_start;
641 const Span<int> face_verts = mesh->corner_verts().slice(poly_start, poly_size);
645static void rna_MeshPolygon_flip(
ID *
id,
MIntProperty *poly_offset_p)
649 const int index =
reinterpret_cast<int *
>(poly_offset_p) - mesh->faces().data().data();
655static void rna_MeshLoopTriangle_verts_get(
PointerRNA *
ptr,
int *values)
660 values[0] = corner_verts[tri[0]];
661 values[1] = corner_verts[tri[1]];
662 values[2] = corner_verts[tri[2]];
665static void rna_MeshLoopTriangle_normal_get(
PointerRNA *
ptr,
float *values)
671 const int v1 = corner_verts[tri[0]];
672 const int v2 = corner_verts[tri[1]];
673 const int v3 = corner_verts[tri[2]];
678static void rna_MeshLoopTriangle_split_normals_get(
PointerRNA *
ptr,
float *values)
683 copy_v3_v3(values + 0, corner_normals[tri[0]]);
684 copy_v3_v3(values + 3, corner_normals[tri[1]]);
685 copy_v3_v3(values + 6, corner_normals[tri[2]]);
694 const int v1 = corner_verts[tri[0]];
695 const int v2 = corner_verts[tri[1]];
696 const int v3 = corner_verts[tri[2]];
697 return area_tri_v3(positions[v1], positions[
v2], positions[v3]);
700static void rna_MeshLoopColor_color_get(
PointerRNA *
ptr,
float *values)
704 values[0] = mlcol->r / 255.0f;
705 values[1] = mlcol->g / 255.0f;
706 values[2] = mlcol->b / 255.0f;
707 values[3] = mlcol->a / 255.0f;
710static void rna_MeshLoopColor_color_set(
PointerRNA *
ptr,
const float *values)
720static int rna_Mesh_texspace_editable(
const PointerRNA *
ptr,
const char ** )
726static void rna_Mesh_texspace_size_get(
PointerRNA *
ptr,
float values[3])
735static void rna_Mesh_texspace_location_get(
PointerRNA *
ptr,
float values[3])
747 MDeformVert *dverts = mesh->deform_verts_for_write().data();
749 const int index = rna_MeshVertex_index_get(
ptr);
760static void rna_MeshVertex_undeformed_co_get(
PointerRNA *
ptr,
float values[3])
763 const float *position = (
const float *)
ptr->data;
768 const int index = rna_MeshVertex_index_get(
ptr);
770 float texspace_location[3], texspace_size[3];
774 madd_v3_v3v3v3(values, texspace_location, orco[index], texspace_size);
800static void rna_CustomDataLayer_active_set(
846static std::optional<std::string> rna_MeshUVLoopLayer_path(
const PointerRNA *
ptr)
849 char name_esc[
sizeof(cdl->
name) * 2];
851 return fmt::format(
"uv_layers[\"{}\"]", name_esc);
858 const int length = (mesh->
runtime->edit_mesh) ? 0 : mesh->corners_num;
877 if (mesh->
runtime->edit_mesh) {
919 if (mesh->
runtime->edit_mesh) {
936 if (mesh->
runtime->edit_mesh) {
997 *
ptr, &RNA_Float2AttributeValue, (
float *)layer->data + 2 * index, *r_ptr);
1001static bool rna_MeshUVLoopLayer_active_render_get(
PointerRNA *
ptr)
1016static void rna_MeshUVLoopLayer_active_render_set(
PointerRNA *
ptr,
bool value)
1021static void rna_MeshUVLoopLayer_active_set(
PointerRNA *
ptr,
bool value)
1026static void rna_MeshUVLoopLayer_clone_set(
PointerRNA *
ptr,
bool value)
1044static void rna_Mesh_vertex_color_active_set(
PointerRNA *
ptr,
1058static int rna_Mesh_vertex_color_active_index_get(
PointerRNA *
ptr)
1071static void rna_Mesh_vertex_color_active_index_set(
PointerRNA *
ptr,
int value)
1077 fprintf(stderr,
"Invalid loop byte attribute index %d\n", value);
1100static int rna_MeshLoopColorLayer_data_length(
PointerRNA *
ptr)
1106static bool rna_mesh_color_active_render_get(
PointerRNA *
ptr)
1108 const Mesh *mesh = rna_mesh(
ptr);
1115 const Mesh *mesh = rna_mesh(
ptr);
1120static void rna_mesh_color_active_render_set(
PointerRNA *
ptr,
bool value)
1122 if (value ==
false) {
1130static void rna_mesh_color_active_set(
PointerRNA *
ptr,
bool value)
1132 if (value ==
false) {
1144static std::optional<std::string> rna_MeshSkinVertexLayer_path(
const PointerRNA *
ptr)
1147 char name_esc[
sizeof(cdl->
name) * 2];
1149 return fmt::format(
"skin_vertices[\"{}\"]", name_esc);
1152static std::optional<std::string> rna_VertCustomData_data_path(
const PointerRNA *
ptr,
1153 const char *collection,
1155static std::optional<std::string> rna_MeshSkinVertex_path(
const PointerRNA *
ptr)
1173static int rna_MeshSkinVertexLayer_data_length(
PointerRNA *
ptr)
1182static int rna_MeshPoly_vertices_get_length(
const PointerRNA *
ptr,
1185 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1186 const int poly_start = *poly_offset_p;
1187 const int poly_size = *(poly_offset_p + 1) - poly_start;
1190 return (
length[0] = poly_size);
1193static void rna_MeshPoly_vertices_get(
PointerRNA *
ptr,
int *values)
1195 const Mesh *mesh = rna_mesh(
ptr);
1196 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1197 const int poly_start = *poly_offset_p;
1198 const int poly_size = *(poly_offset_p + 1) - poly_start;
1199 memcpy(values, &mesh->corner_verts()[poly_start],
sizeof(
int) * poly_size);
1204 const int *
data =
static_cast<const int *
>(
ptr->data);
1208static void rna_MeshPoly_vertices_set(
PointerRNA *
ptr,
const int *values)
1211 const int *poly_offset_p =
static_cast<const int *
>(
ptr->data);
1212 const int poly_start = *poly_offset_p;
1213 const int poly_size = *(poly_offset_p + 1) - poly_start;
1214 memcpy(&mesh->corner_verts_for_write()[poly_start], values,
sizeof(
int) * poly_size);
1219static void rna_MeshPoly_material_index_range(
1230 const Mesh *mesh = rna_mesh(
ptr);
1231 const int index = rna_MeshEdge_index_get(
ptr);
1235 return hide_edge[index];
1238static void rna_MeshEdge_hide_set(
PointerRNA *
ptr,
bool value)
1241 const int index = rna_MeshEdge_index_get(
ptr);
1245 hide_edge.
varray.set(index, value);
1251 const Mesh *mesh = rna_mesh(
ptr);
1252 const int index = rna_MeshEdge_index_get(
ptr);
1256 return select_edge[index];
1259static void rna_MeshEdge_select_set(
PointerRNA *
ptr,
bool value)
1262 const int index = rna_MeshEdge_index_get(
ptr);
1266 select_edge.
varray.set(index, value);
1272 const Mesh *mesh = rna_mesh(
ptr);
1273 const int index = rna_MeshEdge_index_get(
ptr);
1277 return sharp_edge[index];
1280static void rna_MeshEdge_use_edge_sharp_set(
PointerRNA *
ptr,
bool value)
1283 const int index = rna_MeshEdge_index_get(
ptr);
1287 sharp_edge.
varray.set(index, value);
1293 const Mesh *mesh = rna_mesh(
ptr);
1294 const int index = rna_MeshEdge_index_get(
ptr);
1298 return uv_seam[index];
1301static void rna_MeshEdge_use_seam_set(
PointerRNA *
ptr,
bool value)
1304 const int index = rna_MeshEdge_index_get(
ptr);
1308 uv_seam.
varray.set(index, value);
1314 const Mesh *mesh = rna_mesh(
ptr);
1315 const int index = rna_MeshEdge_index_get(
ptr);
1320static int rna_MeshLoopTriangle_material_index_get(
PointerRNA *
ptr)
1323 const Mesh *mesh = rna_mesh(
ptr);
1327 return material_indices[rna_MeshLoopTriangle_polygon_index_get(
ptr)];
1330static bool rna_MeshLoopTriangle_use_smooth_get(
PointerRNA *
ptr)
1332 const Mesh *mesh = rna_mesh(
ptr);
1336 return !sharp_face[rna_MeshLoopTriangle_polygon_index_get(
ptr)];
1341static std::optional<std::string> rna_VertexGroupElement_path(
const PointerRNA *
ptr)
1343 const Mesh *mesh = rna_mesh(
ptr);
1345 const MDeformVert *dvert = mesh->deform_verts().data();
1348 for (a = 0; a < mesh->
verts_num; a++, dvert++) {
1350 if (dw == &dvert->
dw[
b]) {
1351 return fmt::format(
"vertices[{}].groups[{}]", a,
b);
1356 return std::nullopt;
1359static std::optional<std::string> rna_MeshPolygon_path(
const PointerRNA *
ptr)
1361 return fmt::format(
"polygons[{}]", rna_MeshPolygon_index_get(
const_cast<PointerRNA *
>(
ptr)));
1364static std::optional<std::string> rna_MeshLoopTriangle_path(
const PointerRNA *
ptr)
1366 const int index = rna_MeshLoopTriangle_index_get(
const_cast<PointerRNA *
>(
ptr));
1367 return fmt::format(
"loop_triangles[{}]", index);
1370static std::optional<std::string> rna_MeshEdge_path(
const PointerRNA *
ptr)
1372 return fmt::format(
"edges[{}]", rna_MeshEdge_index_get(
const_cast<PointerRNA *
>(
ptr)));
1375static std::optional<std::string> rna_MeshLoop_path(
const PointerRNA *
ptr)
1377 return fmt::format(
"loops[{}]", rna_MeshLoop_index_get(
const_cast<PointerRNA *
>(
ptr)));
1380static std::optional<std::string> rna_MeshVertex_path(
const PointerRNA *
ptr)
1382 return fmt::format(
"vertices[{}]", rna_MeshVertex_index_get(
const_cast<PointerRNA *
>(
ptr)));
1385static std::optional<std::string> rna_VertCustomData_data_path(
const PointerRNA *
ptr,
1386 const char *collection,
1390 const Mesh *mesh = rna_mesh(
ptr);
1392 int a,
b, totvert = (mesh->
runtime->edit_mesh) ? 0 : mesh->verts_num;
1394 for (cdl = vdata->
layers, a = 0; a < vdata->totlayer; cdl++, a++) {
1395 if (cdl->
type == type) {
1397 if (
b >= 0 &&
b < totvert) {
1398 char name_esc[
sizeof(cdl->
name) * 2];
1400 return fmt::format(
"{}[\"{}\"].data[{}]", collection, name_esc,
b);
1405 return std::nullopt;
1408static std::optional<std::string> rna_LoopCustomData_data_path(
const PointerRNA *
ptr,
1409 const char *collection,
1413 const Mesh *mesh = rna_mesh(
ptr);
1415 int a,
b, totloop = (mesh->
runtime->edit_mesh) ? 0 : mesh->corners_num;
1417 for (cdl = ldata->
layers, a = 0; a < ldata->totlayer; cdl++, a++) {
1418 if (cdl->
type == type) {
1420 if (
b >= 0 &&
b < totloop) {
1421 char name_esc[
sizeof(cdl->
name) * 2];
1423 return fmt::format(
"{}[\"{}\"].data[{}]", collection, name_esc,
b);
1428 return std::nullopt;
1436 mesh->vert_positions_for_write().data(),
1444 const Mesh *mesh = rna_mesh(
ptr);
1450 if (index < 0 || index >= mesh->
verts_num) {
1454 *
ptr, &RNA_MeshVertex, &mesh->vert_positions_for_write()[index], *r_ptr);
1468 const Mesh *mesh = rna_mesh(
ptr);
1475 if (index < 0 || index >= mesh->
edges_num) {
1488 mesh->face_offsets_for_write().data(),
1496 const Mesh *mesh = rna_mesh(
ptr);
1502 if (index < 0 || index >= mesh->
faces_num) {
1506 *
ptr, &RNA_MeshPolygon, &mesh->face_offsets_for_write()[index], *r_ptr);
1515 mesh->corner_verts_for_write().data(),
1523 const Mesh *mesh = rna_mesh(
ptr);
1533 *
ptr, &RNA_MeshLoop, &mesh->corner_verts_for_write()[index], *r_ptr);
1539 return int(rna_mesh(
ptr)->normals_domain());
1544 const Mesh *mesh = rna_mesh(
ptr);
1557 const Mesh *mesh = rna_mesh(
ptr);
1563 const Mesh *mesh = rna_mesh(
ptr);
1564 if (index < 0 || index >= mesh->
verts_num) {
1569 &RNA_MeshNormalValue,
1577 const Mesh *mesh = rna_mesh(
ptr);
1590 const Mesh *mesh = rna_mesh(
ptr);
1596 const Mesh *mesh = rna_mesh(
ptr);
1597 if (index < 0 || index >= mesh->
faces_num) {
1602 &RNA_MeshNormalValue,
1610 const Mesh *mesh = rna_mesh(
ptr);
1613 iter->
valid =
false;
1622 const Mesh *mesh = rna_mesh(
ptr);
1628 const Mesh *mesh = rna_mesh(
ptr);
1639static std::optional<std::string> rna_MeshUVLoop_path(
const PointerRNA *
ptr)
1654 int *r_uv_map_index,
1655 int *r_index_in_attribute)
1657 const Mesh *mesh = rna_mesh(
ptr);
1662 for (
int layer_i = 0; layer_i < uv_layers_num; layer_i++) {
1665 const ptrdiff_t index = uv_coord - layer_data;
1666 if (index >= 0 && index < mesh->corners_num) {
1667 *r_uv_map_index = layer_i;
1668 *r_index_in_attribute = index;
1679 const Mesh *mesh = rna_mesh(
ptr);
1683 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1686 return pin_uv ? pin_uv[loop_index] :
false;
1689static void rna_MeshUVLoop_pin_uv_set(
PointerRNA *
ptr,
const bool value)
1694 if (get_uv_index_and_layer(
ptr, &uv_map_index, &loop_index)) {
1697 pin_uv.
varray.set(loop_index, value);
1702static void rna_MeshUVLoop_uv_get(
PointerRNA *
ptr,
float *value)
1707static void rna_MeshUVLoop_uv_set(
PointerRNA *
ptr,
const float *value)
1712static std::optional<std::string> rna_MeshLoopColorLayer_path(
const PointerRNA *
ptr)
1715 char name_esc[
sizeof(cdl->
name) * 2];
1717 return fmt::format(
"vertex_colors[\"{}\"]", name_esc);
1720static std::optional<std::string> rna_MeshColor_path(
const PointerRNA *
ptr)
1730 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totvertsel : 0;
1735 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totedgesel : 0;
1740 return mesh->
runtime->edit_mesh ? mesh->
runtime->edit_mesh->bm->totfacesel : 0;
1753 ldata = rna_mesh_ldata_helper(mesh);
1784 ldata = rna_mesh_ldata_helper(mesh);
1806 return (mesh->
runtime->edit_mesh !=
nullptr);
1809static bool rna_Mesh_materials_override_apply(
Main *bmain,
1819 "Unsupported RNA override operation on collections' objects");
1824 if (ptr_item_dst->type ==
nullptr || ptr_item_src->type ==
nullptr) {
1832 if (mat_src == mat_dst) {
1836 bool is_modified =
false;
1837 for (
int i = 0;
i < mesh_dst->totcol;
i++) {
1838 if (mesh_dst->mat[
i] == mat_dst) {
1840 mesh_dst->mat[
i] = mat_src;
1870 srna,
"Vertex Group Element",
"Weight value of a vertex in a vertex group");
1923 "rna_MeshVertex_groups_begin",
1924 "rna_iterator_array_next",
1925 "rna_iterator_array_end",
1926 "rna_iterator_array_get",
1933 prop,
"Groups",
"Weights for the vertex groups this vertex is member of");
1944 "Undeformed Location",
1945 "For meshes with modifiers applied, the coordinate of the vertex with no deforming "
1946 "modifiers applied, as used for generated texture coordinates");
1988 prop,
"rna_MeshEdge_use_edge_sharp_get",
"rna_MeshEdge_use_edge_sharp_set");
2007 const int splitnor_dim[] = {3, 3};
2038 prop,
"Triangle Normal",
"Local space unit length normal vector for this triangle");
2048 "Local space unit length custom normal vectors of the face corners of this triangle");
2083 prop,
"rna_MeshLoop_vertex_index_get",
"rna_MeshLoop_vertex_index_set",
nullptr);
2089 prop,
"rna_MeshLoop_edge_index_get",
"rna_MeshLoop_edge_index_set",
nullptr);
2105 "The normal direction of the face corner, taking into account sharp "
2106 "faces, sharp edges, and custom normal data");
2115 "Local space unit length tangent vector of this vertex for this face "
2116 "(must be computed beforehand using calc_tangents)");
2125 "Sign of the bitangent vector of this vertex for this face (must be computed "
2126 "beforehand using calc_tangents, bitangent = bitangent_sign * cross(normal, tangent))");
2136 "Bitangent vector of this vertex for this face (must be computed beforehand using "
2137 "calc_tangents, use it only if really needed, slower access than bitangent_sign)");
2162 prop,
"rna_MeshPoly_vertices_get",
"rna_MeshPoly_vertices_set",
nullptr);
2179 prop,
"rna_MeshPolygon_material_index_get",
"rna_MeshPolygon_material_index_set",
nullptr);
2200 prop,
"rna_MeshPolygon_use_smooth_get",
"rna_MeshPolygon_use_smooth_set");
2210 prop,
"Polygon Normal",
"Local space unit length normal vector for this face");
2248 "MeshUVLoop (Deprecated)",
2249 "Deprecated, use 'uv', 'vertex_select', 'edge_select' or 'pin' properties instead");
2252 "rna_MeshUVLoopLayer_data_begin",
2253 "rna_iterator_array_next",
2254 "rna_iterator_array_end",
2255 "rna_iterator_array_get",
2256 "rna_MeshUVLoopLayer_data_length",
2270 prop,
"rna_MeshUVLoopLayer_active_get",
"rna_MeshUVLoopLayer_active_set");
2278 prop,
"rna_MeshUVLoopLayer_active_render_get",
"rna_MeshUVLoopLayer_active_render_set");
2286 prop,
"rna_MeshUVLoopLayer_clone_get",
"rna_MeshUVLoopLayer_clone_set");
2296 "rna_MeshUVLoopLayer_uv_begin",
2297 "rna_iterator_array_next",
2298 "rna_iterator_array_end",
2299 "rna_iterator_array_get",
2300 "rna_MeshUVLoopLayer_data_length",
2301 "rna_MeshUVLoopLayer_uv_lookup_int",
2311 "rna_MeshUVLoopLayer_pin_begin",
2312 "rna_iterator_array_next",
2313 "rna_iterator_array_end",
2314 "rna_iterator_array_get",
2315 "rna_MeshUVLoopLayer_pin_length",
2316 "rna_MeshUVLoopLayer_pin_lookup_int",
2320 func =
RNA_def_function(srna,
"pin_ensure",
"rna_MeshUVLoopLayer_pin_ensure");
2322 parm =
RNA_def_pointer(func,
"layer",
"BoolAttribute",
"",
"The boolean attribute");
2328 srna,
"Mesh UV Layer",
"(Deprecated) Layer of UV coordinates in a Mesh data-block");
2349 srna,
"Mesh Vertex Color Layer",
"Layer of vertex colors in a Mesh data-block");
2370 prop,
"rna_mesh_color_active_render_get",
"rna_mesh_color_active_render_set");
2380 "rna_MeshLoopColorLayer_data_begin",
2381 "rna_iterator_array_next",
2382 "rna_iterator_array_end",
2383 "rna_iterator_array_get",
2384 "rna_MeshLoopColorLayer_data_length",
2398 prop,
"rna_MeshLoopColor_color_get",
"rna_MeshLoopColor_color_set",
nullptr);
2412 "Auto Texture Space",
2413 "Adjust active object's texture space automatically when transforming object");
2446 "rna_IDMaterials_assign_int");
2467 func,
"count", 0, 0, INT_MAX,
"Count",
"Number of vertices to add", 0, INT_MAX);
2472 RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of vertices to remove", 0, INT_MAX);
2492 parm =
RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of edges to add", 0, INT_MAX);
2497 RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of edges to remove", 0, INT_MAX);
2510 srna,
"Mesh Loop Triangles",
"Tessellation of mesh polygons into triangles");
2530 parm =
RNA_def_int(func,
"count", 0, 0, INT_MAX,
"Count",
"Number of loops to add", 0, INT_MAX);
2557 func,
"count", 0, 0, INT_MAX,
"Count",
"Number of polygons to add", 0, INT_MAX);
2596 "Whether new layer's data should be initialized by copying current active one");
2597 parm =
RNA_def_pointer(func,
"layer",
"MeshLoopColorLayer",
"",
"The newly created layer");
2604 parm =
RNA_def_pointer(func,
"layer",
"MeshLoopColorLayer",
"",
"The layer to remove");
2611 "rna_Mesh_vertex_color_active_get",
2612 "rna_Mesh_vertex_color_active_set",
2621 "rna_Mesh_vertex_color_active_index_get",
2622 "rna_Mesh_vertex_color_active_index_set",
2623 "rna_Mesh_vertex_color_index_range");
2650 "Whether new layer's data should be initialized by copying current active one, "
2651 "or if none is active, with a default UVmap");
2652 parm =
RNA_def_pointer(func,
"layer",
"MeshUVLoopLayer",
"",
"The newly created layer");
2659 parm =
RNA_def_pointer(func,
"layer",
"MeshUVLoopLayer",
"",
"The layer to remove");
2665 prop,
"rna_Mesh_uv_layer_active_get",
"rna_Mesh_uv_layer_active_set",
nullptr,
nullptr);
2673 "rna_Mesh_uv_layer_active_index_get",
2674 "rna_Mesh_uv_layer_active_index_set",
2675 "rna_Mesh_uv_layer_index_range");
2688 srna,
"Mesh Skin Vertex Layer",
"Per-vertex skin data for use with the Skin modifier");
2704 "rna_MeshSkinVertexLayer_data_begin",
2705 "rna_iterator_array_next",
2706 "rna_iterator_array_end",
2707 "rna_iterator_array_get",
2708 "rna_MeshSkinVertexLayer_data_length",
2717 srna,
"Skin Vertex",
"Per-vertex skin data for use with the Skin modifier");
2732 "Vertex is a root for rotation calculations and armature generation, "
2733 "setting this flag does not clear other roots in the same mesh island");
2739 prop,
"Loose",
"If vertex has multiple adjacent edges, it is hulled to them directly");
2766 "rna_Mesh_vertices_begin",
2767 "rna_iterator_array_next",
2768 "rna_iterator_array_end",
2769 "rna_iterator_array_get",
2770 "rna_Mesh_vertices_length",
2771 "rna_Mesh_vertices_lookup_int",
2781 "rna_Mesh_edges_begin",
2782 "rna_iterator_array_next",
2783 "rna_iterator_array_end",
2784 "rna_iterator_array_get",
2785 "rna_Mesh_edges_length",
2786 "rna_Mesh_edges_lookup_int",
2796 "rna_Mesh_loops_begin",
2797 "rna_iterator_array_next",
2798 "rna_iterator_array_end",
2799 "rna_iterator_array_get",
2800 "rna_Mesh_loops_length",
2801 "rna_Mesh_loops_lookup_int",
2811 "rna_Mesh_polygons_begin",
2812 "rna_iterator_array_next",
2813 "rna_iterator_array_end",
2814 "rna_iterator_array_get",
2815 "rna_Mesh_polygons_length",
2816 "rna_Mesh_polygons_lookup_int",
2830 {0,
nullptr, 0,
nullptr,
nullptr},
2838 "The attribute domain that gives enough information to represent the mesh's normals");
2847 "The normal direction of each vertex, defined as the average of the "
2848 "surrounding face normals");
2850 "rna_Mesh_vertex_normals_begin",
2851 "rna_iterator_array_next",
2852 "rna_iterator_array_end",
2853 "rna_iterator_array_get",
2854 "rna_Mesh_vertex_normals_length",
2855 "rna_Mesh_vertex_normals_lookup_int",
2864 "The normal direction of each face, defined by the winding order "
2865 "and position of its vertices");
2867 "rna_Mesh_poly_normals_begin",
2868 "rna_iterator_array_next",
2869 "rna_iterator_array_end",
2870 "rna_iterator_array_get",
2871 "rna_Mesh_poly_normals_length",
2872 "rna_Mesh_poly_normals_lookup_int",
2882 "The \"slit\" normal direction of each face corner, influenced by vertex normals, "
2883 "sharp faces, sharp edges, and custom normals. May be empty.");
2885 "rna_Mesh_corner_normals_begin",
2886 "rna_iterator_array_next",
2887 "rna_iterator_array_end",
2888 "rna_iterator_array_get",
2889 "rna_Mesh_corner_normals_length",
2890 "rna_Mesh_corner_normals_lookup_int",
2896 "rna_Mesh_loop_triangles_begin",
2897 "rna_iterator_array_next",
2898 "rna_iterator_array_end",
2899 "rna_iterator_array_get",
2900 "rna_Mesh_loop_triangles_length",
2901 "rna_Mesh_loop_triangles_lookup_int",
2913 "rna_Mesh_loop_triangle_polygons_begin",
2914 "rna_iterator_array_next",
2915 "rna_iterator_array_end",
2916 "rna_iterator_array_get",
2917 "rna_Mesh_loop_triangles_length",
2918 "rna_Mesh_loop_triangle_polygons_lookup_int",
2934 "Use another mesh for texture indices (vertex indices must be aligned)");
2940 "rna_Mesh_uv_layers_begin",
2944 "rna_Mesh_uv_layers_length",
2956 prop,
"rna_Mesh_uv_layer_clone_get",
"rna_Mesh_uv_layer_clone_set",
nullptr,
nullptr);
2960 prop,
"Clone UV Loop Layer",
"UV loop layer to be used as cloning source");
2964 "rna_Mesh_uv_layer_clone_index_get",
2965 "rna_Mesh_uv_layer_clone_index_set",
2966 "rna_Mesh_uv_layer_index_range");
2973 prop,
"rna_Mesh_uv_layer_stencil_get",
"rna_Mesh_uv_layer_stencil_set",
nullptr,
nullptr);
2980 "rna_Mesh_uv_layer_stencil_index_get",
2981 "rna_Mesh_uv_layer_stencil_index_set",
2982 "rna_Mesh_uv_layer_index_range");
2992 "rna_Mesh_vertex_colors_begin",
2996 "rna_Mesh_vertex_colors_length",
3005 "Legacy vertex color layers. Deprecated, use color attributes instead.");
3012 "rna_Mesh_skin_vertices_begin",
3016 "rna_Mesh_skin_vertices_length",
3038 "Size of the voxel in object space used for volume evaluation. Lower "
3039 "values preserve finer details.");
3051 "Reduces the final face count by simplifying geometry where detail is not needed, "
3052 "generating triangles. A value greater than 0 disables Fix Poles.");
3069 "Projects the mesh to preserve the volume and details of the original mesh");
3114 "Mirror Vertex Groups",
3115 "Mirror the left/right vertex groups when painting. The symmetry axis "
3116 "is determined by the symmetry settings.");
3126 prop,
"Radial Symmetry Count",
"Number of mirrored regions around a central axis");
3134 prop,
"Has Custom Normals",
"True if there is custom normal data for this mesh");
3143 prop,
"Texture Space Mesh",
"Derive texture coordinates from another mesh");
3156 "Auto Texture Space",
3157 "Adjust active object's texture space automatically when transforming object");
3166 prop,
"rna_Mesh_texspace_location_get",
"rna_Mesh_texspace_location_set",
nullptr);
3176 "Use topology based mirroring "
3177 "(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)
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)
eCustomDataMask CD_TYPE_AS_MASK(eCustomDataType type)
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_named_layer_index(const CustomData *data, eCustomDataType type, blender::StringRef name)
int CustomData_get_layer_index(const CustomData *data, eCustomDataType type)
void CustomData_set_layer_clone_index(CustomData *data, eCustomDataType type, int n)
void CustomData_set_layer_unique_name(CustomData *data, int index)
void CustomData_ensure_data_is_mutable(CustomDataLayer *layer, int totelem)
int CustomData_get_active_layer_index(const CustomData *data, eCustomDataType type)
int CustomData_number_of_layers(const CustomData *data, eCustomDataType 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)
#define MAX_CUSTOMDATA_LAYER_NAME
#define CD_MASK_PROP_BYTE_COLOR
#define MAX_CUSTOMDATA_LAYER_NAME_NO_PREFIX
@ ME_EDIT_MIRROR_VERTEX_GROUPS
@ ME_REMESH_REPROJECT_ATTRIBUTES
@ ME_REMESH_REPROJECT_VOLUME
blender::bke::AttributeWriter< bool > ED_mesh_uv_map_pin_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)
blender::VArray< bool > ED_mesh_uv_map_pin_layer_get(const Mesh *mesh, int uv_index)
int ED_mesh_color_add(Mesh *mesh, const char *name, bool active_set, bool do_init, ReportList *reports)
#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 int64_t size() const
constexpr T * data() const
constexpr const T * data() const
constexpr int64_t size() const
GAttributeReader lookup_or_default(StringRef attribute_id, AttrDomain domain, AttrType data_type, const void *default_value=nullptr) const
GAttributeWriter lookup_or_add_for_write(StringRef attribute_id, AttrDomain domain, AttrType data_type, const AttributeInit &initializer=AttributeInitDefaultValue())
static float normals[][3]
float length(VecOp< float, D >) RET
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< float, 4 > float4
VecBase< int32_t, 2 > int2
VecBase< float, 2 > float2
VecBase< int32_t, 3 > int3
VecBase< float, 3 > float3
void RNA_property_update_main(Main *bmain, Scene *scene, PointerRNA *ptr, PropertyRNA *prop)
void rna_iterator_array_begin(CollectionPropertyIterator *iter, PointerRNA *ptr, void *data, size_t itemsize, int64_t length, bool free_ptr, IteratorSkipFunc skip)
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_int_default(PropertyRNA *prop, int value)
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)