Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHans Goudey <h.goudey@me.com>2022-08-31 22:17:29 +0300
committerHans Goudey <h.goudey@me.com>2022-08-31 22:17:29 +0300
commit495df255251137e5ea9c72d63cae49074c83e695 (patch)
treebd5763d3ee88c8749264dc3939cbf6d4baab2e54
parent44f8056fdf69ee499b22f36e30c0533339eb4c4c (diff)
Use C++ methods to retrieve geometry data
-rw-r--r--source/blender/blenkernel/BKE_mesh.h36
-rw-r--r--source/blender/blenkernel/intern/DerivedMesh.cc8
-rw-r--r--source/blender/blenkernel/intern/bvhutils.cc10
-rw-r--r--source/blender/blenkernel/intern/crazyspace.cc6
-rw-r--r--source/blender/blenkernel/intern/curve_to_mesh_convert.cc8
-rw-r--r--source/blender/blenkernel/intern/geometry_component_mesh.cc58
-rw-r--r--source/blender/blenkernel/intern/gpencil_geom.cc10
-rw-r--r--source/blender/blenkernel/intern/mesh.cc50
-rw-r--r--source/blender/blenkernel/intern/mesh_boolean_convert.cc34
-rw-r--r--source/blender/blenkernel/intern/mesh_calc_edges.cc10
-rw-r--r--source/blender/blenkernel/intern/mesh_convert.cc48
-rw-r--r--source/blender/blenkernel/intern/mesh_evaluate.cc40
-rw-r--r--source/blender/blenkernel/intern/mesh_fair.cc8
-rw-r--r--source/blender/blenkernel/intern/mesh_legacy_convert.cc20
-rw-r--r--source/blender/blenkernel/intern/mesh_normals.cc20
-rw-r--r--source/blender/blenkernel/intern/mesh_remesh_voxel.cc20
-rw-r--r--source/blender/blenkernel/intern/mesh_runtime.cc14
-rw-r--r--source/blender/blenkernel/intern/mesh_sample.cc18
-rw-r--r--source/blender/blenkernel/intern/mesh_validate.cc34
-rw-r--r--source/blender/blenkernel/intern/mesh_wrapper.cc4
-rw-r--r--source/blender/blenkernel/intern/object.cc6
-rw-r--r--source/blender/blenkernel/intern/object_dupli.cc8
-rw-r--r--source/blender/blenkernel/intern/paint.cc16
-rw-r--r--source/blender/blenkernel/intern/pbvh_pixels.cc2
-rw-r--r--source/blender/blenkernel/intern/subdiv_mesh.cc2
-rw-r--r--source/blender/blenkernel/intern/volume_to_mesh.cc6
-rw-r--r--source/blender/bmesh/intern/bmesh_mesh_convert.cc16
-rw-r--r--source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc4
-rw-r--r--source/blender/compositor/nodes/COM_GlareNode.cc2
-rw-r--r--source/blender/compositor/nodes/COM_SunBeamsNode.cc2
-rw-r--r--source/blender/depsgraph/intern/builder/deg_builder_nodes.cc8
-rw-r--r--source/blender/draw/intern/draw_cache_impl_subdivision.cc8
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc4
-rw-r--r--source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc2
-rw-r--r--source/blender/editors/curves/intern/curves_ops.cc6
-rw-r--r--source/blender/editors/mesh/editface.cc38
-rw-r--r--source/blender/editors/mesh/mesh_data.cc14
-rw-r--r--source/blender/editors/mesh/meshtools.cc12
-rw-r--r--source/blender/editors/object/object_modifier.cc10
-rw-r--r--source/blender/editors/object/object_remesh.cc8
-rw-r--r--source/blender/editors/object/object_vgroup.cc33
-rw-r--r--source/blender/editors/sculpt_paint/curves_sculpt_add.cc4
-rw-r--r--source/blender/editors/sculpt_paint/curves_sculpt_puff.cc4
-rw-r--r--source/blender/editors/sculpt_paint/curves_sculpt_slide.cc8
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex.cc10
-rw-r--r--source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc4
-rw-r--r--source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc6
-rw-r--r--source/blender/editors/transform/transform_snap_object.cc8
-rw-r--r--source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp10
-rw-r--r--source/blender/geometry/intern/add_curves_on_mesh.cc4
-rw-r--r--source/blender/geometry/intern/mesh_merge_by_distance.cc22
-rw-r--r--source/blender/geometry/intern/mesh_primitive_cuboid.cc6
-rw-r--r--source/blender/geometry/intern/mesh_to_curve_convert.cc4
-rw-r--r--source/blender/geometry/intern/mesh_to_volume.cc2
-rw-r--r--source/blender/geometry/intern/realize_instances.cc16
-rw-r--r--source/blender/io/alembic/exporter/abc_writer_mesh.cc10
-rw-r--r--source/blender/io/alembic/intern/abc_reader_mesh.cc14
-rw-r--r--source/blender/io/collada/GeometryExporter.cpp22
-rw-r--r--source/blender/io/collada/MeshImporter.cpp10
-rw-r--r--source/blender/io/stl/importer/stl_import_mesh.cc6
-rw-r--r--source/blender/io/usd/intern/usd_reader_mesh.cc18
-rw-r--r--source/blender/io/usd/intern/usd_writer_mesh.cc12
-rw-r--r--source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc34
-rw-r--r--source/blender/io/wavefront_obj/importer/obj_import_mesh.cc8
-rw-r--r--source/blender/io/wavefront_obj/tests/obj_importer_tests.cc2
-rw-r--r--source/blender/makesdna/DNA_mesh_types.h23
-rw-r--r--source/blender/modifiers/intern/MOD_boolean.cc2
-rw-r--r--source/blender/modifiers/intern/MOD_mask.cc46
-rw-r--r--source/blender/modifiers/intern/MOD_meshsequencecache.cc12
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc66
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc26
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc28
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_selection.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc51
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc14
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_island.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_input_shortest_edge_paths.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc10
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc4
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc22
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_set_position.cc2
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc6
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc8
-rw-r--r--source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc6
-rw-r--r--source/blender/render/intern/texture_margin.cc6
100 files changed, 682 insertions, 663 deletions
diff --git a/source/blender/blenkernel/BKE_mesh.h b/source/blender/blenkernel/BKE_mesh.h
index 0adcbd74e31..a6dcc3f5139 100644
--- a/source/blender/blenkernel/BKE_mesh.h
+++ b/source/blender/blenkernel/BKE_mesh.h
@@ -1113,44 +1113,40 @@ BLI_INLINE MDeformVert *BKE_mesh_deform_verts_for_write(Mesh *mesh)
# include "BLI_span.hh"
-namespace blender::bke {
-
-inline Span<MVert> mesh_vertices(const Mesh &mesh)
+inline blender::Span<MVert> Mesh::vertices() const
{
- return {BKE_mesh_vertices(&mesh), mesh.totvert};
+ return {BKE_mesh_vertices(this), this->totvert};
}
-inline MutableSpan<MVert> mesh_vertices_for_write(Mesh &mesh)
+inline blender::MutableSpan<MVert> Mesh::vertices_for_write()
{
- return {BKE_mesh_vertices_for_write(&mesh), mesh.totvert};
+ return {BKE_mesh_vertices_for_write(this), this->totvert};
}
-inline Span<MEdge> mesh_edges(const Mesh &mesh)
+inline blender::Span<MEdge> Mesh::edges() const
{
- return {BKE_mesh_edges(&mesh), mesh.totedge};
+ return {BKE_mesh_edges(this), this->totedge};
}
-inline MutableSpan<MEdge> mesh_edges_for_write(Mesh &mesh)
+inline blender::MutableSpan<MEdge> Mesh::edges_for_write()
{
- return {BKE_mesh_edges_for_write(&mesh), mesh.totedge};
+ return {BKE_mesh_edges_for_write(this), this->totedge};
}
-inline Span<MPoly> mesh_polygons(const Mesh &mesh)
+inline blender::Span<MPoly> Mesh::polygons() const
{
- return {BKE_mesh_polygons(&mesh), mesh.totpoly};
+ return {BKE_mesh_polygons(this), this->totpoly};
}
-inline MutableSpan<MPoly> mesh_polygons_for_write(Mesh &mesh)
+inline blender::MutableSpan<MPoly> Mesh::polygons_for_write()
{
- return {BKE_mesh_polygons_for_write(&mesh), mesh.totpoly};
+ return {BKE_mesh_polygons_for_write(this), this->totpoly};
}
-inline Span<MLoop> mesh_loops(const Mesh &mesh)
+inline blender::Span<MLoop> Mesh::loops() const
{
- return {BKE_mesh_loops(&mesh), mesh.totloop};
+ return {BKE_mesh_loops(this), this->totloop};
}
-inline MutableSpan<MLoop> mesh_loops_for_write(Mesh &mesh)
+inline blender::MutableSpan<MLoop> Mesh::loops_for_write()
{
- return {BKE_mesh_loops_for_write(&mesh), mesh.totloop};
+ return {BKE_mesh_loops_for_write(this), this->totloop};
}
-} // namespace blender::bke
-
#endif
diff --git a/source/blender/blenkernel/intern/DerivedMesh.cc b/source/blender/blenkernel/intern/DerivedMesh.cc
index cb3f9113747..46a8caafa70 100644
--- a/source/blender/blenkernel/intern/DerivedMesh.cc
+++ b/source/blender/blenkernel/intern/DerivedMesh.cc
@@ -2003,7 +2003,7 @@ void mesh_get_mapped_verts_coords(Mesh *me_eval, float (*r_cos)[3], const int to
MEM_freeN(userData.vertex_visit);
}
else {
- const Span<MVert> verts = blender::bke::mesh_vertices(*me_eval);
+ const Span<MVert> verts = me_eval->vertices();
for (int i = 0; i < totcos; i++) {
copy_v3_v3(r_cos[i], verts[i].co);
}
@@ -2018,9 +2018,9 @@ static void mesh_init_origspace(Mesh *mesh)
CD_ORIGSPACE_MLOOP);
const int numpoly = mesh->totpoly;
// const int numloop = mesh->totloop;
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
const MPoly *mp = polys.data();
int i, j, k;
diff --git a/source/blender/blenkernel/intern/bvhutils.cc b/source/blender/blenkernel/intern/bvhutils.cc
index 023bdef6051..ba72a924f6d 100644
--- a/source/blender/blenkernel/intern/bvhutils.cc
+++ b/source/blender/blenkernel/intern/bvhutils.cc
@@ -1249,10 +1249,10 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
looptri = BKE_mesh_runtime_looptri_ensure(mesh);
looptri_len = BKE_mesh_runtime_looptri_len(mesh);
}
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MEdge> edges = mesh->edges();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
/* Setup BVHTreeFromMesh */
bvhtree_from_mesh_setup_data(nullptr,
@@ -1316,7 +1316,7 @@ BVHTree *BKE_bvhtree_from_mesh_get(struct BVHTreeFromMesh *data,
case BVHTREE_FROM_LOOPTRI_NO_HIDDEN: {
blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*mesh);
mask = looptri_no_hidden_map_get(
- blender::bke::mesh_polygons(*mesh).data(),
+ mesh->polygons().data(),
attributes.lookup_or_default(".hide_poly", ATTR_DOMAIN_FACE, false),
looptri_len,
&mask_bits_act_len);
diff --git a/source/blender/blenkernel/intern/crazyspace.cc b/source/blender/blenkernel/intern/crazyspace.cc
index 86cc93bb976..17fb9fdb03e 100644
--- a/source/blender/blenkernel/intern/crazyspace.cc
+++ b/source/blender/blenkernel/intern/crazyspace.cc
@@ -187,9 +187,9 @@ void BKE_crazyspace_set_quats_mesh(Mesh *me,
BLI_bitmap *vert_tag = BLI_BITMAP_NEW(me->totvert, __func__);
/* first store two sets of tangent vectors in vertices, we derive it just from the face-edges */
- const Span<MVert> verts = mesh_vertices(*me);
- const Span<MPoly> polys = mesh_polygons(*me);
- const Span<MLoop> loops = mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
for (int i = 0; i < me->totpoly; i++) {
const MPoly *poly = &polys[i];
diff --git a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
index ce91a5a1c10..47cd8495b18 100644
--- a/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
+++ b/source/blender/blenkernel/intern/curve_to_mesh_convert.cc
@@ -640,10 +640,10 @@ Mesh *curve_to_mesh_sweep(const CurvesGeometry &main,
offsets.vert.last(), offsets.edge.last(), 0, offsets.loop.last(), offsets.poly.last());
mesh->flag |= ME_AUTOSMOOTH;
mesh->smoothresh = DEG2RADF(180.0f);
- MutableSpan<MVert> verts = mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
foreach_curve_combination(curves_info, offsets, [&](const CombinationInfo &info) {
fill_mesh_topology(info.vert_range.start(),
diff --git a/source/blender/blenkernel/intern/geometry_component_mesh.cc b/source/blender/blenkernel/intern/geometry_component_mesh.cc
index 3052ab77185..11ca2ba2087 100644
--- a/source/blender/blenkernel/intern/geometry_component_mesh.cc
+++ b/source/blender/blenkernel/intern/geometry_component_mesh.cc
@@ -134,7 +134,7 @@ VArray<float3> mesh_normals_varray(const Mesh &mesh,
* instead of the GeometryComponent API to avoid calculating unnecessary values and to
* allow normalizing the result more simply. */
Span<float3> vert_normals{(float3 *)BKE_mesh_vertex_normals_ensure(&mesh), mesh.totvert};
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
Array<float3> edge_normals(mask.min_array_size());
for (const int i : mask) {
const MEdge &edge = edges[i];
@@ -175,7 +175,7 @@ static void adapt_mesh_domain_corner_to_point_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -195,7 +195,7 @@ void adapt_mesh_domain_corner_to_point_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
Array<bool> loose_verts(mesh.totvert, true);
@@ -239,7 +239,7 @@ static GVArray adapt_mesh_domain_corner_to_point(const Mesh &mesh, const GVArray
*/
static GVArray adapt_mesh_domain_point_to_corner(const Mesh &mesh, const GVArray &varray)
{
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
GVArray new_varray;
attribute_math::convert_to_static_type(varray.type(), [&](auto dummy) {
@@ -255,7 +255,7 @@ static GVArray adapt_mesh_domain_point_to_corner(const Mesh &mesh, const GVArray
static GVArray adapt_mesh_domain_corner_to_face(const Mesh &mesh, const GVArray &varray)
{
- const Span<MPoly> polys = mesh_polygons(mesh);
+ const Span<MPoly> polys = mesh.polygons();
GVArray new_varray;
attribute_math::convert_to_static_type(varray.type(), [&](auto dummy) {
@@ -299,8 +299,8 @@ static void adapt_mesh_domain_corner_to_edge_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totedge);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -329,8 +329,8 @@ void adapt_mesh_domain_corner_to_edge_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totedge);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
/* It may be possible to rely on the #ME_LOOSEEDGE flag, but that seems error-prone. */
Array<bool> loose_edges(mesh.totedge, true);
@@ -384,8 +384,8 @@ void adapt_mesh_domain_face_to_point_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -409,8 +409,8 @@ void adapt_mesh_domain_face_to_point_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_values.fill(false);
for (const int poly_index : polys.index_range()) {
@@ -446,7 +446,7 @@ void adapt_mesh_domain_face_to_corner_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totloop);
- const Span<MPoly> polys = mesh_polygons(mesh);
+ const Span<MPoly> polys = mesh.polygons();
threading::parallel_for(polys.index_range(), 1024, [&](const IndexRange range) {
for (const int poly_index : range) {
@@ -477,8 +477,8 @@ void adapt_mesh_domain_face_to_edge_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totedge);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -500,8 +500,8 @@ void adapt_mesh_domain_face_to_edge_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totedge);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_values.fill(false);
for (const int poly_index : polys.index_range()) {
@@ -532,8 +532,8 @@ static GVArray adapt_mesh_domain_face_to_edge(const Mesh &mesh, const GVArray &v
static GVArray adapt_mesh_domain_point_to_face(const Mesh &mesh, const GVArray &varray)
{
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
GVArray new_varray;
attribute_math::convert_to_static_type(varray.type(), [&](auto dummy) {
@@ -575,7 +575,7 @@ static GVArray adapt_mesh_domain_point_to_face(const Mesh &mesh, const GVArray &
static GVArray adapt_mesh_domain_point_to_edge(const Mesh &mesh, const GVArray &varray)
{
- const Span<MEdge> edges = mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
GVArray new_varray;
attribute_math::convert_to_static_type(varray.type(), [&](auto dummy) {
@@ -612,8 +612,8 @@ void adapt_mesh_domain_edge_to_corner_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totloop);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -640,8 +640,8 @@ void adapt_mesh_domain_edge_to_corner_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totloop);
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_values.fill(false);
@@ -678,7 +678,7 @@ static void adapt_mesh_domain_edge_to_point_impl(const Mesh &mesh,
MutableSpan<T> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MEdge> edges = mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
attribute_math::DefaultMixer<T> mixer(r_values);
@@ -699,7 +699,7 @@ void adapt_mesh_domain_edge_to_point_impl(const Mesh &mesh,
MutableSpan<bool> r_values)
{
BLI_assert(r_values.size() == mesh.totvert);
- const Span<MEdge> edges = mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
r_values.fill(false);
for (const int edge_index : edges.index_range()) {
@@ -727,8 +727,8 @@ static GVArray adapt_mesh_domain_edge_to_point(const Mesh &mesh, const GVArray &
static GVArray adapt_mesh_domain_edge_to_face(const Mesh &mesh, const GVArray &varray)
{
- const Span<MPoly> polys = mesh_polygons(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
GVArray new_varray;
attribute_math::convert_to_static_type(varray.type(), [&](auto dummy) {
diff --git a/source/blender/blenkernel/intern/gpencil_geom.cc b/source/blender/blenkernel/intern/gpencil_geom.cc
index 26d9e9051f2..9eb3775cb19 100644
--- a/source/blender/blenkernel/intern/gpencil_geom.cc
+++ b/source/blender/blenkernel/intern/gpencil_geom.cc
@@ -2465,8 +2465,8 @@ static void gpencil_generate_edgeloops(Object *ob,
return;
}
const float(*vert_normals)[3] = BKE_mesh_vertex_normals_ensure(me);
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MEdge> edges = blender::bke::mesh_edges(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MEdge> edges = me->edges();
/* Arrays for all edge vertices (forward and backward) that form a edge loop.
* This is reused for each edge-loop to create gpencil stroke. */
@@ -2677,9 +2677,9 @@ bool BKE_gpencil_convert_mesh(Main *bmain,
/* Use evaluated data to get mesh with all modifiers on top. */
Object *ob_eval = (Object *)DEG_get_evaluated_object(depsgraph, ob_mesh);
const Mesh *me_eval = BKE_object_get_evaluated_mesh(ob_eval);
- const Span<MVert> verts = blender::bke::mesh_vertices(*me_eval);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me_eval);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me_eval);
+ const Span<MVert> verts = me_eval->vertices();
+ const Span<MPoly> polys = me_eval->polygons();
+ const Span<MLoop> loops = me_eval->loops();
int mpoly_len = me_eval->totpoly;
char element_name[200];
diff --git a/source/blender/blenkernel/intern/mesh.cc b/source/blender/blenkernel/intern/mesh.cc
index 58f5c51be16..dd293f4cf50 100644
--- a/source/blender/blenkernel/intern/mesh.cc
+++ b/source/blender/blenkernel/intern/mesh.cc
@@ -462,8 +462,8 @@ static int customdata_compare(
CD_MASK_MLOOPUV | CD_MASK_PROP_BYTE_COLOR |
CD_MASK_MDEFORMVERT;
const uint64_t cd_mask_all_attr = CD_MASK_PROP_ALL | cd_mask_non_generic;
- const Span<MLoop> loops_1 = blender::bke::mesh_loops(*m1);
- const Span<MLoop> loops_2 = blender::bke::mesh_loops(*m2);
+ const Span<MLoop> loops_1 = m1->loops();
+ const Span<MLoop> loops_2 = m2->loops();
for (int i = 0; i < c1->totlayer; i++) {
l1 = &c1->layers[i];
@@ -1248,7 +1248,7 @@ float (*BKE_mesh_orco_verts_get(Object *ob))[3]
/* Get appropriate vertex coordinates */
float(*vcos)[3] = (float(*)[3])MEM_calloc_arrayN(me->totvert, sizeof(*vcos), "orco mesh");
- const Span<MVert> verts = blender::bke::mesh_vertices(*tme);
+ const Span<MVert> verts = tme->vertices();
int totvert = min_ii(tme->totvert, me->totvert);
@@ -1423,7 +1423,7 @@ void BKE_mesh_material_remap(Mesh *me, const uint *remap, uint remap_len)
void BKE_mesh_smooth_flag_set(Mesh *me, const bool use_smooth)
{
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
if (use_smooth) {
for (MPoly &poly : polys) {
poly.flag |= ME_SMOOTH;
@@ -1487,8 +1487,8 @@ int BKE_mesh_edge_other_vert(const MEdge *e, int v)
void BKE_mesh_looptri_get_real_edges(const Mesh *mesh, const MLoopTri *looptri, int r_edges[3])
{
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MEdge> edges = mesh->edges();
+ const Span<MLoop> loops = mesh->loops();
for (int i = 2, i_next = 0; i_next < 3; i = i_next++) {
const MLoop *l1 = &loops[looptri->tri[i]], *l2 = &loops[looptri->tri[i_next]];
@@ -1511,7 +1511,7 @@ bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
float3 min;
float3 max;
};
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
const Result minmax = threading::parallel_reduce(
verts.index_range(),
@@ -1536,7 +1536,7 @@ bool BKE_mesh_minmax(const Mesh *me, float r_min[3], float r_max[3])
void BKE_mesh_transform(Mesh *me, const float mat[4][4], bool do_keys)
{
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
for (MVert &vert : verts) {
mul_m4_v3(mat, vert.co);
@@ -1571,7 +1571,7 @@ void BKE_mesh_transform(Mesh *me, const float mat[4][4], bool do_keys)
void BKE_mesh_translate(Mesh *me, const float offset[3], const bool do_keys)
{
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
for (MVert &vert : verts) {
add_v3_v3(vert.co, offset);
}
@@ -1599,8 +1599,8 @@ void BKE_mesh_do_versions_cd_flag_init(Mesh *mesh)
return;
}
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MEdge> edges = mesh->edges();
for (const MVert &vert : verts) {
if (vert.bweight != 0) {
@@ -1642,9 +1642,9 @@ void BKE_mesh_mselect_validate(Mesh *me)
if (me->totselect == 0) {
return;
}
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MEdge> edges = blender::bke::mesh_edges(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MEdge> edges = me->edges();
+ const Span<MPoly> polys = me->polygons();
mselect_src = me->mselect;
mselect_dst = (MSelect *)MEM_malloc_arrayN(
@@ -1772,7 +1772,7 @@ float (*BKE_mesh_vert_coords_alloc(const Mesh *mesh, int *r_vert_len))[3]
void BKE_mesh_vert_coords_apply(Mesh *mesh, const float (*vert_coords)[3])
{
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
for (const int i : verts.index_range()) {
copy_v3_v3(verts[i].co, vert_coords[i]);
}
@@ -1783,7 +1783,7 @@ void BKE_mesh_vert_coords_apply_with_mat4(Mesh *mesh,
const float (*vert_coords)[3],
const float mat[4][4])
{
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
for (const int i : verts.index_range()) {
mul_v3_m4v3(verts[i].co, mat, vert_coords[i]);
}
@@ -1821,10 +1821,10 @@ void BKE_mesh_calc_normals_split_ex(Mesh *mesh,
/* may be nullptr */
clnors = (short(*)[2])CustomData_get_layer(&mesh->ldata, CD_CUSTOMLOOPNORMAL);
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MEdge> edges = mesh->edges();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
BKE_mesh_normals_loop_split(verts.data(),
BKE_mesh_vertex_normals_ensure(mesh),
@@ -1882,7 +1882,7 @@ static int split_faces_prepare_new_verts(Mesh *mesh,
const int loops_len = mesh->totloop;
int verts_len = mesh->totvert;
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
BKE_mesh_vertex_normals_ensure(mesh);
float(*vert_normals)[3] = BKE_mesh_vertex_normals_for_write(mesh);
@@ -1957,9 +1957,9 @@ static int split_faces_prepare_new_edges(Mesh *mesh,
{
const int num_polys = mesh->totpoly;
int num_edges = mesh->totedge;
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
+ const Span<MPoly> polys = mesh->polygons();
BLI_bitmap *edges_used = BLI_BITMAP_NEW(num_edges, __func__);
EdgeHash *edges_hash = BLI_edgehash_new_ex(__func__, num_edges);
@@ -2041,7 +2041,7 @@ static void split_faces_split_new_edges(Mesh *mesh,
const int num_new_edges)
{
const int num_edges = mesh->totedge - num_new_edges;
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
/* Remember new_edges is a single linklist, so its items are in reversed order... */
MEdge *new_med = &edges[mesh->totedge - 1];
diff --git a/source/blender/blenkernel/intern/mesh_boolean_convert.cc b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
index fe9c5023c15..d5671b53267 100644
--- a/source/blender/blenkernel/intern/mesh_boolean_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_boolean_convert.cc
@@ -162,7 +162,7 @@ const MPoly *MeshesToIMeshInfo::input_mpoly_for_orig_index(int orig_index,
int orig_mesh_index = input_mesh_for_imesh_face(orig_index);
BLI_assert(0 <= orig_mesh_index && orig_mesh_index < meshes.size());
const Mesh *me = meshes[orig_mesh_index];
- const Span<MPoly> polys = bke::mesh_polygons(*me);
+ const Span<MPoly> polys = me->polygons();
int index_in_mesh = orig_index - mesh_poly_offset[orig_mesh_index];
BLI_assert(0 <= index_in_mesh && index_in_mesh < me->totpoly);
const MPoly *mp = &polys[index_in_mesh];
@@ -189,7 +189,7 @@ const MVert *MeshesToIMeshInfo::input_mvert_for_orig_index(int orig_index,
int orig_mesh_index = input_mesh_for_imesh_vert(orig_index);
BLI_assert(0 <= orig_mesh_index && orig_mesh_index < meshes.size());
const Mesh *me = meshes[orig_mesh_index];
- const Span<MVert> verts = bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
int index_in_mesh = orig_index - mesh_vert_offset[orig_mesh_index];
BLI_assert(0 <= index_in_mesh && index_in_mesh < me->totvert);
const MVert *mv = &verts[index_in_mesh];
@@ -210,7 +210,7 @@ const MEdge *MeshesToIMeshInfo::input_medge_for_orig_index(int orig_index,
int orig_mesh_index = input_mesh_for_imesh_edge(orig_index);
BLI_assert(0 <= orig_mesh_index && orig_mesh_index < meshes.size());
const Mesh *me = meshes[orig_mesh_index];
- const Span<MEdge> edges = blender::bke::mesh_edges(*me);
+ const Span<MEdge> edges = me->edges();
int index_in_mesh = orig_index - mesh_edge_offset[orig_mesh_index];
BLI_assert(0 <= index_in_mesh && index_in_mesh < me->totedge);
const MEdge *medge = &edges[index_in_mesh];
@@ -309,9 +309,9 @@ static IMesh meshes_to_imesh(Span<const Mesh *> meshes,
bool need_face_flip = r_info->has_negative_transform[mi] != r_info->has_negative_transform[0];
Vector<Vert *> verts(me->totvert);
- const Span<MVert> mesh_verts = bke::mesh_vertices(*me);
- const Span<MPoly> polys = bke::mesh_polygons(*me);
- const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MVert> mesh_verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
/* Allocate verts
* Skip the matrix multiplication for each point when there is no transform for a mesh,
@@ -487,7 +487,7 @@ static int fill_orig_loops(const Face *f,
MutableSpan<int> r_orig_loops)
{
r_orig_loops.fill(-1);
- const Span<MLoop> orig_loops = bke::mesh_loops(*orig_me);
+ const Span<MLoop> orig_loops = orig_me->loops();
int orig_mplen = orig_mp->totloop;
if (f->size() != orig_mplen) {
@@ -563,8 +563,8 @@ static void get_poly2d_cos(const Mesh *me,
const float4x4 &trans_mat,
float r_axis_mat[3][3])
{
- const Span<MVert> verts = bke::mesh_vertices(*me);
- const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MLoop> loops = me->loops();
const Span<MLoop> poly_loops = loops.slice(mp->loopstart, mp->totloop);
/* Project coordinates to 2d in cos_2d, using normal as projection axis. */
@@ -609,8 +609,8 @@ static void copy_or_interp_loop_attributes(Mesh *dest_mesh,
get_poly2d_cos(orig_me, orig_mp, cos_2d, mim.to_target_transform[orig_me_index], axis_mat);
}
CustomData *target_cd = &dest_mesh->ldata;
- const Span<MVert> dst_vertices = bke::mesh_vertices(*dest_mesh);
- const Span<MLoop> dst_loops = bke::mesh_loops(*dest_mesh);
+ const Span<MVert> dst_vertices = dest_mesh->vertices();
+ const Span<MLoop> dst_loops = dest_mesh->loops();
for (int i = 0; i < mp->totloop; ++i) {
int loop_index = mp->loopstart + i;
int orig_loop_index = norig > 0 ? orig_loops[i] : -1;
@@ -723,7 +723,7 @@ static Mesh *imesh_to_mesh(IMesh *im, MeshesToIMeshInfo &mim)
merge_vertex_loop_poly_customdata_layers(result, mim);
/* Set the vertex coordinate values and other data. */
- MutableSpan<MVert> vertices = bke::mesh_vertices_for_write(*result);
+ MutableSpan<MVert> vertices = result->vertices_for_write();
for (int vi : im->vert_index_range()) {
const Vert *v = im->vert(vi);
MVert *mv = &vertices[vi];
@@ -742,8 +742,8 @@ static Mesh *imesh_to_mesh(IMesh *im, MeshesToIMeshInfo &mim)
bke::mesh_attributes_for_write(*result).lookup_or_add_for_write_only_span<int>(
"material_index", ATTR_DOMAIN_FACE);
int cur_loop_index = 0;
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(*result);
- MutableSpan<MPoly> dst_polys = bke::mesh_polygons_for_write(*result);
+ MutableSpan<MLoop> dst_loops = result->loops_for_write();
+ MutableSpan<MPoly> dst_polys = result->polygons_for_write();
MLoop *l = dst_loops.data();
for (int fi : im->face_index_range()) {
const Face *f = im->face(fi);
@@ -784,7 +784,7 @@ static Mesh *imesh_to_mesh(IMesh *im, MeshesToIMeshInfo &mim)
/* Now that the MEdges are populated, we can copy over the required attributes and custom layers.
*/
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*result);
+ MutableSpan<MEdge> edges = result->edges_for_write();
for (int fi : im->face_index_range()) {
const Face *f = im->face(fi);
const MPoly *mp = &dst_polys[fi];
@@ -857,8 +857,8 @@ Mesh *direct_mesh_boolean(Span<const Mesh *> meshes,
/* Store intersecting edge indices. */
if (r_intersecting_edges != nullptr) {
- const Span<MPoly> polys = bke::mesh_polygons(*result);
- const Span<MLoop> loops = bke::mesh_loops(*result);
+ const Span<MPoly> polys = result->polygons();
+ const Span<MLoop> loops = result->loops();
for (int fi : m_out.face_index_range()) {
const Face &face = *m_out.face(fi);
const MPoly &poly = polys[fi];
diff --git a/source/blender/blenkernel/intern/mesh_calc_edges.cc b/source/blender/blenkernel/intern/mesh_calc_edges.cc
index 405047c5692..8a8960fb8a7 100644
--- a/source/blender/blenkernel/intern/mesh_calc_edges.cc
+++ b/source/blender/blenkernel/intern/mesh_calc_edges.cc
@@ -80,7 +80,7 @@ static void add_existing_edges_to_hash_maps(Mesh *mesh,
uint32_t parallel_mask)
{
/* Assume existing edges are valid. */
- const Span<MEdge> edges = bke::mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
threading::parallel_for_each(edge_maps, [&](EdgeMap &edge_map) {
const int task_index = &edge_map - edge_maps.data();
for (const MEdge &edge : edges) {
@@ -97,8 +97,8 @@ static void add_polygon_edges_to_hash_maps(Mesh *mesh,
MutableSpan<EdgeMap> edge_maps,
uint32_t parallel_mask)
{
- const Span<MPoly> polys = mesh_polygons(*mesh);
- const Span<MLoop> loops = mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
threading::parallel_for_each(edge_maps, [&](EdgeMap &edge_map) {
const int task_index = &edge_map - edge_maps.data();
for (const MPoly &poly : polys) {
@@ -159,8 +159,8 @@ static void update_edge_indices_in_poly_loops(Mesh *mesh,
Span<EdgeMap> edge_maps,
uint32_t parallel_mask)
{
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- MutableSpan<MLoop> loops = mesh_loops_for_write(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
threading::parallel_for(IndexRange(mesh->totpoly), 100, [&](IndexRange range) {
for (const int poly_index : range) {
const MPoly &poly = polys[poly_index];
diff --git a/source/blender/blenkernel/intern/mesh_convert.cc b/source/blender/blenkernel/intern/mesh_convert.cc
index 794077d7b00..5a44c46e999 100644
--- a/source/blender/blenkernel/intern/mesh_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_convert.cc
@@ -81,9 +81,9 @@ static void make_edges_mdata_extend(Mesh &mesh)
const MPoly *mp;
int i;
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(mesh);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(mesh);
+ MutableSpan<MEdge> edges = mesh.edges_for_write();
+ const Span<MPoly> polys = mesh.polygons();
+ MutableSpan<MLoop> loops = mesh.loops_for_write();
const int eh_reserve = max_ii(totedge, BLI_EDGEHASH_SIZE_GUESS_FROM_POLYS(mesh.totpoly));
EdgeHash *eh = BLI_edgehash_new_ex(__func__, eh_reserve);
@@ -185,10 +185,10 @@ static Mesh *mesh_nurbs_displist_to_mesh(const Curve *cu, const ListBase *dispba
}
Mesh *mesh = BKE_mesh_new_nomain(totvert, totedge, 0, totloop, totpoly);
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
MVert *mvert = verts.data();
MEdge *medge = edges.data();
@@ -457,10 +457,10 @@ static void appendPolyLineVert(ListBase *lb, uint index)
void BKE_mesh_to_curve_nurblist(const Mesh *me, ListBase *nurblist, const int edge_users_test)
{
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MEdge> mesh_edges = blender::bke::mesh_edges(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MEdge> mesh_edges = me->edges();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
const MEdge *med;
const MPoly *mp;
@@ -691,7 +691,7 @@ void BKE_mesh_from_pointcloud(const PointCloud *pointcloud, Mesh *me)
CustomDataLayer *pos_layer = &me->vdata.layers[layer_idx];
float(*positions)[3] = (float(*)[3])pos_layer->data;
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
for (int i = 0; i < me->totvert; i++) {
copy_v3_v3(verts[i].co, positions[i]);
}
@@ -702,7 +702,7 @@ void BKE_mesh_from_pointcloud(const PointCloud *pointcloud, Mesh *me)
void BKE_mesh_edges_set_draw_render(Mesh *mesh)
{
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
for (int i = 0; i < mesh->totedge; i++) {
edges[i].flag |= ME_EDGEDRAW | ME_EDGERENDER;
}
@@ -1170,7 +1170,7 @@ Mesh *BKE_mesh_create_derived_for_modifier(struct Depsgraph *depsgraph,
if (build_shapekey_layers && me->key &&
(kb = (KeyBlock *)BLI_findlink(&me->key->block, ob_eval->shapenr - 1))) {
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
BKE_keyblock_convert_to_mesh(kb, verts.data(), me->totvert);
}
@@ -1274,7 +1274,7 @@ static void shapekey_layers_to_keyblocks(Mesh *mesh_src, Mesh *mesh_dst, int act
kb->data = kbcos = (float(*)[3])MEM_malloc_arrayN(kb->totelem, sizeof(float[3]), __func__);
if (kb->uid == actshape_uid) {
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh_src);
+ const Span<MVert> verts = mesh_src->vertices();
for (j = 0; j < mesh_src->totvert; j++, kbcos++) {
copy_v3_v3(*kbcos, verts[j].co);
}
@@ -1385,30 +1385,30 @@ void BKE_mesh_nomain_to_mesh(Mesh *mesh_src,
CustomData_add_layer(&tmp.vdata,
CD_MVERT,
CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? mesh_vertices_for_write(*mesh_src).data() :
- MEM_dupallocN(mesh_vertices(*mesh_src).data()),
+ (alloctype == CD_ASSIGN) ? mesh_src->vertices_for_write().data() :
+ MEM_dupallocN(mesh_src->vertices().data()),
totvert);
}
if (!CustomData_has_layer(&tmp.edata, CD_MEDGE)) {
CustomData_add_layer(&tmp.edata,
CD_MEDGE,
CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? mesh_edges_for_write(*mesh_src).data() :
- MEM_dupallocN(mesh_edges(*mesh_src).data()),
+ (alloctype == CD_ASSIGN) ? mesh_src->edges_for_write().data() :
+ MEM_dupallocN(mesh_src->edges().data()),
totedge);
}
if (!CustomData_has_layer(&tmp.pdata, CD_MPOLY)) {
CustomData_add_layer(&tmp.ldata,
CD_MLOOP,
CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? mesh_loops_for_write(*mesh_src).data() :
- MEM_dupallocN(mesh_loops(*mesh_src).data()),
+ (alloctype == CD_ASSIGN) ? mesh_src->loops_for_write().data() :
+ MEM_dupallocN(mesh_src->loops().data()),
tmp.totloop);
CustomData_add_layer(&tmp.pdata,
CD_MPOLY,
CD_ASSIGN,
- (alloctype == CD_ASSIGN) ? mesh_polygons_for_write(*mesh_src).data() :
- MEM_dupallocN(mesh_polygons(*mesh_src).data()),
+ (alloctype == CD_ASSIGN) ? mesh_src->polygons_for_write().data() :
+ MEM_dupallocN(mesh_src->polygons().data()),
tmp.totpoly);
}
@@ -1490,7 +1490,7 @@ void BKE_mesh_nomain_to_meshkey(Mesh *mesh_src, Mesh *mesh_dst, KeyBlock *kb)
kb->totelem = totvert;
fp = (float *)kb->data;
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh_src);
+ const Span<MVert> verts = mesh_src->vertices();
for (a = 0; a < kb->totelem; a++, fp += 3) {
copy_v3_v3(fp, verts[a].co);
}
diff --git a/source/blender/blenkernel/intern/mesh_evaluate.cc b/source/blender/blenkernel/intern/mesh_evaluate.cc
index 176f315ff7d..746f8362ddf 100644
--- a/source/blender/blenkernel/intern/mesh_evaluate.cc
+++ b/source/blender/blenkernel/intern/mesh_evaluate.cc
@@ -205,9 +205,9 @@ float BKE_mesh_calc_poly_area(const MPoly *mpoly, const MLoop *loopstart, const
float BKE_mesh_calc_area(const Mesh *me)
{
- const Span<MVert> vertts = blender::bke::mesh_vertices(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> vertts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
float total_area = 0.0f;
for (const MPoly &poly : polys) {
@@ -400,7 +400,7 @@ void BKE_mesh_poly_edgebitmap_insert(uint *edge_bitmap, const MPoly *mp, const M
bool BKE_mesh_center_median(const Mesh *me, float r_cent[3])
{
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
zero_v3(r_cent);
for (const MVert &vert : verts) {
add_v3_v3(r_cent, vert.co);
@@ -415,9 +415,9 @@ bool BKE_mesh_center_median(const Mesh *me, float r_cent[3])
bool BKE_mesh_center_median_from_polys(const Mesh *me, float r_cent[3])
{
int tot = 0;
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
zero_v3(r_cent);
for (const MPoly &poly : polys) {
int loopend = poly.loopstart + poly.totloop;
@@ -746,9 +746,9 @@ void BKE_mesh_flush_hidden_from_verts(Mesh *me)
return;
}
const VArraySpan<bool> hide_vert_span{hide_vert};
- const Span<MEdge> edges = mesh_edges(*me);
- const Span<MPoly> polys = mesh_polygons(*me);
- const Span<MLoop> loops = mesh_loops(*me);
+ const Span<MEdge> edges = me->edges();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
/* Hide edges when either of their vertices are hidden. */
SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
@@ -786,8 +786,8 @@ void BKE_mesh_flush_hidden_from_polys(Mesh *me)
return;
}
const VArraySpan<bool> hide_poly_span{hide_poly};
- const Span<MPoly> polys = mesh_polygons(*me);
- const Span<MLoop> loops = mesh_loops(*me);
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
SpanAttributeWriter<bool> hide_vert = attributes.lookup_or_add_for_write_only_span<bool>(
".hide_vert", ATTR_DOMAIN_POINT);
SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
@@ -857,12 +857,12 @@ void BKE_mesh_flush_select_from_polys_ex(MVert *mvert,
}
void BKE_mesh_flush_select_from_polys(Mesh *me)
{
- BKE_mesh_flush_select_from_polys_ex(blender::bke::mesh_vertices_for_write(*me).data(),
+ BKE_mesh_flush_select_from_polys_ex(me->vertices_for_write().data(),
me->totvert,
- blender::bke::mesh_loops(*me).data(),
- blender::bke::mesh_edges_for_write(*me).data(),
+ me->loops().data(),
+ me->edges_for_write().data(),
me->totedge,
- blender::bke::mesh_polygons(*me).data(),
+ me->polygons().data(),
me->totpoly);
}
@@ -909,12 +909,12 @@ void BKE_mesh_flush_select_from_verts(Mesh *me)
{
const blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*me);
mesh_flush_select_from_verts(
- blender::bke::mesh_vertices(*me),
- blender::bke::mesh_loops(*me),
+ me->vertices(),
+ me->loops(),
attributes.lookup_or_default<bool>(".hide_edge", ATTR_DOMAIN_EDGE, false),
attributes.lookup_or_default<bool>(".hide_poly", ATTR_DOMAIN_FACE, false),
- blender::bke::mesh_edges_for_write(*me),
- blender::bke::mesh_polygons_for_write(*me));
+ me->edges_for_write(),
+ me->polygons_for_write());
}
/** \} */
diff --git a/source/blender/blenkernel/intern/mesh_fair.cc b/source/blender/blenkernel/intern/mesh_fair.cc
index e5a826af576..0fe58366449 100644
--- a/source/blender/blenkernel/intern/mesh_fair.cc
+++ b/source/blender/blenkernel/intern/mesh_fair.cc
@@ -195,10 +195,10 @@ class MeshFairingContext : public FairingContext {
totvert_ = mesh->totvert;
totloop_ = mesh->totloop;
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
- medge_ = blender::bke::mesh_edges(*mesh);
- mpoly_ = blender::bke::mesh_polygons(*mesh);
- mloop_ = blender::bke::mesh_loops(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ medge_ = mesh->edges();
+ mpoly_ = mesh->polygons();
+ mloop_ = mesh->loops();
BKE_mesh_vert_loop_map_create(&vlmap_,
&vlmap_mem_,
mpoly_.data(),
diff --git a/source/blender/blenkernel/intern/mesh_legacy_convert.cc b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
index d06c7acfefa..635ab73b869 100644
--- a/source/blender/blenkernel/intern/mesh_legacy_convert.cc
+++ b/source/blender/blenkernel/intern/mesh_legacy_convert.cc
@@ -322,7 +322,7 @@ void BKE_mesh_convert_mfaces_to_mpolys(Mesh *mesh)
mesh->totface,
mesh->totloop,
mesh->totpoly,
- blender::bke::mesh_edges_for_write(*mesh).data(),
+ mesh->edges_for_write().data(),
(MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE),
&mesh->totloop,
&mesh->totpoly);
@@ -379,7 +379,7 @@ void BKE_mesh_do_versions_convert_mfaces_to_mpolys(Mesh *mesh)
mesh->totface,
mesh->totloop,
mesh->totpoly,
- blender::bke::mesh_edges_for_write(*mesh).data(),
+ mesh->edges_for_write().data(),
(MFace *)CustomData_get_layer(&mesh->fdata, CD_MFACE),
&mesh->totloop,
&mesh->totpoly);
@@ -919,7 +919,7 @@ void BKE_mesh_legacy_convert_hide_layers_to_flags(Mesh *mesh)
using namespace blender::bke;
const AttributeAccessor attributes = mesh_attributes(*mesh);
- MutableSpan<MVert> verts = mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
".hide_vert", ATTR_DOMAIN_POINT, false);
threading::parallel_for(verts.index_range(), 4096, [&](IndexRange range) {
@@ -928,7 +928,7 @@ void BKE_mesh_legacy_convert_hide_layers_to_flags(Mesh *mesh)
}
});
- MutableSpan<MEdge> edges = mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
const VArray<bool> hide_edge = attributes.lookup_or_default<bool>(
".hide_edge", ATTR_DOMAIN_EDGE, false);
threading::parallel_for(edges.index_range(), 4096, [&](IndexRange range) {
@@ -937,7 +937,7 @@ void BKE_mesh_legacy_convert_hide_layers_to_flags(Mesh *mesh)
}
});
- MutableSpan<MPoly> polys = mesh_polygons_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
const VArray<bool> hide_poly = attributes.lookup_or_default<bool>(
".hide_poly", ATTR_DOMAIN_FACE, false);
threading::parallel_for(polys.index_range(), 4096, [&](IndexRange range) {
@@ -953,7 +953,7 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
using namespace blender::bke;
MutableAttributeAccessor attributes = mesh_attributes_for_write(*mesh);
- const Span<MVert> verts = mesh_vertices(*mesh);
+ const Span<MVert> verts = mesh->vertices();
if (std::any_of(
verts.begin(), verts.end(), [](const MVert &vert) { return vert.flag & ME_HIDE; })) {
SpanAttributeWriter<bool> hide_vert = attributes.lookup_or_add_for_write_only_span<bool>(
@@ -966,7 +966,7 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
hide_vert.finish();
}
- const Span<MEdge> edges = mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
if (std::any_of(
edges.begin(), edges.end(), [](const MEdge &edge) { return edge.flag & ME_HIDE; })) {
SpanAttributeWriter<bool> hide_edge = attributes.lookup_or_add_for_write_only_span<bool>(
@@ -979,7 +979,7 @@ void BKE_mesh_legacy_convert_flags_to_hide_layers(Mesh *mesh)
hide_edge.finish();
}
- const Span<MPoly> polys = mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
if (std::any_of(
polys.begin(), polys.end(), [](const MPoly &poly) { return poly.flag & ME_HIDE; })) {
SpanAttributeWriter<bool> hide_poly = attributes.lookup_or_add_for_write_only_span<bool>(
@@ -1003,7 +1003,7 @@ void BKE_mesh_legacy_convert_material_indices_to_mpoly(Mesh *mesh)
using namespace blender;
using namespace blender::bke;
const AttributeAccessor attributes = mesh_attributes(*mesh);
- MutableSpan<MPoly> polys = mesh_polygons_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
const VArray<int> material_indices = attributes.lookup_or_default<int>(
"material_index", ATTR_DOMAIN_FACE, 0);
threading::parallel_for(polys.index_range(), 4096, [&](IndexRange range) {
@@ -1018,7 +1018,7 @@ void BKE_mesh_legacy_convert_mpoly_to_material_indices(Mesh *mesh)
using namespace blender;
using namespace blender::bke;
MutableAttributeAccessor attributes = mesh_attributes_for_write(*mesh);
- const Span<MPoly> polys = mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
if (std::any_of(
polys.begin(), polys.end(), [](const MPoly &poly) { return poly.mat_nr != 0; })) {
SpanAttributeWriter<int> material_indices = attributes.lookup_or_add_for_write_only_span<int>(
diff --git a/source/blender/blenkernel/intern/mesh_normals.cc b/source/blender/blenkernel/intern/mesh_normals.cc
index 240d8e8124e..7217cbf5880 100644
--- a/source/blender/blenkernel/intern/mesh_normals.cc
+++ b/source/blender/blenkernel/intern/mesh_normals.cc
@@ -369,9 +369,9 @@ const float (*BKE_mesh_vertex_normals_ensure(const Mesh *mesh))[3]
/* Isolate task because a mutex is locked and computing normals is multi-threaded. */
blender::threading::isolate_task([&]() {
Mesh &mesh_mutable = *const_cast<Mesh *>(mesh);
- const Span<MVert> verts = blender::bke::mesh_vertices(mesh_mutable);
- const Span<MPoly> polys = blender::bke::mesh_polygons(mesh_mutable);
- const Span<MLoop> loops = blender::bke::mesh_loops(mesh_mutable);
+ const Span<MVert> verts = mesh_mutable.vertices();
+ const Span<MPoly> polys = mesh_mutable.polygons();
+ const Span<MLoop> loops = mesh_mutable.loops();
vert_normals = BKE_mesh_vertex_normals_for_write(&mesh_mutable);
poly_normals = BKE_mesh_poly_normals_for_write(&mesh_mutable);
@@ -417,9 +417,9 @@ const float (*BKE_mesh_poly_normals_ensure(const Mesh *mesh))[3]
/* Isolate task because a mutex is locked and computing normals is multi-threaded. */
blender::threading::isolate_task([&]() {
Mesh &mesh_mutable = *const_cast<Mesh *>(mesh);
- const Span<MVert> verts = blender::bke::mesh_vertices(mesh_mutable);
- const Span<MPoly> polys = blender::bke::mesh_polygons(mesh_mutable);
- const Span<MLoop> loops = blender::bke::mesh_loops(mesh_mutable);
+ const Span<MVert> verts = mesh_mutable.vertices();
+ const Span<MPoly> polys = mesh_mutable.polygons();
+ const Span<MLoop> loops = mesh_mutable.loops();
poly_normals = BKE_mesh_poly_normals_for_write(&mesh_mutable);
@@ -2063,10 +2063,10 @@ static void mesh_set_custom_normals(Mesh *mesh, float (*r_custom_nors)[3], const
clnors = (short(*)[2])CustomData_add_layer(
&mesh->ldata, CD_CUSTOMLOOPNORMAL, CD_SET_DEFAULT, nullptr, numloops);
}
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
mesh_normals_loop_custom_set(verts.data(),
BKE_mesh_vertex_normals_ensure(mesh),
diff --git a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
index b4c9560448b..1b583b6a851 100644
--- a/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
+++ b/source/blender/blenkernel/intern/mesh_remesh_voxel.cc
@@ -61,8 +61,8 @@ static Mesh *remesh_quadriflow(const Mesh *input_mesh,
void (*update_cb)(void *, float progress, int *cancel),
void *update_cb_data)
{
- const Span<MVert> input_verts = blender::bke::mesh_vertices(*input_mesh);
- const Span<MLoop> input_loops = blender::bke::mesh_loops(*input_mesh);
+ const Span<MVert> input_verts = input_mesh->vertices();
+ const Span<MLoop> input_loops = input_mesh->loops();
const MLoopTri *looptri = BKE_mesh_runtime_looptri_ensure(input_mesh);
/* Gather the required data for export to the internal quadriflow mesh format. */
@@ -124,9 +124,9 @@ static Mesh *remesh_quadriflow(const Mesh *input_mesh,
/* Construct the new output mesh */
Mesh *mesh = BKE_mesh_new_nomain(qrd.out_totverts, 0, 0, qrd.out_totfaces * 4, qrd.out_totfaces);
- MutableSpan<MVert> mesh_verts = blender::bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> mesh_verts = mesh->vertices_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
for (const int i : IndexRange(qrd.out_totverts)) {
copy_v3_v3(mesh_verts[i].co, &qrd.out_verts[i * 3]);
@@ -190,8 +190,8 @@ Mesh *BKE_mesh_remesh_quadriflow(const Mesh *mesh,
static openvdb::FloatGrid::Ptr remesh_voxel_level_set_create(const Mesh *mesh,
const float voxel_size)
{
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MLoop> loops = mesh->loops();
Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(mesh),
BKE_mesh_runtime_looptri_len(mesh)};
@@ -230,9 +230,9 @@ static Mesh *remesh_voxel_volume_to_mesh(const openvdb::FloatGrid::Ptr level_set
Mesh *mesh = BKE_mesh_new_nomain(
vertices.size(), 0, 0, quads.size() * 4 + tris.size() * 3, quads.size() + tris.size());
- MutableSpan<MVert> mesh_verts = blender::bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MPoly> mesh_polys = blender::bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> mesh_loops = blender::bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> mesh_verts = mesh->vertices_for_write();
+ MutableSpan<MPoly> mesh_polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> mesh_loops = mesh->loops_for_write();
for (const int i : mesh_verts.index_range()) {
copy_v3_v3(mesh_verts[i].co, float3(vertices[i].x(), vertices[i].y(), vertices[i].z()));
diff --git a/source/blender/blenkernel/intern/mesh_runtime.cc b/source/blender/blenkernel/intern/mesh_runtime.cc
index 84440bd6e3c..c04a9f2b6f9 100644
--- a/source/blender/blenkernel/intern/mesh_runtime.cc
+++ b/source/blender/blenkernel/intern/mesh_runtime.cc
@@ -150,9 +150,9 @@ void BKE_mesh_runtime_looptri_recalc(Mesh *mesh)
{
mesh_ensure_looptri_data(mesh);
BLI_assert(mesh->totpoly == 0 || mesh->runtime.looptris.array_wip != nullptr);
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
BKE_mesh_recalc_looptri(loops.data(),
polys.data(),
@@ -330,10 +330,10 @@ bool BKE_mesh_runtime_is_valid(Mesh *me_eval)
printf("MESH: %s\n", me_eval->id.name + 2);
}
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me_eval);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me_eval);
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me_eval);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me_eval);
+ MutableSpan<MVert> verts = me_eval->vertices_for_write();
+ MutableSpan<MEdge> edges = me_eval->edges_for_write();
+ MutableSpan<MPoly> polys = me_eval->polygons_for_write();
+ MutableSpan<MLoop> loops = me_eval->loops_for_write();
is_valid &= BKE_mesh_validate_all_customdata(
&me_eval->vdata,
diff --git a/source/blender/blenkernel/intern/mesh_sample.cc b/source/blender/blenkernel/intern/mesh_sample.cc
index 4c86a651ab2..f37246ced94 100644
--- a/source/blender/blenkernel/intern/mesh_sample.cc
+++ b/source/blender/blenkernel/intern/mesh_sample.cc
@@ -21,7 +21,7 @@ BLI_NOINLINE static void sample_point_attribute(const Mesh &mesh,
const IndexMask mask,
const MutableSpan<T> dst)
{
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh),
BKE_mesh_runtime_looptri_len(&mesh)};
@@ -159,8 +159,8 @@ Span<float3> MeshAttributeInterpolator::ensure_barycentric_coords()
}
bary_coords_.reinitialize(mask_.min_array_size());
- const Span<MVert> verts = mesh_vertices(*mesh_);
- const Span<MLoop> loops = mesh_loops(*mesh_);
+ const Span<MVert> verts = mesh_->vertices();
+ const Span<MLoop> loops = mesh_->loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(mesh_),
BKE_mesh_runtime_looptri_len(mesh_)};
@@ -189,8 +189,8 @@ Span<float3> MeshAttributeInterpolator::ensure_nearest_weights()
}
nearest_weights_.reinitialize(mask_.min_array_size());
- const Span<MVert> verts = mesh_vertices(*mesh_);
- const Span<MLoop> loops = mesh_loops(*mesh_);
+ const Span<MVert> verts = mesh_->vertices();
+ const Span<MLoop> loops = mesh_->loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(mesh_),
BKE_mesh_runtime_looptri_len(mesh_)};
@@ -263,8 +263,8 @@ int sample_surface_points_spherical(RandomNumberGenerator &rng,
Vector<int> &r_looptri_indices,
Vector<float3> &r_positions)
{
- const Span<MVert> verts = mesh_vertices(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MLoop> loops = mesh.loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh),
BKE_mesh_runtime_looptri_len(&mesh)};
@@ -361,8 +361,8 @@ int sample_surface_points_projected(
Vector<int> &r_looptri_indices,
Vector<float3> &r_positions)
{
- const Span<MVert> verts = mesh_vertices(mesh);
- const Span<MLoop> loops = mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MLoop> loops = mesh.loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh),
BKE_mesh_runtime_looptri_len(&mesh)};
diff --git a/source/blender/blenkernel/intern/mesh_validate.cc b/source/blender/blenkernel/intern/mesh_validate.cc
index 409fb1fdc24..972841405e3 100644
--- a/source/blender/blenkernel/intern/mesh_validate.cc
+++ b/source/blender/blenkernel/intern/mesh_validate.cc
@@ -1067,10 +1067,10 @@ bool BKE_mesh_validate(Mesh *me, const bool do_verbose, const bool cddata_check_
do_verbose,
true,
&changed);
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
+ MutableSpan<MEdge> edges = me->edges_for_write();
+ MutableSpan<MPoly> polys = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
BKE_mesh_validate_arrays(me,
verts.data(),
@@ -1120,10 +1120,10 @@ bool BKE_mesh_is_valid(Mesh *me)
do_fixes,
&changed);
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
+ MutableSpan<MEdge> edges = me->edges_for_write();
+ MutableSpan<MPoly> polys = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
is_valid &= BKE_mesh_validate_arrays(
me,
@@ -1202,8 +1202,8 @@ void BKE_mesh_strip_loose_faces(Mesh *me)
void BKE_mesh_strip_loose_polysloops(Mesh *me)
{
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
MPoly *p;
MLoop *l;
@@ -1279,7 +1279,7 @@ void BKE_mesh_strip_loose_edges(Mesh *me)
MEdge *e;
int a, b;
uint *new_idx = (uint *)MEM_mallocN(sizeof(int) * me->totedge, __func__);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
+ MutableSpan<MEdge> edges = me->edges_for_write();
for (a = b = 0, e = edges.data(); a < me->totedge; a++, e++) {
if (e->v1 != e->v2) {
@@ -1302,7 +1302,7 @@ void BKE_mesh_strip_loose_edges(Mesh *me)
/* And now, update loops' edge indices. */
/* XXX We hope no loop was pointing to a striped edge!
* Else, its e will be set to INVALID_LOOP_EDGE_MARKER :/ */
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MLoop> loops = me->loops_for_write();
for (MLoop &loop : loops) {
loop.e = new_idx[loop.e];
}
@@ -1498,9 +1498,9 @@ void BKE_mesh_calc_edges_legacy(Mesh *me, const bool use_old)
{
MEdge *medge;
int totedge = 0;
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ MutableSpan<MLoop> loops = me->loops_for_write();
mesh_calc_edges_mdata(verts.data(),
(MFace *)CustomData_get_layer(&me->fdata, CD_MFACE),
@@ -1528,8 +1528,8 @@ void BKE_mesh_calc_edges_legacy(Mesh *me, const bool use_old)
void BKE_mesh_calc_edges_loose(Mesh *mesh)
{
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ const Span<MLoop> loops = mesh->loops();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
for (const int i : edges.index_range()) {
edges[i].flag |= ME_LOOSEEDGE;
diff --git a/source/blender/blenkernel/intern/mesh_wrapper.cc b/source/blender/blenkernel/intern/mesh_wrapper.cc
index 84c3d740386..fe28fc37d45 100644
--- a/source/blender/blenkernel/intern/mesh_wrapper.cc
+++ b/source/blender/blenkernel/intern/mesh_wrapper.cc
@@ -197,7 +197,7 @@ void BKE_mesh_wrapper_vert_coords_copy(const Mesh *me,
case ME_WRAPPER_TYPE_MDATA:
case ME_WRAPPER_TYPE_SUBD: {
BLI_assert(vert_coords_len <= me->totvert);
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
for (int i = 0; i < vert_coords_len; i++) {
copy_v3_v3(vert_coords[i], verts[i].co);
}
@@ -235,7 +235,7 @@ void BKE_mesh_wrapper_vert_coords_copy_with_mat4(const Mesh *me,
case ME_WRAPPER_TYPE_MDATA:
case ME_WRAPPER_TYPE_SUBD: {
BLI_assert(vert_coords_len == me->totvert);
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
for (int i = 0; i < vert_coords_len; i++) {
mul_v3_m4v3(vert_coords[i], mat, verts[i].co);
}
diff --git a/source/blender/blenkernel/intern/object.cc b/source/blender/blenkernel/intern/object.cc
index be0f1cc1210..25f780b92a2 100644
--- a/source/blender/blenkernel/intern/object.cc
+++ b/source/blender/blenkernel/intern/object.cc
@@ -4757,7 +4757,7 @@ bool BKE_object_shapekey_remove(Main *bmain, Object *ob, KeyBlock *kb)
switch (ob->type) {
case OB_MESH: {
Mesh *mesh = (Mesh *)ob->data;
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
BKE_keyblock_convert_to_mesh(key->refkey, verts.data(), mesh->totvert);
break;
}
@@ -5254,7 +5254,7 @@ KDTree_3d *BKE_object_as_kdtree(Object *ob, int *r_tot)
const int *index;
if (me_eval && (index = (const int *)CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX))) {
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
/* Tree over-allocates in case where some verts have #ORIGINDEX_NONE. */
tot = 0;
@@ -5271,7 +5271,7 @@ KDTree_3d *BKE_object_as_kdtree(Object *ob, int *r_tot)
}
}
else {
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
tot = verts.size();
tree = BLI_kdtree_3d_new(tot);
diff --git a/source/blender/blenkernel/intern/object_dupli.cc b/source/blender/blenkernel/intern/object_dupli.cc
index 027b18c006a..d42404922e3 100644
--- a/source/blender/blenkernel/intern/object_dupli.cc
+++ b/source/blender/blenkernel/intern/object_dupli.cc
@@ -628,7 +628,7 @@ static void make_duplis_verts(const DupliContext *ctx)
VertexDupliData_Mesh vdd{};
vdd.params = vdd_params;
vdd.totvert = me_eval->totvert;
- vdd.mvert = blender::bke::mesh_vertices(*me_eval).data();
+ vdd.mvert = me_eval->vertices().data();
vdd.vert_normals = BKE_mesh_vertex_normals_ensure(me_eval);
vdd.orco = (const float(*)[3])CustomData_get_layer(&me_eval->vdata, CD_ORCO);
@@ -1178,9 +1178,9 @@ static void make_duplis_faces(const DupliContext *ctx)
FaceDupliData_Mesh fdd{};
fdd.params = fdd_params;
fdd.totface = me_eval->totpoly;
- fdd.mpoly = blender::bke::mesh_polygons(*me_eval).data();
- fdd.mloop = blender::bke::mesh_loops(*me_eval).data();
- fdd.mvert = blender::bke::mesh_vertices(*me_eval).data();
+ fdd.mpoly = me_eval->polygons().data();
+ fdd.mloop = me_eval->loops().data();
+ fdd.mvert = me_eval->vertices().data();
fdd.mloopuv = (uv_idx != -1) ? (const MLoopUV *)CustomData_get_layer_n(
&me_eval->ldata, CD_MLOOPUV, uv_idx) :
nullptr;
diff --git a/source/blender/blenkernel/intern/paint.cc b/source/blender/blenkernel/intern/paint.cc
index f9828455433..88bebc2f813 100644
--- a/source/blender/blenkernel/intern/paint.cc
+++ b/source/blender/blenkernel/intern/paint.cc
@@ -1748,10 +1748,8 @@ static void sculpt_update_object(Depsgraph *depsgraph,
/* If the fully evaluated mesh has the same topology as the deform-only version, use it.
* This matters because 'deform eval' is very restrictive and excludes even modifiers that
* simply recompute vertex weights. */
- if (blender::bke::mesh_polygons(*me_eval_deform).data() ==
- blender::bke::mesh_polygons(*me_eval).data() &&
- blender::bke::mesh_loops(*me_eval_deform).data() ==
- blender::bke::mesh_loops(*me_eval).data() &&
+ if (me_eval_deform->polygons().data() == me_eval->polygons().data() &&
+ me_eval_deform->loops().data() == me_eval->loops().data() &&
me_eval_deform->totvert == me_eval->totvert) {
me_eval_deform = me_eval;
}
@@ -1952,8 +1950,8 @@ void BKE_sculpt_update_object_for_edit(
int BKE_sculpt_mask_layers_ensure(Object *ob, MultiresModifierData *mmd)
{
Mesh *me = static_cast<Mesh *>(ob->data);
- const blender::Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const blender::Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const blender::Span<MPoly> polys = me->polygons();
+ const blender::Span<MLoop> loops = me->loops();
int ret = 0;
const float *paint_mask = static_cast<const float *>(
@@ -2244,9 +2242,9 @@ static PBVH *build_pbvh_from_regular_mesh(Object *ob, Mesh *me_eval_deform, bool
PBVH *pbvh = BKE_pbvh_new();
BKE_pbvh_respect_hide_set(pbvh, respect_hide);
- blender::MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
- const blender::Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const blender::Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ blender::MutableSpan<MVert> verts = me->vertices_for_write();
+ const blender::Span<MPoly> polys = me->polygons();
+ const blender::Span<MLoop> loops = me->loops();
MLoopTri *looptri = static_cast<MLoopTri *>(
MEM_malloc_arrayN(looptris_num, sizeof(*looptri), __func__));
diff --git a/source/blender/blenkernel/intern/pbvh_pixels.cc b/source/blender/blenkernel/intern/pbvh_pixels.cc
index 84da8f6c089..f733f3145ec 100644
--- a/source/blender/blenkernel/intern/pbvh_pixels.cc
+++ b/source/blender/blenkernel/intern/pbvh_pixels.cc
@@ -292,7 +292,7 @@ static void update_pixels(PBVH *pbvh, Mesh *mesh, Image *image, ImageUser *image
for (PBVHNode *node : nodes_to_update) {
NodeData *node_data = static_cast<NodeData *>(node->pixels.node_data);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MLoop> loops = mesh->loops();
init_triangles(pbvh, node, node_data, loops.data());
}
diff --git a/source/blender/blenkernel/intern/subdiv_mesh.cc b/source/blender/blenkernel/intern/subdiv_mesh.cc
index 27a1c6bfc25..c222fc46800 100644
--- a/source/blender/blenkernel/intern/subdiv_mesh.cc
+++ b/source/blender/blenkernel/intern/subdiv_mesh.cc
@@ -965,7 +965,7 @@ static void find_edge_neighbors(const Mesh *coarse_mesh,
const MEdge *edge,
const MEdge *neighbors[2])
{
- const blender::Span<MEdge> coarse_edges = blender::bke::mesh_edges(*coarse_mesh);
+ const blender::Span<MEdge> coarse_edges = coarse_mesh->edges();
neighbors[0] = nullptr;
neighbors[1] = nullptr;
int neighbor_counters[2] = {0, 0};
diff --git a/source/blender/blenkernel/intern/volume_to_mesh.cc b/source/blender/blenkernel/intern/volume_to_mesh.cc
index dbe255664bb..2005959d360 100644
--- a/source/blender/blenkernel/intern/volume_to_mesh.cc
+++ b/source/blender/blenkernel/intern/volume_to_mesh.cc
@@ -178,9 +178,9 @@ Mesh *volume_to_mesh(const openvdb::GridBase &grid,
0,
0,
0,
- mesh_vertices_for_write(*mesh),
- mesh_polygons_for_write(*mesh),
- mesh_loops_for_write(*mesh));
+ mesh->vertices_for_write(),
+ mesh->polygons_for_write(),
+ mesh->loops_for_write());
BKE_mesh_calc_edges(mesh, false, false);
diff --git a/source/blender/bmesh/intern/bmesh_mesh_convert.cc b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
index e7299ec69dc..e0250db8c4b 100644
--- a/source/blender/bmesh/intern/bmesh_mesh_convert.cc
+++ b/source/blender/bmesh/intern/bmesh_mesh_convert.cc
@@ -366,7 +366,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar
const int *material_indices = (const int *)CustomData_get_layer_named(
&me->pdata, CD_PROP_INT32, "material_index");
- Span<MVert> mvert = blender::bke::mesh_vertices(*me);
+ Span<MVert> mvert = me->vertices();
Array<BMVert *> vtable(me->totvert);
for (const int i : mvert.index_range()) {
BMVert *v = vtable[i] = BM_vert_create(
@@ -412,7 +412,7 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar
bm->elem_index_dirty &= ~BM_VERT; /* Added in order, clear dirty flag. */
}
- const Span<MEdge> medge = blender::bke::mesh_edges(*me);
+ const Span<MEdge> medge = me->edges();
Array<BMEdge *> etable(me->totedge);
for (const int i : medge.index_range()) {
BMEdge *e = etable[i] = BM_edge_create(
@@ -444,8 +444,8 @@ void BM_mesh_bm_from_me(BMesh *bm, const Mesh *me, const struct BMeshFromMeshPar
bm->elem_index_dirty &= ~BM_EDGE; /* Added in order, clear dirty flag. */
}
- const Span<MPoly> mpoly = blender::bke::mesh_polygons(*me);
- const Span<MLoop> mloop = blender::bke::mesh_loops(*me);
+ const Span<MPoly> mpoly = me->polygons();
+ const Span<MLoop> mloop = me->loops();
/* Only needed for selection. */
@@ -1302,10 +1302,10 @@ void BM_mesh_bm_to_me_for_eval(BMesh *bm, Mesh *me, const CustomData_MeshMasks *
BMVert *eve;
BMEdge *eed;
BMFace *efa;
- MutableSpan<MVert> mvert = blender::bke::mesh_vertices_for_write(*me);
- MutableSpan<MEdge> medge = blender::bke::mesh_edges_for_write(*me);
- MutableSpan<MPoly> mpoly = blender::bke::mesh_polygons_for_write(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MVert> mvert = me->vertices_for_write();
+ MutableSpan<MEdge> medge = me->edges_for_write();
+ MutableSpan<MPoly> mpoly = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
MLoop *mloop = loops.data();
unsigned int i, j;
diff --git a/source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc b/source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc
index 938ee80f4bd..7d557de66e4 100644
--- a/source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc
+++ b/source/blender/compositor/nodes/COM_ConvertColorSpaceNode.cc
@@ -27,7 +27,7 @@ ConvertColorSpaceNode::ConvertColorSpaceNode(bNode *editorNode) : Node(editorNod
void ConvertColorSpaceNode::convert_to_operations(NodeConverter &converter,
const CompositorContext &UNUSED(context)) const
{
- const bNode *b_node = get_bnode();
+ const bNode *b_node = get_bnode();
NodeInput *inputSocketImage = this->get_input_socket(0);
NodeOutput *outputSocketImage = this->get_output_socket(0);
@@ -50,7 +50,7 @@ void ConvertColorSpaceNode::convert_to_operations(NodeConverter &converter,
bool ConvertColorSpaceNode::performs_conversion(NodeConvertColorSpace &settings) const
{
- const bNode *b_node = get_bnode();
+ const bNode *b_node = get_bnode();
if (IMB_colormanagement_space_name_is_data(settings.from_color_space)) {
CLOG_INFO(&LOG,
diff --git a/source/blender/compositor/nodes/COM_GlareNode.cc b/source/blender/compositor/nodes/COM_GlareNode.cc
index eec05482655..d80e6f9543f 100644
--- a/source/blender/compositor/nodes/COM_GlareNode.cc
+++ b/source/blender/compositor/nodes/COM_GlareNode.cc
@@ -21,7 +21,7 @@ void GlareNode::convert_to_operations(NodeConverter &converter,
const CompositorContext & /*context*/) const
{
const bNode *node = this->get_bnode();
-const NodeGlare *glare = (const NodeGlare *)node->storage;
+ const NodeGlare *glare = (const NodeGlare *)node->storage;
GlareBaseOperation *glareoperation = nullptr;
switch (glare->type) {
diff --git a/source/blender/compositor/nodes/COM_SunBeamsNode.cc b/source/blender/compositor/nodes/COM_SunBeamsNode.cc
index ff154d9014e..c33d9d0faf5 100644
--- a/source/blender/compositor/nodes/COM_SunBeamsNode.cc
+++ b/source/blender/compositor/nodes/COM_SunBeamsNode.cc
@@ -16,7 +16,7 @@ void SunBeamsNode::convert_to_operations(NodeConverter &converter,
{
NodeInput *input_socket = this->get_input_socket(0);
NodeOutput *output_socket = this->get_output_socket(0);
- const NodeSunBeams *data = (const NodeSunBeams *)get_bnode()->storage;
+ const NodeSunBeams *data = (const NodeSunBeams *)get_bnode()->storage;
SunBeamsOperation *operation = new SunBeamsOperation();
operation->set_data(*data);
diff --git a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
index d25adc279d7..ca3e4543a23 100644
--- a/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
+++ b/source/blender/depsgraph/intern/builder/deg_builder_nodes.cc
@@ -1218,8 +1218,12 @@ void DepsgraphNodeBuilder::build_driver_id_property(ID *id, const char *rna_path
/* Custom properties of bones are placed in their components to improve granularity. */
if (RNA_struct_is_a(ptr.type, &RNA_PoseBone)) {
const bPoseChannel *pchan = static_cast<const bPoseChannel *>(ptr.data);
- ensure_operation_node(
- ptr.owner_id, NodeType::BONE, pchan->name, OperationCode::ID_PROPERTY, nullptr, prop_identifier);
+ ensure_operation_node(ptr.owner_id,
+ NodeType::BONE,
+ pchan->name,
+ OperationCode::ID_PROPERTY,
+ nullptr,
+ prop_identifier);
}
else {
ensure_operation_node(
diff --git a/source/blender/draw/intern/draw_cache_impl_subdivision.cc b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
index 9a50a6a53fb..9882ebf66f0 100644
--- a/source/blender/draw/intern/draw_cache_impl_subdivision.cc
+++ b/source/blender/draw/intern/draw_cache_impl_subdivision.cc
@@ -675,7 +675,7 @@ static void draw_subdiv_cache_extra_coarse_face_data_mesh(const MeshRenderData *
Mesh *mesh,
uint32_t *flags_data)
{
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
for (const int i : polys.index_range()) {
uint32_t flag = 0;
if ((polys[i].flag & ME_SMOOTH) != 0) {
@@ -1095,7 +1095,7 @@ static bool draw_subdiv_build_cache(DRWSubdivCache *cache,
}
/* Only build polygon related data if we have polygons. */
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh_eval);
+ const Span<MPoly> polys = mesh_eval->polygons();
if (cache->num_subdiv_loops != 0) {
/* Build buffers for the PatchMap. */
draw_patch_map_build(&cache->gpu_patch_map, subdiv);
@@ -2156,7 +2156,7 @@ void DRW_subdivide_loose_geom(DRWSubdivCache *subdiv_cache, MeshBufferCache *cac
int subd_vert_offset = 0;
/* Subdivide each loose coarse edge. */
- const Span<MEdge> coarse_edges = blender::bke::mesh_edges(*coarse_mesh);
+ const Span<MEdge> coarse_edges = coarse_mesh->edges();
for (int i = 0; i < coarse_loose_edge_len; i++) {
const int coarse_edge_index = cache->loose_geom.edges[i];
const MEdge *coarse_edge = &coarse_edges[cache->loose_geom.edges[i]];
@@ -2187,7 +2187,7 @@ void DRW_subdivide_loose_geom(DRWSubdivCache *subdiv_cache, MeshBufferCache *cac
}
/* Copy the remaining loose_verts. */
- const Span<MVert> coarse_verts = blender::bke::mesh_vertices(*coarse_mesh);
+ const Span<MVert> coarse_verts = coarse_mesh->vertices();
for (int i = 0; i < coarse_loose_vert_len; i++) {
const int coarse_vertex_index = cache->loose_geom.verts[i];
const MVert &coarse_vertex = coarse_verts[coarse_vertex_index];
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
index 0104224340d..4e3d4235487 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_sculpt_data.cc
@@ -129,8 +129,8 @@ static void extract_sculpt_data_init_subdiv(const DRWSubdivCache *subdiv_cache,
GPUVertBuf *subdiv_mask_vbo = nullptr;
const float *cd_mask = (const float *)CustomData_get_layer(cd_vdata, CD_PAINT_MASK);
- const Span<MPoly> coarse_polys = bke::mesh_polygons(*coarse_mesh);
- const Span<MLoop> coarse_loops = bke::mesh_loops(*coarse_mesh);
+ const Span<MPoly> coarse_polys = coarse_mesh->polygons();
+ const Span<MLoop> coarse_loops = coarse_mesh->loops();
if (cd_mask) {
GPUVertFormat mask_format = {0};
diff --git a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
index 268c96814f2..509331f2f1e 100644
--- a/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
+++ b/source/blender/draw/intern/mesh_extractors/extract_mesh_vbo_weights.cc
@@ -172,7 +172,7 @@ static void extract_weights_init_subdiv(const DRWSubdivCache *subdiv_cache,
extract_weights_init(mr, cache, coarse_weights, _data);
if (mr->extract_type != MR_EXTRACT_BMESH) {
- const Span<MPoly> coarse_polys = bke::mesh_polygons(*coarse_mesh);
+ const Span<MPoly> coarse_polys = coarse_mesh->polygons();
for (const int i : coarse_polys.index_range()) {
const MPoly *mpoly = &coarse_polys[i];
extract_weights_iter_poly_mesh(mr, mpoly, i, _data);
diff --git a/source/blender/editors/curves/intern/curves_ops.cc b/source/blender/editors/curves/intern/curves_ops.cc
index a383d9768d2..6582ce6e6d7 100644
--- a/source/blender/editors/curves/intern/curves_ops.cc
+++ b/source/blender/editors/curves/intern/curves_ops.cc
@@ -286,7 +286,7 @@ static void try_convert_single_object(Object &curves_ob,
const bke::CurvesSurfaceTransforms transforms{curves_ob, &surface_ob};
const MFace *mfaces = (const MFace *)CustomData_get_layer(&surface_me.fdata, CD_MFACE);
- const Span<MVert> verts = bke::mesh_vertices(surface_me);
+ const Span<MVert> verts = surface_me.vertices();
for (const int new_hair_i : IndexRange(hair_num)) {
const int curve_i = new_hair_i;
@@ -542,8 +542,8 @@ static void snap_curves_to_surface_exec_object(Object &curves_ob,
CurvesGeometry &curves = CurvesGeometry::wrap(curves_id.geometry);
const Mesh &surface_mesh = *static_cast<const Mesh *>(surface_ob.data);
- const Span<MVert> verts = bke::mesh_vertices(surface_mesh);
- const Span<MLoop> loops = bke::mesh_loops(surface_mesh);
+ const Span<MVert> verts = surface_mesh.vertices();
+ const Span<MLoop> loops = surface_mesh.loops();
const Span<MLoopTri> surface_looptris = {BKE_mesh_runtime_looptri_ensure(&surface_mesh),
BKE_mesh_runtime_looptri_len(&surface_mesh)};
VArraySpan<float2> surface_uv_map;
diff --git a/source/blender/editors/mesh/editface.cc b/source/blender/editors/mesh/editface.cc
index bc3e34af661..7256d90fe13 100644
--- a/source/blender/editors/mesh/editface.cc
+++ b/source/blender/editors/mesh/editface.cc
@@ -73,11 +73,11 @@ void paintface_flush_flags(bContext *C,
Mesh *me_eval = (Mesh *)ob_eval->runtime.data_eval;
bke::MutableAttributeAccessor attributes_eval = bke::mesh_attributes_for_write(*me_eval);
bool updated = false;
- const Span<MPoly> me_polys = bke::mesh_polygons(*me);
+ const Span<MPoly> me_polys = me->polygons();
if (me_orig != nullptr && me_eval != nullptr && me_orig->totpoly == me->totpoly) {
/* Update the COW copy of the mesh. */
- MutableSpan<MPoly> orig_polys = bke::mesh_polygons_for_write(*me_orig);
+ MutableSpan<MPoly> orig_polys = me_orig->polygons_for_write();
for (int i = 0; i < me->totpoly; i++) {
orig_polys[i].flag = me_polys[i].flag;
}
@@ -92,7 +92,7 @@ void paintface_flush_flags(bContext *C,
/* Mesh polys => Final derived polys */
if ((index_array = (const int *)CustomData_get_layer(&me_eval->pdata, CD_ORIGINDEX))) {
- MutableSpan<MPoly> eval_polys = bke::mesh_polygons_for_write(*me_orig);
+ MutableSpan<MPoly> eval_polys = me_orig->polygons_for_write();
/* loop over final derived polys */
for (const int i : eval_polys.index_range()) {
if (index_array[i] != ORIGINDEX_NONE) {
@@ -141,7 +141,7 @@ void paintface_hide(bContext *C, Object *ob, const bool unselected)
return;
}
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*me);
bke::SpanAttributeWriter<bool> hide_poly = attributes.lookup_or_add_for_write_span<bool>(
".hide_poly", ATTR_DOMAIN_FACE);
@@ -174,7 +174,7 @@ void paintface_reveal(bContext *C, Object *ob, const bool select)
return;
}
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*me);
if (select) {
@@ -206,9 +206,9 @@ static void select_linked_tfaces_with_seams(Mesh *me, const uint index, const bo
BLI_bitmap *edge_tag = BLI_BITMAP_NEW(me->totedge, __func__);
BLI_bitmap *poly_tag = BLI_BITMAP_NEW(me->totpoly, __func__);
- const Span<MEdge> edges = bke::mesh_edges(*me);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*me);
- const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MEdge> edges = me->edges();
+ MutableSpan<MPoly> polys = me->polygons_for_write();
+ const Span<MLoop> loops = me->loops();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_poly = attributes.lookup_or_default<bool>(
".hide_poly", ATTR_DOMAIN_FACE, false);
@@ -305,7 +305,7 @@ bool paintface_deselect_all_visible(bContext *C, Object *ob, int action, bool fl
return false;
}
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_poly = attributes.lookup_or_default<bool>(
".hide_poly", ATTR_DOMAIN_FACE, false);
@@ -369,9 +369,9 @@ bool paintface_minmax(Object *ob, float r_min[3], float r_max[3])
copy_m3_m4(bmat, ob->obmat);
- const Span<MVert> verts = bke::mesh_vertices(*me);
- const Span<MPoly> polys = bke::mesh_polygons(*me);
- const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_poly = attributes.lookup_or_default<bool>(
".hide_poly", ATTR_DOMAIN_FACE, false);
@@ -409,7 +409,7 @@ bool paintface_mouse_select(bContext *C,
/* Get the face under the cursor */
Mesh *me = BKE_mesh_from_object(ob);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_poly = attributes.lookup_or_default<bool>(
".hide_poly", ATTR_DOMAIN_FACE, false);
@@ -494,8 +494,8 @@ void paintvert_flush_flags(Object *ob)
index_array = (const int *)CustomData_get_layer(&me_eval->vdata, CD_ORIGINDEX);
- const Span<MVert> vertices = bke::mesh_vertices_for_write(*me);
- MutableSpan<MVert> vertices_eval = bke::mesh_vertices_for_write(*me_eval);
+ const Span<MVert> vertices = me->vertices_for_write();
+ MutableSpan<MVert> vertices_eval = me_eval->vertices_for_write();
if (index_array) {
int orig_index;
@@ -529,7 +529,7 @@ bool paintvert_deselect_all_visible(Object *ob, int action, bool flush_flags)
return false;
}
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
".hide_vert", ATTR_DOMAIN_POINT, false);
@@ -606,7 +606,7 @@ void paintvert_select_ungrouped(Object *ob, bool extend, bool flush_flags)
paintvert_deselect_all_visible(ob, SEL_DESELECT, false);
}
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
bke::AttributeAccessor attributes = bke::mesh_attributes(*me);
const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
".hide_vert", ATTR_DOMAIN_POINT, false);
@@ -635,7 +635,7 @@ void paintvert_hide(bContext *C, Object *ob, const bool unselected)
return;
}
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*me);
bke::SpanAttributeWriter<bool> hide_vert = attributes.lookup_or_add_for_write_span<bool>(
".hide_vert", ATTR_DOMAIN_POINT);
@@ -668,7 +668,7 @@ void paintvert_reveal(bContext *C, Object *ob, const bool select)
return;
}
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*me);
const VArray<bool> hide_vert = attributes.lookup_or_default<bool>(
".hide_vert", ATTR_DOMAIN_POINT, false);
diff --git a/source/blender/editors/mesh/mesh_data.cc b/source/blender/editors/mesh/mesh_data.cc
index 55e8afeb056..f41a5128c5c 100644
--- a/source/blender/editors/mesh/mesh_data.cc
+++ b/source/blender/editors/mesh/mesh_data.cc
@@ -776,10 +776,10 @@ static int mesh_customdata_custom_splitnormals_add_exec(bContext *C, wmOperator
/* Tag edges as sharp according to smooth threshold if needed,
* to preserve autosmooth shading. */
if (me->flag & ME_AUTOSMOOTH) {
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ MutableSpan<MEdge> edges = me->edges_for_write();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
BKE_edges_sharp_from_angle_set(verts.data(),
verts.size(),
@@ -893,7 +893,7 @@ static void mesh_add_verts(Mesh *mesh, int len)
const int old_vertex_num = mesh->totvert;
mesh->totvert = totvert;
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
for (MVert &vert : verts.drop_front(old_vertex_num)) {
vert.flag = SELECT;
}
@@ -926,7 +926,7 @@ static void mesh_add_edges(Mesh *mesh, int len)
const int old_edges_num = mesh->totedge;
mesh->totedge = totedge;
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
for (MEdge &edge : edges.drop_front(old_edges_num)) {
edge.flag = ME_EDGEDRAW | ME_EDGERENDER | SELECT;
}
@@ -986,7 +986,7 @@ static void mesh_add_polys(Mesh *mesh, int len)
const int old_polys_num = mesh->totpoly;
mesh->totpoly = totpoly;
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
for (MPoly &poly : polys.drop_front(old_polys_num)) {
poly.flag = ME_FACE_SEL;
}
diff --git a/source/blender/editors/mesh/meshtools.cc b/source/blender/editors/mesh/meshtools.cc
index bc4597a3e75..a6abd0a2a59 100644
--- a/source/blender/editors/mesh/meshtools.cc
+++ b/source/blender/editors/mesh/meshtools.cc
@@ -905,7 +905,7 @@ static bool ed_mesh_mirror_topo_table_update(Object *ob, Mesh *me_eval)
static int mesh_get_x_mirror_vert_spatial(Object *ob, Mesh *me_eval, int index)
{
Mesh *me = static_cast<Mesh *>(ob->data);
- const Span<MVert> verts = blender::bke::mesh_vertices(me_eval ? *me_eval : *me);
+ const Span<MVert> verts = me_eval ? me_eval->vertices() : me->vertices();
float vec[3];
@@ -1142,7 +1142,7 @@ int *mesh_get_x_mirror_faces(Object *ob, BMEditMesh *em, Mesh *me_eval)
mirrorverts = static_cast<int *>(MEM_callocN(sizeof(int) * totvert, "MirrorVerts"));
mirrorfaces = static_cast<int *>(MEM_callocN(sizeof(int[2]) * totface, "MirrorFaces"));
- const Span<MVert> verts = blender::bke::mesh_vertices(me_eval ? *me_eval : *me);
+ const Span<MVert> verts = me_eval ? me_eval->vertices() : me->vertices();
MFace *mface = (MFace *)CustomData_get_layer(&(me_eval ? me_eval : me)->fdata, CD_MFACE);
ED_mesh_mirror_spatial_table_begin(ob, em, me_eval);
@@ -1274,9 +1274,9 @@ bool ED_mesh_pick_face_vert(
const float mval_f[2] = {(float)mval[0], (float)mval[1]};
float len_best = FLT_MAX;
- const Span<MVert> verts = blender::bke::mesh_vertices(*me_eval);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me_eval);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me_eval);
+ const Span<MVert> verts = me_eval->vertices();
+ const Span<MPoly> polys = me_eval->polygons();
+ const Span<MLoop> loops = me_eval->loops();
const int *index_mp_to_orig = (const int *)CustomData_get_layer(&me_eval->pdata, CD_ORIGINDEX);
@@ -1410,7 +1410,7 @@ bool ED_mesh_pick_vert(
}
/* setup data */
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
data.mvert = verts.data();
data.region = region;
data.mval_f = mval_f;
diff --git a/source/blender/editors/object/object_modifier.cc b/source/blender/editors/object/object_modifier.cc
index b1cdddb22be..adf5bfa1ad5 100644
--- a/source/blender/editors/object/object_modifier.cc
+++ b/source/blender/editors/object/object_modifier.cc
@@ -592,8 +592,8 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList *UNUSED(reports),
CustomData_add_layer(&me->edata, CD_MEDGE, CD_SET_DEFAULT, nullptr, edges_num);
CustomData_add_layer(&me->fdata, CD_MFACE, CD_SET_DEFAULT, nullptr, 0);
- blender::MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
- blender::MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
+ blender::MutableSpan<MVert> verts = me->vertices_for_write();
+ blender::MutableSpan<MEdge> edges = me->edges_for_write();
MVert *mvert = verts.data();
MEdge *medge = edges.data();
@@ -2638,15 +2638,15 @@ static void skin_armature_bone_create(Object *skin_ob,
static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain, Object *skin_ob)
{
Mesh *me = static_cast<Mesh *>(skin_ob->data);
- const Span<MVert> me_verts = blender::bke::mesh_vertices(*me);
- const Span<MEdge> me_edges = blender::bke::mesh_edges(*me);
+ const Span<MVert> me_verts = me->vertices();
+ const Span<MEdge> me_edges = me->edges();
Scene *scene_eval = DEG_get_evaluated_scene(depsgraph);
Object *ob_eval = DEG_get_evaluated_object(depsgraph, skin_ob);
const Mesh *me_eval_deform = mesh_get_eval_deform(
depsgraph, scene_eval, ob_eval, &CD_MASK_BAREMESH);
- const Span<MVert> verts_eval = blender::bke::mesh_vertices(*me_eval_deform);
+ const Span<MVert> verts_eval = me_eval_deform->vertices();
/* add vertex weights to original mesh */
CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_SET_DEFAULT, nullptr, me->totvert);
diff --git a/source/blender/editors/object/object_remesh.cc b/source/blender/editors/object/object_remesh.cc
index 5c5151f6330..56cccd984b6 100644
--- a/source/blender/editors/object/object_remesh.cc
+++ b/source/blender/editors/object/object_remesh.cc
@@ -131,7 +131,7 @@ static int voxel_remesh_exec(bContext *C, wmOperator *op)
}
/* Output mesh will be all smooth or all flat shading. */
- const Span<MPoly> polygons = blender::bke::mesh_polygons(*mesh);
+ const Span<MPoly> polygons = mesh->polygons();
const bool smooth_normals = polygons.first().flag & ME_SMOOTH;
float isovalue = 0.0f;
@@ -682,9 +682,9 @@ static bool mesh_is_manifold_consistent(Mesh *mesh)
* check that the direction of the faces are consistent and doesn't suddenly
* flip
*/
- const Span<MVert> verts = blender::bke::mesh_vertices(*mesh);
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MVert> verts = mesh->vertices();
+ const Span<MEdge> edges = mesh->edges();
+ const Span<MLoop> loops = mesh->loops();
bool is_manifold_consistent = true;
char *edge_faces = (char *)MEM_callocN(mesh->totedge * sizeof(char), "remesh_manifold_check");
diff --git a/source/blender/editors/object/object_vgroup.cc b/source/blender/editors/object/object_vgroup.cc
index d33f1d0afac..aadfa523a3e 100644
--- a/source/blender/editors/object/object_vgroup.cc
+++ b/source/blender/editors/object/object_vgroup.cc
@@ -197,7 +197,7 @@ bool ED_vgroup_parray_alloc(ID *id,
return true;
}
if (CustomData_has_layer(&me->vdata, CD_MDEFORMVERT)) {
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const blender::Span<MVert> verts = me->vertices();
MDeformVert *dvert = (MDeformVert *)CustomData_get_layer(&me->vdata, CD_MDEFORMVERT);
*dvert_tot = me->totvert;
@@ -660,7 +660,7 @@ static void vgroup_copy_active_to_sel(Object *ob, eVGroupSelect subset_type)
}
}
else {
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const blender::Span<MVert> verts = me->vertices();
MDeformVert *dv;
int v_act;
@@ -1054,7 +1054,7 @@ static void vgroup_select_verts(Object *ob, int select)
MDeformVert *dv;
int i;
- mv = blender::bke::mesh_vertices_for_write(*me).data();
+ mv = me->vertices_for_write().data();
dv = BKE_mesh_deform_verts_for_write(me);
for (i = 0; i < me->totvert; i++, mv++, dv++) {
@@ -1217,8 +1217,8 @@ static bool vgroup_normalize(Object *ob)
* count is an int passed by reference so it can be assigned the value of the length here. */
static blender::Vector<int> getSurroundingVerts(Mesh *me, int vert)
{
- const MPoly *mp = blender::bke::mesh_polygons(*me).data();
- const MLoop *loops = blender::bke::mesh_loops(*me).data();
+ const MPoly *mp = me->polygons().data();
+ const MLoop *loops = me->loops().data();
int i = me->totpoly;
blender::Vector<int> verts;
@@ -1352,7 +1352,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph,
Mesh *me_deform;
MDeformWeight *dw, *dw_eval;
MVert m;
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me_deform);
+ const blender::Span<MVert> verts = me_deform->vertices();
MDeformVert *dvert = (MDeformVert *)CustomData_get_layer(&me->vdata, CD_MDEFORMVERT) + index;
MDeformVert *dvert_eval = (MDeformVert *)CustomData_get_layer(&mesh_eval->vdata,
CD_MDEFORMVERT) +
@@ -1526,7 +1526,7 @@ static void vgroup_fix(
int i;
Mesh *me = static_cast<Mesh *>(ob->data);
- MVert *mvert = blender::bke::mesh_vertices_for_write(*me).data();
+ MVert *mvert = me->vertices_for_write().data();
if (!(me->editflag & ME_EDIT_PAINT_VERT_SEL)) {
return;
}
@@ -1541,7 +1541,7 @@ static void vgroup_fix(
Mesh *me_deform = mesh_get_eval_deform(
depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH);
- const blender::Span<MVert> verts_deform = blender::bke::mesh_vertices(*me_deform);
+ const blender::Span<MVert> verts_deform = me_deform->vertices();
k = count;
while (k--) {
p[k] = verts_deform[verts[k]];
@@ -1937,8 +1937,7 @@ static void vgroup_smooth_subset(Object *ob,
emap_mem = nullptr;
}
else {
- BKE_mesh_vert_edge_map_create(
- &emap, &emap_mem, blender::bke::mesh_edges(*me).data(), me->totvert, me->totedge);
+ BKE_mesh_vert_edge_map_create(&emap, &emap_mem, me->edges().data(), me->totvert, me->totedge);
}
weight_accum_prev = static_cast<float *>(
@@ -1977,8 +1976,8 @@ static void vgroup_smooth_subset(Object *ob,
}
}
else {
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const blender::Span<MEdge> edges = blender::bke::mesh_edges(*me);
+ const blender::Span<MVert> verts = me->vertices();
+ const blender::Span<MEdge> edges = me->edges();
for (int i = 0; i < dvert_tot; i++) {
const MVert *v = &verts[i];
if (IS_ME_VERT_WRITE(v)) {
@@ -2052,10 +2051,10 @@ static void vgroup_smooth_subset(Object *ob,
}
else {
int j;
- const blender::Span<MEdge> edges = blender::bke::mesh_edges(*me);
+ const blender::Span<MEdge> edges = me->edges();
/* checked already */
- BLI_assert(IS_ME_VERT_WRITE(&blender::bke::mesh_vertices(*me)[i]));
+ BLI_assert(IS_ME_VERT_WRITE(&me->vertices()[i]));
for (j = 0; j < emap[i].count; j++) {
const MEdge *e = &edges[emap[i].indices[j]];
@@ -2473,7 +2472,7 @@ void ED_vgroup_mirror(Object *ob,
}
BLI_bitmap *vert_tag = BLI_BITMAP_NEW(me->totvert, __func__);
- const MVert *verts = blender::bke::mesh_vertices(*me).data();
+ const MVert *verts = me->vertices().data();
MDeformVert *dverts = BKE_mesh_deform_verts_for_write(me);
for (vidx = 0, mv = verts; vidx < me->totvert; vidx++, mv++) {
@@ -2627,7 +2626,7 @@ static void vgroup_assign_verts(Object *ob, const float weight)
}
}
else {
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const blender::Span<MVert> verts = me->vertices();
MDeformVert *dvert = BKE_mesh_deform_verts_for_write(me);
MDeformVert *dv = dvert;
@@ -4356,7 +4355,7 @@ static void vgroup_copy_active_to_sel_single(Object *ob, const int def_nr)
return;
}
- const blender::Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const blender::Span<MVert> verts = me->vertices();
MDeformVert *dvert = BKE_mesh_deform_verts_for_write(me);
dv = dvert;
diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_add.cc b/source/blender/editors/sculpt_paint/curves_sculpt_add.cc
index c9208f7196d..c53d06b3937 100644
--- a/source/blender/editors/sculpt_paint/curves_sculpt_add.cc
+++ b/source/blender/editors/sculpt_paint/curves_sculpt_add.cc
@@ -138,8 +138,8 @@ struct AddOperationExecutor {
return;
}
surface_eval_ = BKE_object_get_evaluated_mesh(surface_ob_eval_);
- surface_verts_eval_ = bke::mesh_vertices(*surface_eval_);
- surface_loops_eval_ = bke::mesh_loops(*surface_eval_);
+ surface_verts_eval_ = surface_eval_->vertices();
+ surface_loops_eval_ = surface_eval_->loops();
surface_looptris_eval_ = {BKE_mesh_runtime_looptri_ensure(surface_eval_),
BKE_mesh_runtime_looptri_len(surface_eval_)};
BKE_bvhtree_from_mesh_get(&surface_bvh_eval_, surface_eval_, BVHTREE_FROM_LOOPTRI, 2);
diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
index 799ac450a15..062bacc7add 100644
--- a/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
+++ b/source/blender/editors/sculpt_paint/curves_sculpt_puff.cc
@@ -119,8 +119,8 @@ struct PuffOperationExecutor {
reinterpret_cast<const float3 *>(CustomData_get_layer(&surface_->ldata, CD_NORMAL)),
surface_->totloop};
- surface_verts_ = bke::mesh_vertices(*surface_);
- surface_loops_ = bke::mesh_loops(*surface_);
+ surface_verts_ = surface_->vertices();
+ surface_loops_ = surface_->loops();
surface_looptris_ = {BKE_mesh_runtime_looptri_ensure(surface_),
BKE_mesh_runtime_looptri_len(surface_)};
BKE_bvhtree_from_mesh_get(&surface_bvh_, surface_, BVHTREE_FROM_LOOPTRI, 2);
diff --git a/source/blender/editors/sculpt_paint/curves_sculpt_slide.cc b/source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
index 62059533855..e884d7c4fd9 100644
--- a/source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
+++ b/source/blender/editors/sculpt_paint/curves_sculpt_slide.cc
@@ -201,8 +201,8 @@ struct SlideOperationExecutor {
}
surface_looptris_eval_ = {BKE_mesh_runtime_looptri_ensure(surface_eval_),
BKE_mesh_runtime_looptri_len(surface_eval_)};
- surface_verts_eval_ = bke::mesh_vertices(*surface_eval_);
- surface_loops_eval_ = bke::mesh_loops(*surface_eval_);
+ surface_verts_eval_ = surface_eval_->vertices();
+ surface_loops_eval_ = surface_eval_->loops();
if (surface_eval_->totpoly == 0) {
report_empty_evaluated_surface(stroke_extension.reports);
return;
@@ -322,8 +322,8 @@ struct SlideOperationExecutor {
{
const float4x4 brush_transform_inv = brush_transform.inverted();
- const Span<MVert> verts_orig_su = bke::mesh_vertices(*surface_orig_);
- const Span<MLoop> loops_orig = bke::mesh_loops(*surface_orig_);
+ const Span<MVert> verts_orig_su = surface_orig_->vertices();
+ const Span<MLoop> loops_orig = surface_orig_->loops();
MutableSpan<float3> positions_orig_cu = curves_orig_->positions_for_write();
MutableSpan<float2> surface_uv_coords = curves_orig_->surface_uv_coords_for_write();
diff --git a/source/blender/editors/sculpt_paint/paint_vertex.cc b/source/blender/editors/sculpt_paint/paint_vertex.cc
index aacced02e60..9d5a7459b80 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex.cc
+++ b/source/blender/editors/sculpt_paint/paint_vertex.cc
@@ -1237,8 +1237,8 @@ static void vertex_paint_init_session_data(const ToolSettings *ts, Object *ob)
}
Mesh *me = (Mesh *)ob->data;
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = bke::mesh_loops(*me);
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
if (gmap->vert_to_loop == nullptr) {
gmap->vert_map_mem = nullptr;
@@ -4088,9 +4088,9 @@ static bool vertex_color_set(Object *ob, ColorPaint4f paintcol_in, CustomDataLay
}
else {
Color *color_layer = static_cast<Color *>(layer->data);
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> verts = me->vertices();
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
diff --git a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc
index dcdeba84b2b..7737265bb1f 100644
--- a/source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc
+++ b/source/blender/editors/sculpt_paint/paint_vertex_color_ops.cc
@@ -159,8 +159,8 @@ static IndexMask get_selected_indices(const Mesh &mesh,
Vector<int64_t> &indices)
{
using namespace blender;
- Span<MVert> verts = bke::mesh_vertices(mesh);
- Span<MPoly> polys = bke::mesh_polygons(mesh);
+ Span<MVert> verts = mesh.vertices();
+ Span<MPoly> polys = mesh.polygons();
bke::AttributeAccessor attributes = bke::mesh_attributes(mesh);
diff --git a/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc b/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
index a8fccef1c23..3c79e66f436 100644
--- a/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
+++ b/source/blender/editors/space_spreadsheet/spreadsheet_data_source_geometry.cc
@@ -168,9 +168,9 @@ std::unique_ptr<ColumnValues> GeometryDataSource::get_column_values(
else if (G.debug_value == 4001 && component_->type() == GEO_COMPONENT_TYPE_MESH) {
const MeshComponent &component = static_cast<const MeshComponent &>(*component_);
if (const Mesh *mesh = component.get_for_read()) {
- const Span<MEdge> edges = bke::mesh_edges(*mesh);
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MEdge> edges = mesh->edges();
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
if (domain_ == ATTR_DOMAIN_EDGE) {
if (STREQ(column_id.name, "Vertex 1")) {
diff --git a/source/blender/editors/transform/transform_snap_object.cc b/source/blender/editors/transform/transform_snap_object.cc
index 80160217801..e4c152bc630 100644
--- a/source/blender/editors/transform/transform_snap_object.cc
+++ b/source/blender/editors/transform/transform_snap_object.cc
@@ -244,10 +244,10 @@ static SnapData_Mesh *snap_object_data_mesh_get(SnapObjectContext *sctx,
SnapData_Mesh *sod;
bool init = false;
- const Span<MVert> verts = blender::bke::mesh_vertices(*me_eval);
- const Span<MEdge> edges = blender::bke::mesh_edges(*me_eval);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me_eval);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me_eval);
+ const Span<MVert> verts = me_eval->vertices();
+ const Span<MEdge> edges = me_eval->edges();
+ const Span<MPoly> polys = me_eval->polygons();
+ const Span<MLoop> loops = me_eval->loops();
if (std::unique_ptr<SnapData_Mesh> *sod_p = sctx->mesh_caches.lookup_ptr(ob_eval)) {
sod = sod_p->get();
diff --git a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
index dfcee30d451..1aa3f2cc54a 100644
--- a/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
+++ b/source/blender/freestyle/intern/blender_interface/BlenderFileLoader.cpp
@@ -380,8 +380,8 @@ int BlenderFileLoader::testDegenerateTriangle(float v1[3], float v2[3], float v3
static bool testEdgeMark(Mesh *me, const FreestyleEdge *fed, const MLoopTri *lt, int i)
{
- const Span<MEdge> edges = blender::bke::mesh_edges(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MEdge> edges = me->edges();
+ const Span<MLoop> loops = me->loops();
const MLoop *mloop = &loops[lt->tri[i]];
const MLoop *mloop_next = &loops[lt->tri[(i + 1) % 3]];
@@ -399,9 +399,9 @@ void BlenderFileLoader::insertShapeNode(Object *ob, Mesh *me, int id)
{
char *name = ob->id.name + 2;
- const Span<MVert> mesh_verts = blender::bke::mesh_vertices(*me);
- const Span<MPoly> mesh_polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> mesh_loops = blender::bke::mesh_loops(*me);
+ const Span<MVert> mesh_verts = me->vertices();
+ const Span<MPoly> mesh_polys = me->polygons();
+ const Span<MLoop> mesh_loops = me->loops();
// Compute loop triangles
int tottri = poly_to_tri_count(me->totpoly, me->totloop);
diff --git a/source/blender/geometry/intern/add_curves_on_mesh.cc b/source/blender/geometry/intern/add_curves_on_mesh.cc
index ae9879f5e2b..7490694bf12 100644
--- a/source/blender/geometry/intern/add_curves_on_mesh.cc
+++ b/source/blender/geometry/intern/add_curves_on_mesh.cc
@@ -245,8 +245,8 @@ AddCurvesOnMeshOutputs add_curves_on_mesh(CurvesGeometry &curves,
Vector<float2> used_uvs;
/* Find faces that the passed in uvs belong to. */
- const Span<MVert> surface_verts = bke::mesh_vertices(*inputs.surface);
- const Span<MLoop> surface_loops = bke::mesh_loops(*inputs.surface);
+ const Span<MVert> surface_verts = inputs.surface->vertices();
+ const Span<MLoop> surface_loops = inputs.surface->loops();
for (const int i : inputs.uvs.index_range()) {
const float2 &uv = inputs.uvs[i];
const ReverseUVSampler::Result result = inputs.reverse_uv_sampler->sample(uv);
diff --git a/source/blender/geometry/intern/mesh_merge_by_distance.cc b/source/blender/geometry/intern/mesh_merge_by_distance.cc
index a9089139a80..ad39f686dd4 100644
--- a/source/blender/geometry/intern/mesh_merge_by_distance.cc
+++ b/source/blender/geometry/intern/mesh_merge_by_distance.cc
@@ -1165,9 +1165,9 @@ static void weld_mesh_context_create(const Mesh &mesh,
WeldMesh *r_weld_mesh)
{
const int mvert_len = mesh.totvert;
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
Vector<WeldVert> wvert = weld_vert_ctx_alloc_and_setup(vert_dest_map, vert_kill_len);
r_weld_mesh->vert_kill_len = vert_kill_len;
@@ -1360,8 +1360,8 @@ static Mesh *create_merged_mesh(const Mesh &mesh,
MutableSpan<int> vert_dest_map,
const int removed_vertex_count)
{
- const Span<MPoly> src_polys = bke::mesh_polygons(mesh);
- const Span<MLoop> src_loops = bke::mesh_loops(mesh);
+ const Span<MPoly> src_polys = mesh.polygons();
+ const Span<MLoop> src_loops = mesh.loops();
const int totvert = mesh.totvert;
const int totedge = mesh.totedge;
@@ -1375,9 +1375,9 @@ static Mesh *create_merged_mesh(const Mesh &mesh,
Mesh *result = BKE_mesh_new_nomain_from_template(
&mesh, result_nverts, result_nedges, 0, result_nloops, result_npolys);
- MutableSpan<MEdge> dst_edges = bke::mesh_edges_for_write(*result);
- MutableSpan<MPoly> dst_polys = bke::mesh_polygons_for_write(*result);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(*result);
+ MutableSpan<MEdge> dst_edges = result->edges_for_write();
+ MutableSpan<MPoly> dst_polys = result->polygons_for_write();
+ MutableSpan<MLoop> dst_loops = result->loops_for_write();
/* Vertices. */
@@ -1570,7 +1570,7 @@ std::optional<Mesh *> mesh_merge_by_distance_all(const Mesh &mesh,
KDTree_3d *tree = BLI_kdtree_3d_new(selection.size());
- const Span<MVert> verts = bke::mesh_vertices(mesh);
+ const Span<MVert> verts = mesh.vertices();
for (const int i : selection) {
BLI_kdtree_3d_insert(tree, i, verts[i].co);
}
@@ -1597,8 +1597,8 @@ std::optional<Mesh *> mesh_merge_by_distance_connected(const Mesh &mesh,
const float merge_distance,
const bool only_loose_edges)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MEdge> edges = mesh.edges();
int vert_kill_len = 0;
diff --git a/source/blender/geometry/intern/mesh_primitive_cuboid.cc b/source/blender/geometry/intern/mesh_primitive_cuboid.cc
index 1609954ae41..1e734a82e43 100644
--- a/source/blender/geometry/intern/mesh_primitive_cuboid.cc
+++ b/source/blender/geometry/intern/mesh_primitive_cuboid.cc
@@ -405,9 +405,9 @@ Mesh *create_cuboid_mesh(const float3 &size,
Mesh *mesh = BKE_mesh_new_nomain(
config.vertex_count, 0, 0, config.loop_count, config.poly_count);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
calculate_vertices(config, verts);
diff --git a/source/blender/geometry/intern/mesh_to_curve_convert.cc b/source/blender/geometry/intern/mesh_to_curve_convert.cc
index 907f6c07a7e..1951c960d0d 100644
--- a/source/blender/geometry/intern/mesh_to_curve_convert.cc
+++ b/source/blender/geometry/intern/mesh_to_curve_convert.cc
@@ -214,7 +214,7 @@ static CurveFromEdgesOutput edges_to_curve_point_indices(Span<MVert> verts,
static Vector<std::pair<int, int>> get_selected_edges(const Mesh &mesh, const IndexMask selection)
{
Vector<std::pair<int, int>> selected_edges;
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
for (const int i : selection) {
selected_edges.append({edges[i].v1, edges[i].v2});
}
@@ -224,7 +224,7 @@ static Vector<std::pair<int, int>> get_selected_edges(const Mesh &mesh, const In
bke::CurvesGeometry mesh_to_curve_convert(const Mesh &mesh, const IndexMask selection)
{
Vector<std::pair<int, int>> selected_edges = get_selected_edges(mesh, selection);
- const Span<MVert> verts = bke::mesh_vertices(mesh);
+ const Span<MVert> verts = mesh.vertices();
CurveFromEdgesOutput output = edges_to_curve_point_indices(verts, selected_edges);
return create_curve_from_vert_indices(
diff --git a/source/blender/geometry/intern/mesh_to_volume.cc b/source/blender/geometry/intern/mesh_to_volume.cc
index 43636a4a9f0..39078b1c511 100644
--- a/source/blender/geometry/intern/mesh_to_volume.cc
+++ b/source/blender/geometry/intern/mesh_to_volume.cc
@@ -30,7 +30,7 @@ class OpenVDBMeshAdapter {
};
OpenVDBMeshAdapter::OpenVDBMeshAdapter(const Mesh &mesh, float4x4 transform)
- : vertices_(bke::mesh_vertices(mesh)), loops_(bke::mesh_loops(mesh)), transform_(transform)
+ : vertices_(mesh.vertices()), loops_(mesh.loops()), transform_(transform)
{
/* This only updates a cache and can be considered to be logically const. */
const MLoopTri *looptris = BKE_mesh_runtime_looptri_ensure(&mesh);
diff --git a/source/blender/geometry/intern/realize_instances.cc b/source/blender/geometry/intern/realize_instances.cc
index d4fde2943c4..fcf296de6f0 100644
--- a/source/blender/geometry/intern/realize_instances.cc
+++ b/source/blender/geometry/intern/realize_instances.cc
@@ -864,10 +864,10 @@ static AllMeshesInfo preprocess_meshes(const GeometrySet &geometry_set,
MeshRealizeInfo &mesh_info = info.realize_info[mesh_index];
const Mesh *mesh = info.order[mesh_index];
mesh_info.mesh = mesh;
- mesh_info.verts = bke::mesh_vertices(*mesh);
- mesh_info.edges = bke::mesh_edges(*mesh);
- mesh_info.polys = bke::mesh_polygons(*mesh);
- mesh_info.loops = bke::mesh_loops(*mesh);
+ mesh_info.verts = mesh->vertices();
+ mesh_info.edges = mesh->edges();
+ mesh_info.polys = mesh->polygons();
+ mesh_info.loops = mesh->loops();
/* Create material index mapping. */
mesh_info.material_index_map.reinitialize(std::max<int>(mesh->totcol, 1));
@@ -1046,10 +1046,10 @@ static void execute_realize_mesh_tasks(const RealizeInstancesOptions &options,
MeshComponent &dst_component = r_realized_geometry.get_component_for_write<MeshComponent>();
dst_component.replace(dst_mesh);
bke::MutableAttributeAccessor dst_attributes = bke::mesh_attributes_for_write(*dst_mesh);
- MutableSpan<MVert> dst_verts = bke::mesh_vertices_for_write(*dst_mesh);
- MutableSpan<MEdge> dst_edges = bke::mesh_edges_for_write(*dst_mesh);
- MutableSpan<MPoly> dst_polys = bke::mesh_polygons_for_write(*dst_mesh);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(*dst_mesh);
+ MutableSpan<MVert> dst_verts = dst_mesh->vertices_for_write();
+ MutableSpan<MEdge> dst_edges = dst_mesh->edges_for_write();
+ MutableSpan<MPoly> dst_polys = dst_mesh->polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh->loops_for_write();
/* Copy settings from the first input geometry set with a mesh. */
const RealizeMeshTask &first_task = tasks.first();
diff --git a/source/blender/io/alembic/exporter/abc_writer_mesh.cc b/source/blender/io/alembic/exporter/abc_writer_mesh.cc
index 4c9abfdee37..3805f1bc0b2 100644
--- a/source/blender/io/alembic/exporter/abc_writer_mesh.cc
+++ b/source/blender/io/alembic/exporter/abc_writer_mesh.cc
@@ -431,7 +431,7 @@ static void get_vertices(struct Mesh *mesh, std::vector<Imath::V3f> &points)
points.clear();
points.resize(mesh->totvert);
- const Span<MVert> vertices = bke::mesh_vertices(*mesh);
+ const Span<MVert> vertices = mesh->vertices();
for (int i = 0, e = mesh->totvert; i < e; i++) {
copy_yup_from_zup(points[i].getValue(), vertices[i].co);
}
@@ -442,8 +442,8 @@ static void get_topology(struct Mesh *mesh,
std::vector<int32_t> &loop_counts,
bool &r_has_flat_shaded_poly)
{
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
r_has_flat_shaded_poly = false;
poly_verts.clear();
@@ -477,7 +477,7 @@ static void get_edge_creases(struct Mesh *mesh,
lengths.clear();
sharpnesses.clear();
- const Span<MEdge> edges = bke::mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
for (const int i : edges.index_range()) {
const float sharpness = static_cast<float>(edges[i].crease) * factor;
@@ -536,7 +536,7 @@ static void get_loop_normals(struct Mesh *mesh,
/* NOTE: data needs to be written in the reverse order. */
int abc_index = 0;
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
for (const int i : polys.index_range()) {
const MPoly *mp = &polys[i];
diff --git a/source/blender/io/alembic/intern/abc_reader_mesh.cc b/source/blender/io/alembic/intern/abc_reader_mesh.cc
index 5553951db67..dadfa93a6fb 100644
--- a/source/blender/io/alembic/intern/abc_reader_mesh.cc
+++ b/source/blender/io/alembic/intern/abc_reader_mesh.cc
@@ -152,7 +152,7 @@ static void read_mverts(CDStreamConfig &config, const AbcMeshData &mesh_data)
void read_mverts(Mesh &mesh, const P3fArraySamplePtr positions, const N3fArraySamplePtr normals)
{
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(mesh);
+ MutableSpan<MVert> verts = mesh.vertices_for_write();
for (int i = 0; i < positions->size(); i++) {
MVert &mvert = verts[i];
Imath::V3f pos_in = (*positions)[i];
@@ -270,7 +270,7 @@ static void process_loop_normals(CDStreamConfig &config, const N3fArraySamplePtr
float(*lnors)[3] = static_cast<float(*)[3]>(
MEM_malloc_arrayN(loop_count, sizeof(float[3]), "ABC::FaceNormals"));
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
MPoly *mpoly = polys.data();
const N3fArraySample &loop_normals = *loop_normals_ptr;
int abc_index = 0;
@@ -517,9 +517,9 @@ CDStreamConfig get_config(Mesh *mesh, const bool use_vertex_interpolation)
{
CDStreamConfig config;
config.mesh = mesh;
- config.verts = bke::mesh_vertices_for_write(*mesh);
- config.loops = bke::mesh_loops_for_write(*mesh);
- config.polys = bke::mesh_polygons_for_write(*mesh);
+ config.verts = mesh->vertices_for_write();
+ config.loops = mesh->loops_for_write();
+ config.polys = mesh->polygons_for_write();
config.loopdata = &mesh->ldata;
config.add_customdata_cb = add_customdata_cb;
config.use_vertex_interpolation = use_vertex_interpolation;
@@ -759,7 +759,7 @@ Mesh *AbcMeshReader::read_mesh(Mesh *existing_mesh,
/* Here we assume that the number of materials doesn't change, i.e. that
* the material slots that were created when the object was loaded from
* Alembic are still valid now. */
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*new_mesh);
+ MutableSpan<MPoly> polys = new_mesh->polygons_for_write();
if (!polys.is_empty()) {
std::map<std::string, int> mat_map;
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*new_mesh);
@@ -916,7 +916,7 @@ static void read_edge_creases(Mesh *mesh,
return;
}
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
EdgeHash *edge_hash = BLI_edgehash_new_ex(__func__, edges.size());
for (const int i : edges.index_range()) {
diff --git a/source/blender/io/collada/GeometryExporter.cpp b/source/blender/io/collada/GeometryExporter.cpp
index 5946a4375f0..f8123432f4e 100644
--- a/source/blender/io/collada/GeometryExporter.cpp
+++ b/source/blender/io/collada/GeometryExporter.cpp
@@ -119,7 +119,7 @@ void GeometryExporter::operator()(Object *ob)
if (this->export_settings.get_include_shapekeys()) {
Key *key = BKE_key_from_object(ob);
if (key) {
- blender::MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ blender::MutableSpan<MVert> verts = me->vertices_for_write();
KeyBlock *kb = (KeyBlock *)key->block.first;
/* skip the basis */
kb = kb->next;
@@ -200,7 +200,7 @@ void GeometryExporter::export_key_mesh(Object *ob, Mesh *me, KeyBlock *kb)
void GeometryExporter::createLooseEdgeList(Object *ob, Mesh *me, std::string &geom_id)
{
- const Span<MEdge> edges = blender::bke::mesh_edges(*me);
+ const Span<MEdge> edges = me->edges();
int totedges = me->totedge;
int edges_in_linelist = 0;
std::vector<unsigned int> edge_list;
@@ -287,7 +287,7 @@ static bool collect_vertex_counts_per_poly(Mesh *me,
int material_index,
std::vector<unsigned long> &vcount_list)
{
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
+ const Span<MPoly> polys = me->polygons();
const blender::bke::AttributeAccessor attributes = blender::bke::mesh_attributes(*me);
const blender::VArray<int> material_indices = attributes.lookup_or_default<int>(
"material_index", ATTR_DOMAIN_FACE, 0);
@@ -322,8 +322,8 @@ void GeometryExporter::create_mesh_primitive_list(short material_index,
std::string &geom_id,
std::vector<BCPolygonNormalsIndices> &norind)
{
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
std::vector<unsigned long> vcount_list;
@@ -434,7 +434,7 @@ void GeometryExporter::create_mesh_primitive_list(short material_index,
void GeometryExporter::createVertsSource(std::string geom_id, Mesh *me)
{
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
COLLADASW::FloatSourceF source(mSW);
source.setId(getIdBySemantics(geom_id, COLLADASW::InputSemantic::POSITION));
@@ -500,7 +500,7 @@ void GeometryExporter::createVertexColorSource(std::string geom_id, Mesh *me)
source.prepareToAppendValues();
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
+ const Span<MPoly> polys = me->polygons();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
const MLoopCol *mlc = mloopcol + poly.loopstart;
@@ -530,7 +530,7 @@ std::string GeometryExporter::makeTexcoordSourceId(std::string &geom_id,
void GeometryExporter::createTexcoordsSource(std::string geom_id, Mesh *me)
{
int totuv = me->totloop;
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
+ const Span<MPoly> polys = me->polygons();
int num_layers = CustomData_number_of_layers(&me->ldata, CD_MLOOPUV);
@@ -615,10 +615,10 @@ void GeometryExporter::create_normals(std::vector<Normal> &normals,
std::map<Normal, unsigned int> shared_normal_indices;
int last_normal_index = -1;
- const Span<MVert> verts = blender::bke::mesh_vertices(*me);
+ const Span<MVert> verts = me->vertices();
const float(*vert_normals)[3] = BKE_mesh_vertex_normals_ensure(me);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*me);
- const Span<MLoop> loops = blender::bke::mesh_loops(*me);
+ const Span<MPoly> polys = me->polygons();
+ const Span<MLoop> loops = me->loops();
const float(*lnors)[3] = nullptr;
bool use_custom_normals = false;
diff --git a/source/blender/io/collada/MeshImporter.cpp b/source/blender/io/collada/MeshImporter.cpp
index b2852199157..8aa1685030f 100644
--- a/source/blender/io/collada/MeshImporter.cpp
+++ b/source/blender/io/collada/MeshImporter.cpp
@@ -344,7 +344,7 @@ void MeshImporter::read_vertices(COLLADAFW::Mesh *mesh, Mesh *me)
me->totvert = pos.getFloatValues()->getCount() / stride;
CustomData_add_layer(&me->vdata, CD_MVERT, CD_SET_DEFAULT, nullptr, me->totvert);
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*me);
+ MutableSpan<MVert> verts = me->vertices_for_write();
for (const int i : verts.index_range()) {
get_vector(verts[i].co, pos, i, stride);
}
@@ -553,7 +553,7 @@ void MeshImporter::mesh_add_edges(Mesh *mesh, int len)
CustomData_free(&mesh->edata, mesh->totedge);
mesh->edata = edata;
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
/* set default flags */
medge = &edges[mesh->totedge];
@@ -573,7 +573,7 @@ void MeshImporter::read_lines(COLLADAFW::Mesh *mesh, Mesh *me)
/* unsigned int total_edge_count = loose_edge_count + face_edge_count; */ /* UNUSED */
mesh_add_edges(me, loose_edge_count);
- MutableSpan<MEdge> edges = blender::bke::mesh_edges_for_write(*me);
+ MutableSpan<MEdge> edges = me->edges_for_write();
MEdge *med = edges.data() + face_edge_count;
COLLADAFW::MeshPrimitiveArray &prim_arr = mesh->getMeshPrimitives();
@@ -607,8 +607,8 @@ void MeshImporter::read_polys(COLLADAFW::Mesh *collada_mesh, Mesh *me)
UVDataWrapper uvs(collada_mesh->getUVCoords());
VCOLDataWrapper vcol(collada_mesh->getColors());
- MutableSpan<MPoly> polys = blender::bke::mesh_polygons_for_write(*me);
- MutableSpan<MLoop> loops = blender::bke::mesh_loops_for_write(*me);
+ MutableSpan<MPoly> polys = me->polygons_for_write();
+ MutableSpan<MLoop> loops = me->loops_for_write();
MPoly *mpoly = polys.data();
MLoop *mloop = loops.data();
int loop_index = 0;
diff --git a/source/blender/io/stl/importer/stl_import_mesh.cc b/source/blender/io/stl/importer/stl_import_mesh.cc
index e484dfe1944..d85185ede6e 100644
--- a/source/blender/io/stl/importer/stl_import_mesh.cc
+++ b/source/blender/io/stl/importer/stl_import_mesh.cc
@@ -77,7 +77,7 @@ Mesh *STLMeshHelper::to_mesh(Main *bmain, char *mesh_name)
mesh->totvert = verts_.size();
CustomData_add_layer(&mesh->vdata, CD_MVERT, CD_SET_DEFAULT, nullptr, mesh->totvert);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
for (int i = 0; i < mesh->totvert; i++) {
copy_v3_v3(verts[i].co, verts_[i]);
}
@@ -86,8 +86,8 @@ Mesh *STLMeshHelper::to_mesh(Main *bmain, char *mesh_name)
mesh->totloop = tris_.size() * 3;
CustomData_add_layer(&mesh->pdata, CD_MPOLY, CD_SET_DEFAULT, nullptr, mesh->totpoly);
CustomData_add_layer(&mesh->ldata, CD_MLOOP, CD_SET_DEFAULT, nullptr, mesh->totloop);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
threading::parallel_for(tris_.index_range(), 2048, [&](IndexRange tris_range) {
for (const int i : tris_range) {
polys[i].loopstart = 3 * i;
diff --git a/source/blender/io/usd/intern/usd_reader_mesh.cc b/source/blender/io/usd/intern/usd_reader_mesh.cc
index 38a364104e7..14d281acc51 100644
--- a/source/blender/io/usd/intern/usd_reader_mesh.cc
+++ b/source/blender/io/usd/intern/usd_reader_mesh.cc
@@ -309,8 +309,8 @@ bool USDMeshReader::topology_changed(const Mesh *existing_mesh, const double mot
void USDMeshReader::read_mpolys(Mesh *mesh)
{
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
int loop_index = 0;
@@ -397,7 +397,7 @@ void USDMeshReader::read_uvs(Mesh *mesh, const double motionSampleTime, const bo
}
}
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MLoop> loops = mesh->loops();
for (int i = 0; i < face_counts_.size(); i++) {
const int face_size = face_counts_[i];
@@ -513,8 +513,8 @@ void USDMeshReader::read_colors(Mesh *mesh, const double motionSampleTime)
MLoopCol *colors = static_cast<MLoopCol *>(cd_ptr);
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
for (int j = 0; j < poly.totloop; ++j) {
@@ -627,7 +627,7 @@ void USDMeshReader::process_normals_face_varying(Mesh *mesh)
float(*lnors)[3] = static_cast<float(*)[3]>(
MEM_malloc_arrayN(loop_count, sizeof(float[3]), "USD::FaceNormals"));
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
for (int j = 0; j < poly.totloop; j++) {
@@ -668,7 +668,7 @@ void USDMeshReader::process_normals_uniform(Mesh *mesh)
float(*lnors)[3] = static_cast<float(*)[3]>(
MEM_malloc_arrayN(mesh->totloop, sizeof(float[3]), "USD::FaceNormals"));
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
for (int j = 0; j < poly.totloop; j++) {
@@ -695,7 +695,7 @@ void USDMeshReader::read_mesh_sample(ImportSettings *settings,
* in code that expect this data to be there. */
if (new_mesh || (settings->read_flag & MOD_MESHSEQ_READ_VERT) != 0) {
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
for (int i = 0; i < positions_.size(); i++) {
MVert &mvert = verts[i];
mvert.co[0] = positions_[i][0];
@@ -910,7 +910,7 @@ Mesh *USDMeshReader::read_mesh(Mesh *existing_mesh,
/* Here we assume that the number of materials doesn't change, i.e. that
* the material slots that were created when the object was loaded from
* USD are still valid now. */
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*active_mesh);
+ MutableSpan<MPoly> polys = active_mesh->polygons_for_write();
if (!polys.is_empty() && import_params_.import_materials) {
std::map<pxr::SdfPath, int> mat_map;
bke::MutableAttributeAccessor attributes = bke::mesh_attributes_for_write(*active_mesh);
diff --git a/source/blender/io/usd/intern/usd_writer_mesh.cc b/source/blender/io/usd/intern/usd_writer_mesh.cc
index c599e26c21a..f6250eebd5d 100644
--- a/source/blender/io/usd/intern/usd_writer_mesh.cc
+++ b/source/blender/io/usd/intern/usd_writer_mesh.cc
@@ -246,7 +246,7 @@ static void get_vertices(const Mesh *mesh, USDMeshData &usd_mesh_data)
{
usd_mesh_data.points.reserve(mesh->totvert);
- const Span<MVert> verts = bke::mesh_vertices(*mesh);
+ const Span<MVert> verts = mesh->vertices();
for (const int i : verts.index_range()) {
usd_mesh_data.points.push_back(pxr::GfVec3f(verts[i].co));
}
@@ -269,8 +269,8 @@ static void get_loops_polys(const Mesh *mesh, USDMeshData &usd_mesh_data)
usd_mesh_data.face_vertex_counts.reserve(mesh->totpoly);
usd_mesh_data.face_indices.reserve(mesh->totloop);
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
for (const int i : polys.index_range()) {
const MPoly &poly = polys[i];
@@ -285,7 +285,7 @@ static void get_edge_creases(const Mesh *mesh, USDMeshData &usd_mesh_data)
{
const float factor = 1.0f / 255.0f;
- const Span<MEdge> edges = bke::mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
float sharpness;
for (const int i : edges.index_range()) {
const MEdge &edge = edges[i];
@@ -399,8 +399,8 @@ void USDGenericMeshWriter::write_normals(const Mesh *mesh, pxr::UsdGeomMesh usd_
{
pxr::UsdTimeCode timecode = get_export_time_code();
const float(*lnors)[3] = static_cast<float(*)[3]>(CustomData_get_layer(&mesh->ldata, CD_NORMAL));
- const Span<MPoly> polys = bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
pxr::VtVec3fArray loop_normals;
loop_normals.reserve(mesh->totloop);
diff --git a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
index daf20895c0d..4bf9cf3f85c 100644
--- a/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
+++ b/source/blender/io/wavefront_obj/exporter/obj_export_mesh.cc
@@ -188,9 +188,9 @@ void OBJMesh::ensure_mesh_edges() const
void OBJMesh::calc_smooth_groups(const bool use_bitflags)
{
- const Span<MEdge> edges = bke::mesh_edges(*export_mesh_eval_);
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
- const Span<MLoop> loops = bke::mesh_loops(*export_mesh_eval_);
+ const Span<MEdge> edges = export_mesh_eval_->edges();
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
+ const Span<MLoop> loops = export_mesh_eval_->loops();
poly_smooth_groups_ = BKE_mesh_calc_smoothgroups(edges.data(),
edges.size(),
polys.data(),
@@ -242,7 +242,7 @@ const Material *OBJMesh::get_object_material(const int16_t mat_nr) const
bool OBJMesh::is_ith_poly_smooth(const int poly_index) const
{
- const Span<MPoly> polygons = bke::mesh_polygons(*export_mesh_eval_);
+ const Span<MPoly> polygons = export_mesh_eval_->polygons();
return polygons[poly_index].flag & ME_SMOOTH;
}
@@ -268,7 +268,7 @@ const char *OBJMesh::get_object_material_name(const int16_t mat_nr) const
float3 OBJMesh::calc_vertex_coords(const int vert_index, const float scaling_factor) const
{
float3 r_coords;
- const Span<MVert> verts = bke::mesh_vertices(*export_mesh_eval_);
+ const Span<MVert> verts = export_mesh_eval_->vertices();
copy_v3_v3(r_coords, verts[vert_index].co);
mul_m4_v3(world_and_axes_transform_, r_coords);
mul_v3_fl(r_coords, scaling_factor);
@@ -277,8 +277,8 @@ float3 OBJMesh::calc_vertex_coords(const int vert_index, const float scaling_fac
Vector<int> OBJMesh::calc_poly_vertex_indices(const int poly_index) const
{
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
- const Span<MLoop> loops = bke::mesh_loops(*export_mesh_eval_);
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
+ const Span<MLoop> loops = export_mesh_eval_->loops();
const MPoly &mpoly = polys[poly_index];
const MLoop *mloop = &loops[mpoly.loopstart];
const int totloop = mpoly.totloop;
@@ -291,8 +291,8 @@ Vector<int> OBJMesh::calc_poly_vertex_indices(const int poly_index) const
void OBJMesh::store_uv_coords_and_indices()
{
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
- const Span<MLoop> loops = bke::mesh_loops(*export_mesh_eval_);
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
+ const Span<MLoop> loops = export_mesh_eval_->loops();
const int totvert = export_mesh_eval_->totvert;
const MLoopUV *mloopuv = static_cast<const MLoopUV *>(
CustomData_get_layer(&export_mesh_eval_->ldata, CD_MLOOPUV));
@@ -347,9 +347,9 @@ Span<int> OBJMesh::calc_poly_uv_indices(const int poly_index) const
float3 OBJMesh::calc_poly_normal(const int poly_index) const
{
float3 r_poly_normal;
- const Span<MVert> verts = blender::bke::mesh_vertices(*export_mesh_eval_);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*export_mesh_eval_);
- const Span<MLoop> loops = blender::bke::mesh_loops(*export_mesh_eval_);
+ const Span<MVert> verts = export_mesh_eval_->vertices();
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
+ const Span<MLoop> loops = export_mesh_eval_->loops();
const MPoly &poly = polys[poly_index];
BKE_mesh_calc_poly_normal(&poly, &loops[poly.loopstart], verts.data(), r_poly_normal);
mul_m3_v3(world_and_axes_normal_transform_, r_poly_normal);
@@ -375,7 +375,7 @@ static float3 round_float3_to_n_digits(const float3 &v, int round_digits)
void OBJMesh::store_normal_coords_and_indices()
{
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
/* We'll round normal components to 4 digits.
* This will cover up some minor differences
@@ -436,7 +436,7 @@ Vector<int> OBJMesh::calc_poly_normal_indices(const int poly_index) const
if (loop_to_normal_index_.is_empty()) {
return {};
}
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
const MPoly &mpoly = polys[poly_index];
const int totloop = mpoly.totloop;
Vector<int> r_poly_normal_indices(totloop);
@@ -460,8 +460,8 @@ int16_t OBJMesh::get_poly_deform_group_index(const int poly_index,
{
BLI_assert(poly_index < export_mesh_eval_->totpoly);
BLI_assert(group_weights.size() == BKE_object_defgroup_count(&export_object_eval_));
- const Span<MPoly> polys = bke::mesh_polygons(*export_mesh_eval_);
- const Span<MLoop> loops = bke::mesh_loops(*export_mesh_eval_);
+ const Span<MPoly> polys = export_mesh_eval_->polygons();
+ const Span<MLoop> loops = export_mesh_eval_->loops();
const MDeformVert *dvert = BKE_mesh_deform_verts(export_mesh_eval_);
if (!dvert) {
return NOT_FOUND;
@@ -500,7 +500,7 @@ const char *OBJMesh::get_poly_deform_group_name(const int16_t def_group_index) c
std::optional<std::array<int, 2>> OBJMesh::calc_loose_edge_vert_indices(const int edge_index) const
{
- const Span<MEdge> edges = bke::mesh_edges(*export_mesh_eval_);
+ const Span<MEdge> edges = export_mesh_eval_->edges();
const MEdge &edge = edges[edge_index];
if (edge.flag & ME_LOOSEEDGE) {
return std::array<int, 2>{static_cast<int>(edge.v1), static_cast<int>(edge.v2)};
diff --git a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
index bdae0dea876..f6c45a96358 100644
--- a/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
+++ b/source/blender/io/wavefront_obj/importer/obj_import_mesh.cc
@@ -157,7 +157,7 @@ void MeshFromGeometry::fixup_invalid_faces()
void MeshFromGeometry::create_vertices(Mesh *mesh)
{
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
/* Go through all the global vertex indices from min to max,
* checking which ones are actually and building a global->local
* index mapping. Write out the used vertex positions into the Mesh
@@ -184,8 +184,8 @@ void MeshFromGeometry::create_polys_loops(Mesh *mesh, bool use_vertex_groups)
dvert = BKE_mesh_deform_verts_for_write(mesh);
}
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
bke::SpanAttributeWriter<int> material_indices =
bke::mesh_attributes_for_write(*mesh).lookup_or_add_for_write_only_span<int>(
"material_index", ATTR_DOMAIN_FACE);
@@ -246,7 +246,7 @@ void MeshFromGeometry::create_vertex_groups(Object *obj)
void MeshFromGeometry::create_edges(Mesh *mesh)
{
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
const int64_t tot_edges{mesh_geometry_.edges_.size()};
const int64_t total_verts{mesh_geometry_.get_vertex_count()};
diff --git a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc
index 5cf13960bb4..669a7ba80cf 100644
--- a/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc
+++ b/source/blender/io/wavefront_obj/tests/obj_importer_tests.cc
@@ -96,7 +96,7 @@ class obj_importer_test : public BlendfileLoadingBaseTest {
EXPECT_EQ(mesh->totedge, exp.mesh_totedge_or_curve_endp);
EXPECT_EQ(mesh->totpoly, exp.mesh_totpoly_or_curve_order);
EXPECT_EQ(mesh->totloop, exp.mesh_totloop_or_curve_cyclic);
- const Span<MVert> verts = bke::mesh_vertices(*mesh);
+ const Span<MVert> verts = mesh->vertices();
EXPECT_V3_NEAR(verts.first().co, exp.vert_first, 0.0001f);
EXPECT_V3_NEAR(verts.last().co, exp.vert_last, 0.0001f);
const float3 *lnors = (const float3 *)(CustomData_get_layer(&mesh->ldata, CD_NORMAL));
diff --git a/source/blender/makesdna/DNA_mesh_types.h b/source/blender/makesdna/DNA_mesh_types.h
index 8d9402cb98e..cfa9425bc3d 100644
--- a/source/blender/makesdna/DNA_mesh_types.h
+++ b/source/blender/makesdna/DNA_mesh_types.h
@@ -10,8 +10,17 @@
#include "DNA_ID.h"
#include "DNA_customdata_types.h"
#include "DNA_defs.h"
+#include "DNA_meshdata_types.h"
#include "DNA_session_uuid_types.h"
+/** Workaround to forward-declare C++ type in C header. */
+#ifdef __cplusplus
+namespace blender {
+template<typename T> class Span;
+template<typename T> class MutableSpan;
+} // namespace blender
+#endif
+
#ifdef __cplusplus
extern "C" {
#endif
@@ -301,6 +310,20 @@ typedef struct Mesh {
void *_pad2;
Mesh_Runtime runtime;
+
+#ifdef __cplusplus
+ blender::Span<MVert> vertices() const;
+ blender::MutableSpan<MVert> vertices_for_write();
+
+ blender::Span<MEdge> edges() const;
+ blender::MutableSpan<MEdge> edges_for_write();
+
+ blender::Span<MPoly> polygons() const;
+ blender::MutableSpan<MPoly> polygons_for_write();
+
+ blender::Span<MLoop> loops() const;
+ blender::MutableSpan<MLoop> loops_for_write();
+#endif
} Mesh;
/* deprecated by MTFace, only here for file reading */
diff --git a/source/blender/modifiers/intern/MOD_boolean.cc b/source/blender/modifiers/intern/MOD_boolean.cc
index dc1ad7841b4..39667a3f1d5 100644
--- a/source/blender/modifiers/intern/MOD_boolean.cc
+++ b/source/blender/modifiers/intern/MOD_boolean.cc
@@ -144,7 +144,7 @@ static Mesh *get_quick_mesh(
invert_m4_m4(imat, ob_self->obmat);
mul_m4_m4m4(omat, imat, ob_operand_ob->obmat);
- MutableSpan<MVert> verts = blender::bke::mesh_vertices_for_write(*result);
+ MutableSpan<MVert> verts = result->vertices_for_write();
for (const int i : verts.index_range()) {
mul_m4_v3(omat, verts[i].co);
}
diff --git a/source/blender/modifiers/intern/MOD_mask.cc b/source/blender/modifiers/intern/MOD_mask.cc
index 2676ad7e863..e5ffea9702b 100644
--- a/source/blender/modifiers/intern/MOD_mask.cc
+++ b/source/blender/modifiers/intern/MOD_mask.cc
@@ -169,7 +169,7 @@ static void computed_masked_edges(const Mesh *mesh,
uint *r_edges_masked_num)
{
BLI_assert(mesh->totedge == r_edge_map.size());
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
uint edges_masked_num = 0;
for (int i : IndexRange(mesh->totedge)) {
@@ -195,7 +195,7 @@ static void computed_masked_edges_smooth(const Mesh *mesh,
uint *r_verts_add_num)
{
BLI_assert(mesh->totedge == r_edge_map.size());
- const Span<MEdge> edges = blender::bke::mesh_edges(*mesh);
+ const Span<MEdge> edges = mesh->edges();
uint edges_masked_num = 0;
uint verts_add_num = 0;
@@ -231,8 +231,8 @@ static void computed_masked_polygons(const Mesh *mesh,
uint *r_loops_masked_num)
{
BLI_assert(mesh->totvert == vertex_mask.size());
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
r_masked_poly_indices.reserve(mesh->totpoly);
r_loop_starts.reserve(mesh->totpoly);
@@ -277,8 +277,8 @@ static void compute_interpolated_polygons(const Mesh *mesh,
/* NOTE: this reserve can only lift the capacity if there are ngons, which get split. */
r_masked_poly_indices.reserve(r_masked_poly_indices.size() + verts_add_num);
r_loop_starts.reserve(r_loop_starts.size() + verts_add_num);
- const Span<MPoly> polys = blender::bke::mesh_polygons(*mesh);
- const Span<MLoop> loops = blender::bke::mesh_loops(*mesh);
+ const Span<MPoly> polys = mesh->polygons();
+ const Span<MLoop> loops = mesh->loops();
uint edges_add_num = 0;
uint polys_add_num = 0;
@@ -338,8 +338,8 @@ static void copy_masked_vertices_to_new_mesh(const Mesh &src_mesh,
Span<int> vertex_map)
{
BLI_assert(src_mesh.totvert == vertex_map.size());
- const Span<MVert> src_verts = blender::bke::mesh_vertices(src_mesh);
- MutableSpan<MVert> dst_verts = blender::bke::mesh_vertices_for_write(dst_mesh);
+ const Span<MVert> src_verts = src_mesh.vertices();
+ MutableSpan<MVert> dst_verts = dst_mesh.vertices_for_write();
for (const int i_src : vertex_map.index_range()) {
const int i_dst = vertex_map[i_src];
@@ -378,10 +378,10 @@ static void add_interp_verts_copy_edges_to_new_mesh(const Mesh &src_mesh,
{
BLI_assert(src_mesh.totvert == vertex_mask.size());
BLI_assert(src_mesh.totedge == r_edge_map.size());
- const Span<MVert> src_verts = blender::bke::mesh_vertices(src_mesh);
- const Span<MEdge> src_edges = blender::bke::mesh_edges(src_mesh);
- MutableSpan<MVert> dst_verts = blender::bke::mesh_vertices_for_write(dst_mesh);
- MutableSpan<MEdge> dst_edges = blender::bke::mesh_edges_for_write(dst_mesh);
+ const Span<MVert> src_verts = src_mesh.vertices();
+ const Span<MEdge> src_edges = src_mesh.edges();
+ MutableSpan<MVert> dst_verts = dst_mesh.vertices_for_write();
+ MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
uint vert_index = dst_mesh.totvert - verts_add_num;
uint edge_index = edges_masked_num - verts_add_num;
@@ -437,8 +437,8 @@ static void copy_masked_edges_to_new_mesh(const Mesh &src_mesh,
Span<int> vertex_map,
Span<int> edge_map)
{
- const Span<MEdge> src_edges = blender::bke::mesh_edges(src_mesh);
- MutableSpan<MEdge> dst_edges = blender::bke::mesh_edges_for_write(dst_mesh);
+ const Span<MEdge> src_edges = src_mesh.edges();
+ MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
BLI_assert(src_mesh.totvert == vertex_map.size());
BLI_assert(src_mesh.totedge == edge_map.size());
@@ -466,10 +466,10 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
Span<int> new_loop_starts,
int polys_masked_num)
{
- const Span<MPoly> src_polys = blender::bke::mesh_polygons(src_mesh);
- const Span<MLoop> src_loops = blender::bke::mesh_loops(src_mesh);
- MutableSpan<MPoly> dst_polys = blender::bke::mesh_polygons_for_write(dst_mesh);
- MutableSpan<MLoop> dst_loops = blender::bke::mesh_loops_for_write(dst_mesh);
+ const Span<MPoly> src_polys = src_mesh.polygons();
+ const Span<MLoop> src_loops = src_mesh.loops();
+ MutableSpan<MPoly> dst_polys = dst_mesh.polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh.loops_for_write();
for (const int i_dst : IndexRange(polys_masked_num)) {
const int i_src = masked_poly_indices[i_dst];
@@ -507,11 +507,11 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh,
int polys_masked_num,
int edges_add_num)
{
- const Span<MPoly> src_polys = blender::bke::mesh_polygons(src_mesh);
- const Span<MLoop> src_loops = blender::bke::mesh_loops(src_mesh);
- MutableSpan<MEdge> dst_edges = blender::bke::mesh_edges_for_write(dst_mesh);
- MutableSpan<MPoly> dst_polys = blender::bke::mesh_polygons_for_write(dst_mesh);
- MutableSpan<MLoop> dst_loops = blender::bke::mesh_loops_for_write(dst_mesh);
+ const Span<MPoly> src_polys = src_mesh.polygons();
+ const Span<MLoop> src_loops = src_mesh.loops();
+ MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
+ MutableSpan<MPoly> dst_polys = dst_mesh.polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh.loops_for_write();
int edge_index = dst_mesh.totedge - edges_add_num;
int sub_poly_index = 0;
diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc
index 605fe40f7d1..bdaa90af5d8 100644
--- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc
+++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc
@@ -178,12 +178,12 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
if (me != nullptr) {
- const Span<MVert> mesh_verts = blender::bke::mesh_vertices(*mesh);
- const Span<MEdge> mesh_edges = blender::bke::mesh_edges(*mesh);
- const Span<MPoly> mesh_polys = blender::bke::mesh_polygons(*mesh);
- const Span<MVert> me_vertices = blender::bke::mesh_vertices(*me);
- const Span<MEdge> me_edges = blender::bke::mesh_edges(*me);
- const Span<MPoly> me_polygons = blender::bke::mesh_polygons(*me);
+ const Span<MVert> mesh_verts = mesh->vertices();
+ const Span<MEdge> mesh_edges = mesh->edges();
+ const Span<MPoly> mesh_polys = mesh->polygons();
+ const Span<MVert> me_vertices = me->vertices();
+ const Span<MEdge> me_edges = me->edges();
+ const Span<MPoly> me_polygons = me->polygons();
/* TODO(sybren+bastien): possibly check relevant custom data layers (UV/color depending on
* flags) and duplicate those too.
diff --git a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
index f2c635dd770..d03f036eaa4 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_convex_hull.cc
@@ -46,7 +46,7 @@ static Mesh *hull_from_bullet(const Mesh *mesh, Span<float3> coords)
}
/* Copy vertices. */
- MutableSpan<MVert> dst_verts = bke::mesh_vertices_for_write(*result);
+ MutableSpan<MVert> dst_verts = result->vertices_for_write();
for (const int i : IndexRange(verts_num)) {
float co[3];
int original_index;
@@ -74,7 +74,7 @@ static Mesh *hull_from_bullet(const Mesh *mesh, Span<float3> coords)
* to a loop and edges need to be created from that. */
Array<MLoop> mloop_src(loops_num);
uint edge_index = 0;
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*result);
+ MutableSpan<MEdge> edges = result->edges_for_write();
for (const int i : IndexRange(loops_num)) {
int v_from;
@@ -109,8 +109,8 @@ static Mesh *hull_from_bullet(const Mesh *mesh, Span<float3> coords)
/* Copy faces. */
Array<int> loops;
int j = 0;
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*result);
- MutableSpan<MLoop> mesh_loops = bke::mesh_loops_for_write(*result);
+ MutableSpan<MPoly> polys = result->polygons_for_write();
+ MutableSpan<MLoop> mesh_loops = result->loops_for_write();
MLoop *loop = mesh_loops.data();
for (const int i : IndexRange(faces_num)) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
index 30906078024..580886ad6be 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_curve_fill.cc
@@ -79,10 +79,10 @@ static Mesh *cdt_to_mesh(const meshintersect::CDT_result<double> &result)
}
Mesh *mesh = BKE_mesh_new_nomain(vert_len, edge_len, 0, loop_len, poly_len);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
for (const int i : IndexRange(result.vert.size())) {
copy_v3_v3(verts[i].co, float3((float)result.vert[i].x, (float)result.vert[i].y, 0.0f));
diff --git a/source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc b/source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
index 0cd2b9767d1..07b419cc05c 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_deform_curves_on_surface.cc
@@ -66,11 +66,11 @@ static void deform_curves(const CurvesGeometry &curves,
const float4x4 curves_to_surface = surface_to_curves.inverted();
- const Span<MVert> surface_verts_old = bke::mesh_vertices(surface_mesh_old);
- const Span<MLoop> surface_loops_old = bke::mesh_loops(surface_mesh_old);
+ const Span<MVert> surface_verts_old = surface_mesh_old.vertices();
+ const Span<MLoop> surface_loops_old = surface_mesh_old.loops();
- const Span<MVert> surface_verts_new = bke::mesh_vertices(surface_mesh_new);
- const Span<MLoop> surface_loops_new = bke::mesh_loops(surface_mesh_new);
+ const Span<MVert> surface_verts_new = surface_mesh_new.vertices();
+ const Span<MLoop> surface_loops_new = surface_mesh_new.loops();
threading::parallel_for(curves.curves_range(), 256, [&](const IndexRange range) {
for (const int curve_i : range) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc b/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
index 2420e048e18..a4096efb79f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_delete_geometry.cc
@@ -161,7 +161,7 @@ static void copy_face_corner_attributes(const Map<AttributeIDRef, AttributeKind>
const Span<int> selected_poly_indices,
const Mesh &mesh_in)
{
- const Span<MPoly> polys = bke::mesh_polygons(mesh_in);
+ const Span<MPoly> polys = mesh_in.polygons();
Vector<int64_t> indices;
indices.reserve(selected_loops_num);
for (const int src_poly_index : selected_poly_indices) {
@@ -181,8 +181,8 @@ static void copy_masked_vertices_to_new_mesh(const Mesh &src_mesh,
Span<int> vertex_map)
{
BLI_assert(src_mesh.totvert == vertex_map.size());
- const Span<MVert> src_verts = bke::mesh_vertices(src_mesh);
- MutableSpan<MVert> dst_verts = bke::mesh_vertices_for_write(dst_mesh);
+ const Span<MVert> src_verts = src_mesh.vertices();
+ MutableSpan<MVert> dst_verts = dst_mesh.vertices_for_write();
for (const int i_src : vertex_map.index_range()) {
const int i_dst = vertex_map[i_src];
@@ -196,8 +196,8 @@ static void copy_masked_vertices_to_new_mesh(const Mesh &src_mesh,
static void copy_masked_edges_to_new_mesh(const Mesh &src_mesh, Mesh &dst_mesh, Span<int> edge_map)
{
BLI_assert(src_mesh.totedge == edge_map.size());
- const Span<MEdge> src_edges = bke::mesh_edges(src_mesh);
- MutableSpan<MEdge> dst_edges = bke::mesh_edges_for_write(dst_mesh);
+ const Span<MEdge> src_edges = src_mesh.edges();
+ MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
for (const int i_src : IndexRange(src_mesh.totedge)) {
const int i_dst = edge_map[i_src];
@@ -215,8 +215,8 @@ static void copy_masked_edges_to_new_mesh(const Mesh &src_mesh,
{
BLI_assert(src_mesh.totvert == vertex_map.size());
BLI_assert(src_mesh.totedge == edge_map.size());
- const Span<MEdge> src_edges = bke::mesh_edges(src_mesh);
- MutableSpan<MEdge> dst_edges = bke::mesh_edges_for_write(dst_mesh);
+ const Span<MEdge> src_edges = src_mesh.edges();
+ MutableSpan<MEdge> dst_edges = dst_mesh.edges_for_write();
for (const int i_src : IndexRange(src_mesh.totedge)) {
const int i_dst = edge_map[i_src];
@@ -239,10 +239,10 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
Span<int> masked_poly_indices,
Span<int> new_loop_starts)
{
- const Span<MPoly> src_polygons = bke::mesh_polygons(src_mesh);
- const Span<MLoop> src_loops = bke::mesh_loops(src_mesh);
- MutableSpan<MPoly> dst_polygons = bke::mesh_polygons_for_write(dst_mesh);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(dst_mesh);
+ const Span<MPoly> src_polygons = src_mesh.polygons();
+ const Span<MLoop> src_loops = src_mesh.loops();
+ MutableSpan<MPoly> dst_polygons = dst_mesh.polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh.loops_for_write();
for (const int i_dst : masked_poly_indices.index_range()) {
const int i_src = masked_poly_indices[i_dst];
@@ -270,10 +270,10 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
Span<int> masked_poly_indices,
Span<int> new_loop_starts)
{
- const Span<MPoly> src_polygons = bke::mesh_polygons(src_mesh);
- const Span<MLoop> src_loops = bke::mesh_loops(src_mesh);
- MutableSpan<MPoly> dst_polygons = bke::mesh_polygons_for_write(dst_mesh);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(dst_mesh);
+ const Span<MPoly> src_polygons = src_mesh.polygons();
+ const Span<MLoop> src_loops = src_mesh.loops();
+ MutableSpan<MPoly> dst_polygons = dst_mesh.polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh.loops_for_write();
for (const int i_dst : masked_poly_indices.index_range()) {
const int i_src = masked_poly_indices[i_dst];
@@ -302,10 +302,10 @@ static void copy_masked_polys_to_new_mesh(const Mesh &src_mesh,
Span<int> masked_poly_indices,
Span<int> new_loop_starts)
{
- const Span<MPoly> src_polygons = bke::mesh_polygons(src_mesh);
- const Span<MLoop> src_loops = bke::mesh_loops(src_mesh);
- MutableSpan<MPoly> dst_polygons = bke::mesh_polygons_for_write(dst_mesh);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(dst_mesh);
+ const Span<MPoly> src_polygons = src_mesh.polygons();
+ const Span<MLoop> src_loops = src_mesh.loops();
+ MutableSpan<MPoly> dst_polygons = dst_mesh.polygons_for_write();
+ MutableSpan<MLoop> dst_loops = dst_mesh.loops_for_write();
for (const int i_dst : masked_poly_indices.index_range()) {
const int i_src = masked_poly_indices[i_dst];
@@ -433,7 +433,7 @@ static void compute_selected_edges_from_vertex_selection(const Mesh &mesh,
int *r_selected_edges_num)
{
BLI_assert(mesh.totedge == r_edge_map.size());
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
int selected_edges_num = 0;
for (const int i : IndexRange(mesh.totedge)) {
@@ -460,8 +460,8 @@ static void compute_selected_polygons_from_vertex_selection(const Mesh &mesh,
int *r_selected_loops_num)
{
BLI_assert(mesh.totvert == vertex_selection.size());
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_selected_poly_indices.reserve(mesh.totpoly);
r_loop_starts.reserve(mesh.totloop);
@@ -503,7 +503,7 @@ static void compute_selected_vertices_and_edges_from_edge_selection(
int *r_selected_edges_num)
{
BLI_assert(mesh.totedge == edge_selection.size());
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
int selected_edges_num = 0;
int selected_verts_num = 0;
@@ -565,8 +565,8 @@ static void compute_selected_polygons_from_edge_selection(const Mesh &mesh,
int *r_selected_polys_num,
int *r_selected_loops_num)
{
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_selected_poly_indices.reserve(mesh.totpoly);
r_loop_starts.reserve(mesh.totloop);
@@ -714,7 +714,7 @@ static void compute_selected_polygons_from_poly_selection(const Mesh &mesh,
int *r_selected_loops_num)
{
BLI_assert(mesh.totpoly == poly_selection.size());
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
+ const Span<MPoly> polys = mesh.polygons();
r_selected_poly_indices.reserve(mesh.totpoly);
r_loop_starts.reserve(mesh.totloop);
@@ -748,8 +748,8 @@ static void compute_selected_mesh_data_from_poly_selection_edge_face(
{
BLI_assert(mesh.totpoly == poly_selection.size());
BLI_assert(mesh.totedge == r_edge_map.size());
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_edge_map.fill(-1);
@@ -799,8 +799,8 @@ static void compute_selected_mesh_data_from_poly_selection(const Mesh &mesh,
{
BLI_assert(mesh.totpoly == poly_selection.size());
BLI_assert(mesh.totedge == r_edge_map.size());
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_vertex_map.fill(-1);
r_edge_map.fill(-1);
@@ -996,7 +996,7 @@ static void do_mesh_separation(GeometrySet &geometry_set,
selected_polys_num);
/* Copy the selected parts of the mesh over to the new mesh. */
- bke::mesh_vertices_for_write(*mesh_out).copy_from(bke::mesh_vertices(mesh_in));
+ mesh_out->vertices_for_write().copy_from(mesh_in.vertices());
copy_masked_edges_to_new_mesh(mesh_in, *mesh_out, edge_map);
copy_masked_polys_to_new_mesh(
mesh_in, *mesh_out, edge_map, selected_poly_indices, new_loop_starts);
@@ -1059,8 +1059,8 @@ static void do_mesh_separation(GeometrySet &geometry_set,
&mesh_in, mesh_in.totvert, mesh_in.totedge, 0, selected_loops_num, selected_polys_num);
/* Copy the selected parts of the mesh over to the new mesh. */
- bke::mesh_vertices_for_write(*mesh_out).copy_from(bke::mesh_vertices(mesh_in));
- bke::mesh_edges_for_write(*mesh_out).copy_from(bke::mesh_edges(mesh_in));
+ mesh_out->vertices_for_write().copy_from(mesh_in.vertices());
+ mesh_out->edges_for_write().copy_from(mesh_in.edges());
copy_masked_polys_to_new_mesh(mesh_in, *mesh_out, selected_poly_indices, new_loop_starts);
/* Copy attributes. */
diff --git a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc
index 3641ffba64b..2bb321a349a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_distribute_points_on_faces.cc
@@ -105,8 +105,8 @@ static void sample_mesh_surface(const Mesh &mesh,
Vector<float3> &r_bary_coords,
Vector<int> &r_looptri_indices)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MLoop> loops = mesh.loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh),
BKE_mesh_runtime_looptri_len(&mesh)};
@@ -350,8 +350,8 @@ BLI_NOINLINE static void compute_attribute_outputs(const Mesh &mesh,
attribute_outputs.rotation_id.get(), ATTR_DOMAIN_POINT);
}
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MLoop> loops = mesh.loops();
const Span<MLoopTri> looptris{BKE_mesh_runtime_looptri_ensure(&mesh),
BKE_mesh_runtime_looptri_len(&mesh)};
diff --git a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc
index a94c4413bd4..1b9e9ae9b4a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_dual_mesh.cc
@@ -209,9 +209,9 @@ static void calc_boundaries(const Mesh &mesh,
{
BLI_assert(r_vertex_types.size() == mesh.totvert);
BLI_assert(r_edge_types.size() == mesh.totedge);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
r_vertex_types.fill(VertexType::Loose);
r_edge_types.fill(EdgeType::Loose);
@@ -263,8 +263,8 @@ static void calc_boundaries(const Mesh &mesh,
static void create_vertex_poly_map(const Mesh &mesh,
MutableSpan<Vector<int>> r_vertex_poly_indices)
{
- const Span<MPoly> polygons = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polygons = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
for (const int i : polygons.index_range()) {
const MPoly &poly = polygons[i];
const Span<MLoop> poly_loops = loops.slice(poly.loopstart, poly.totloop);
@@ -635,10 +635,10 @@ static void calc_dual_mesh(GeometrySet &geometry_set,
const bool keep_boundaries)
{
const Mesh &mesh_in = *in_component.get_for_read();
- const Span<MVert> src_verts = bke::mesh_vertices(mesh_in);
- const Span<MEdge> src_edges = bke::mesh_edges(mesh_in);
- const Span<MPoly> src_polys = bke::mesh_polygons(mesh_in);
- const Span<MLoop> src_loops = bke::mesh_loops(mesh_in);
+ const Span<MVert> src_verts = mesh_in.vertices();
+ const Span<MEdge> src_edges = mesh_in.edges();
+ const Span<MPoly> src_polys = mesh_in.polygons();
+ const Span<MLoop> src_loops = mesh_in.loops();
Map<AttributeIDRef, AttributeKind> attributes;
geometry_set.gather_attributes_for_propagation(
@@ -921,10 +921,10 @@ static void calc_dual_mesh(GeometrySet &geometry_set,
bke::mesh_attributes(mesh_in),
bke::mesh_attributes_for_write(*mesh_out));
- MutableSpan<MVert> dst_verts = bke::mesh_vertices_for_write(*mesh_out);
- MutableSpan<MEdge> dst_edges = bke::mesh_edges_for_write(*mesh_out);
- MutableSpan<MPoly> dst_polys = bke::mesh_polygons_for_write(*mesh_out);
- MutableSpan<MLoop> dst_loops = bke::mesh_loops_for_write(*mesh_out);
+ MutableSpan<MVert> dst_verts = mesh_out->vertices_for_write();
+ MutableSpan<MEdge> dst_edges = mesh_out->edges_for_write();
+ MutableSpan<MPoly> dst_polys = mesh_out->polygons_for_write();
+ MutableSpan<MLoop> dst_loops = mesh_out->loops_for_write();
int loop_start = 0;
for (const int i : IndexRange(mesh_out->totpoly)) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
index f6a4d2e6cf8..9af1536a194 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_duplicate_elements.cc
@@ -486,7 +486,7 @@ static void copy_stable_id_faces(const Mesh &mesh,
VArraySpan<int> src{src_attribute.varray.typed<int>()};
MutableSpan<int> dst = dst_attribute.span.typed<int>();
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
+ const Span<MPoly> polys = mesh.polygons();
int loop_index = 0;
for (const int i_poly : selection.index_range()) {
const IndexRange range = range_for_offsets_index(poly_offsets, i_poly);
@@ -522,10 +522,10 @@ static void duplicate_faces(GeometrySet &geometry_set,
geometry_set.keep_only_during_modify({GEO_COMPONENT_TYPE_MESH});
const Mesh &mesh = *geometry_set.get_mesh_for_read();
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
bke::MeshFieldContext field_context{mesh, ATTR_DOMAIN_FACE};
FieldEvaluator evaluator(field_context, polys.size());
@@ -547,10 +547,10 @@ static void duplicate_faces(GeometrySet &geometry_set,
offsets[selection.size()] = total_polys;
Mesh *new_mesh = BKE_mesh_new_nomain(total_loops, total_loops, 0, total_loops, total_polys);
- MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(*new_mesh);
- MutableSpan<MEdge> new_edges = bke::mesh_edges_for_write(*new_mesh);
- MutableSpan<MPoly> new_polys = bke::mesh_polygons_for_write(*new_mesh);
- MutableSpan<MLoop> new_loops = bke::mesh_loops_for_write(*new_mesh);
+ MutableSpan<MVert> new_verts = new_mesh->vertices_for_write();
+ MutableSpan<MEdge> new_edges = new_mesh->edges_for_write();
+ MutableSpan<MPoly> new_polys = new_mesh->polygons_for_write();
+ MutableSpan<MLoop> new_loops = new_mesh->loops_for_write();
Array<int> vert_mapping(new_verts.size());
Array<int> edge_mapping(new_edges.size());
@@ -689,7 +689,7 @@ static void copy_stable_id_edges(const Mesh &mesh,
return;
}
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
VArraySpan<int> src{src_attribute.varray.typed<int>()};
MutableSpan<int> dst = dst_attribute.span.typed<int>();
@@ -723,7 +723,7 @@ static void duplicate_edges(GeometrySet &geometry_set,
return;
};
const Mesh &mesh = *geometry_set.get_mesh_for_read();
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
bke::MeshFieldContext field_context{mesh, ATTR_DOMAIN_EDGE};
FieldEvaluator evaluator{field_context, edges.size()};
@@ -736,7 +736,7 @@ static void duplicate_edges(GeometrySet &geometry_set,
Array<int> edge_offsets = accumulate_counts_to_offsets(selection, counts);
Mesh *new_mesh = BKE_mesh_new_nomain(edge_offsets.last() * 2, edge_offsets.last(), 0, 0, 0);
- MutableSpan<MEdge> new_edges = bke::mesh_edges_for_write(*new_mesh);
+ MutableSpan<MEdge> new_edges = new_mesh->edges_for_write();
Array<int> vert_orig_indices(edge_offsets.last() * 2);
threading::parallel_for(selection.index_range(), 1024, [&](IndexRange range) {
@@ -904,7 +904,7 @@ static void duplicate_points_mesh(GeometrySet &geometry_set,
const IndexAttributes &attribute_outputs)
{
const Mesh &mesh = *geometry_set.get_mesh_for_read();
- const Span<MVert> src_verts = bke::mesh_vertices(mesh);
+ const Span<MVert> src_verts = mesh.vertices();
bke::MeshFieldContext field_context{mesh, ATTR_DOMAIN_POINT};
FieldEvaluator evaluator{field_context, src_verts.size()};
@@ -917,7 +917,7 @@ static void duplicate_points_mesh(GeometrySet &geometry_set,
Array<int> offsets = accumulate_counts_to_offsets(selection, counts);
Mesh *new_mesh = BKE_mesh_new_nomain(offsets.last(), 0, 0, 0, 0);
- MutableSpan<MVert> dst_verts = bke::mesh_vertices_for_write(*new_mesh);
+ MutableSpan<MVert> dst_verts = new_mesh->vertices_for_write();
threaded_slice_fill(offsets.as_span(), selection, src_verts, dst_verts);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_selection.cc b/source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_selection.cc
index 13b6a57e8b8..ac66e3906a7 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_selection.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_edge_paths_to_selection.cc
@@ -25,7 +25,7 @@ static void edge_paths_to_selection(const Mesh &src_mesh,
const Span<int> next_indices,
MutableSpan<bool> r_selection)
{
- const Span<MEdge> edges = bke::mesh_edges(src_mesh);
+ const Span<MEdge> edges = src_mesh.edges();
Array<bool> selection(src_mesh.totvert, false);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
index b4427903ed6..d81b335ebb3 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_extrude_mesh.cc
@@ -238,16 +238,15 @@ static void extrude_mesh_vertices(Mesh &mesh,
const VArray<float3> offsets = evaluator.get_evaluated<float3>(0);
/* This allows parallelizing attribute mixing for new edges. */
- Array<Vector<int>> vert_to_edge_map = create_vert_to_edge_map(orig_vert_size,
- bke::mesh_edges(mesh));
+ Array<Vector<int>> vert_to_edge_map = create_vert_to_edge_map(orig_vert_size, mesh.edges());
expand_mesh(mesh, selection.size(), selection.size(), 0, 0);
const IndexRange new_vert_range{orig_vert_size, selection.size()};
const IndexRange new_edge_range{orig_edge_size, selection.size()};
- MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
- MutableSpan<MEdge> new_edges = bke::mesh_edges_for_write(mesh).slice(new_edge_range);
+ MutableSpan<MVert> new_verts = mesh.vertices_for_write().slice(new_vert_range);
+ MutableSpan<MEdge> new_edges = mesh.edges_for_write().slice(new_edge_range);
for (const int i_selection : selection.index_range()) {
new_edges[i_selection] = new_loose_edge(selection[i_selection], new_vert_range[i_selection]);
@@ -312,8 +311,8 @@ static void extrude_mesh_vertices(Mesh &mesh,
static Array<Vector<int, 2>> mesh_calculate_polys_of_edge(const Mesh &mesh)
{
- Span<MPoly> polys = bke::mesh_polygons(mesh);
- Span<MLoop> loops = bke::mesh_loops(mesh);
+ Span<MPoly> polys = mesh.polygons();
+ Span<MLoop> loops = mesh.loops();
Array<Vector<int, 2>> polys_of_edge(mesh.totedge);
for (const int i_poly : polys.index_range()) {
@@ -371,7 +370,7 @@ template<typename T>
static VectorSet<int> vert_indices_from_edges(const Mesh &mesh, const Span<T> edge_indices)
{
static_assert(is_same_any_v<T, int, int64_t>);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
VectorSet<int> vert_indices;
vert_indices.reserve(edge_indices.size());
@@ -389,8 +388,8 @@ static void extrude_mesh_edges(Mesh &mesh,
const AttributeOutputs &attribute_outputs)
{
const int orig_vert_size = mesh.totvert;
- Span<MEdge> orig_edges = bke::mesh_edges(mesh);
- Span<MPoly> orig_polys = bke::mesh_polygons(mesh);
+ Span<MEdge> orig_edges = mesh.edges();
+ Span<MPoly> orig_polys = mesh.polygons();
const int orig_loop_size = mesh.totloop;
bke::MeshFieldContext edge_context{mesh, ATTR_DOMAIN_EDGE};
@@ -439,12 +438,12 @@ static void extrude_mesh_edges(Mesh &mesh,
new_poly_range.size(),
new_loop_range.size());
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(mesh);
+ MutableSpan<MEdge> edges = mesh.edges_for_write();
MutableSpan<MEdge> connect_edges = edges.slice(connect_edge_range);
MutableSpan<MEdge> duplicate_edges = edges.slice(duplicate_edge_range);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(mesh);
+ MutableSpan<MPoly> polys = mesh.polygons_for_write();
MutableSpan<MPoly> new_polys = polys.slice(new_poly_range);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
+ MutableSpan<MLoop> loops = mesh.loops_for_write();
MutableSpan<MLoop> new_loops = loops.slice(new_loop_range);
for (const int i : connect_edges.index_range()) {
@@ -607,7 +606,7 @@ static void extrude_mesh_edges(Mesh &mesh,
return true;
});
- MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
+ MutableSpan<MVert> new_verts = mesh.vertices_for_write().slice(new_vert_range);
if (edge_offsets.is_single()) {
const float3 offset = edge_offsets.get_internal_single();
threading::parallel_for(new_verts.index_range(), 1024, [&](const IndexRange range) {
@@ -653,9 +652,9 @@ static void extrude_mesh_face_regions(Mesh &mesh,
const AttributeOutputs &attribute_outputs)
{
const int orig_vert_size = mesh.totvert;
- Span<MEdge> orig_edges = bke::mesh_edges(mesh);
- Span<MPoly> orig_polys = bke::mesh_polygons(mesh);
- Span<MLoop> orig_loops = bke::mesh_loops(mesh);
+ Span<MEdge> orig_edges = mesh.edges();
+ Span<MPoly> orig_polys = mesh.polygons();
+ Span<MLoop> orig_loops = mesh.loops();
bke::MeshFieldContext poly_context{mesh, ATTR_DOMAIN_FACE};
FieldEvaluator poly_evaluator{poly_context, mesh.totpoly};
@@ -782,13 +781,13 @@ static void extrude_mesh_face_regions(Mesh &mesh,
side_poly_range.size(),
side_loop_range.size());
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(mesh);
+ MutableSpan<MEdge> edges = mesh.edges_for_write();
MutableSpan<MEdge> connect_edges = edges.slice(connect_edge_range);
MutableSpan<MEdge> boundary_edges = edges.slice(boundary_edge_range);
MutableSpan<MEdge> new_inner_edges = edges.slice(new_inner_edge_range);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(mesh);
+ MutableSpan<MPoly> polys = mesh.polygons_for_write();
MutableSpan<MPoly> new_polys = polys.slice(side_poly_range);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
+ MutableSpan<MLoop> loops = mesh.loops_for_write();
MutableSpan<MLoop> new_loops = loops.slice(side_loop_range);
/* Initialize the edges that form the sides of the extrusion. */
@@ -977,7 +976,7 @@ static void extrude_mesh_face_regions(Mesh &mesh,
/* Translate vertices based on the offset. If the vertex is used by a selected edge, it will
* have been duplicated and only the new vertex should use the offset. Otherwise the vertex might
* still need an offset, but it was reused on the inside of a region of extruded faces. */
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(mesh);
+ MutableSpan<MVert> verts = mesh.vertices_for_write();
if (poly_offsets.is_single()) {
const float3 offset = poly_offsets.get_internal_single();
threading::parallel_for(
@@ -1039,8 +1038,8 @@ static void extrude_individual_mesh_faces(Mesh &mesh,
{
const int orig_vert_size = mesh.totvert;
const int orig_edge_size = mesh.totedge;
- Span<MPoly> orig_polys = bke::mesh_polygons(mesh);
- Span<MLoop> orig_loops = bke::mesh_loops(mesh);
+ Span<MPoly> orig_polys = mesh.polygons();
+ Span<MLoop> orig_loops = mesh.loops();
/* Use a mesh for the result of the evaluation because the mesh is reallocated before
* the vertices are moved, and the evaluated result might reference an attribute. */
@@ -1079,13 +1078,13 @@ static void extrude_individual_mesh_faces(Mesh &mesh,
side_poly_range.size(),
side_loop_range.size());
- MutableSpan<MVert> new_verts = bke::mesh_vertices_for_write(mesh).slice(new_vert_range);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(mesh);
+ MutableSpan<MVert> new_verts = mesh.vertices_for_write().slice(new_vert_range);
+ MutableSpan<MEdge> edges = mesh.edges_for_write();
MutableSpan<MEdge> connect_edges = edges.slice(connect_edge_range);
MutableSpan<MEdge> duplicate_edges = edges.slice(duplicate_edge_range);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(mesh);
+ MutableSpan<MPoly> polys = mesh.polygons_for_write();
MutableSpan<MPoly> new_polys = polys.slice(side_poly_range);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
+ MutableSpan<MLoop> loops = mesh.loops_for_write();
/* For every selected polygon, build the faces that form the sides of the extrusion. Filling some
* of this data like the new edges or polygons could be easily split into separate loops, which
diff --git a/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc b/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
index 5c31b597e01..2d642ad13d5 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_flip_faces.cc
@@ -30,8 +30,8 @@ static void mesh_flip_faces(Mesh &mesh, const Field<bool> &selection_field)
evaluator.evaluate();
const IndexMask selection = evaluator.get_evaluated_as_mask(0);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ MutableSpan<MLoop> loops = mesh.loops_for_write();
for (const int i : selection.index_range()) {
const MPoly &poly = polys[selection[i]];
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc
index 94402c94c14..4b5ea1c8742 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_angle.cc
@@ -64,9 +64,9 @@ class AngleFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask UNUSED(mask)) const final
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
Array<EdgeMapEntry> edge_map = create_edge_map(polys, loops, mesh.totedge);
auto angle_fn = [edge_map = std::move(edge_map), verts, polys, loops](const int i) -> float {
@@ -109,10 +109,10 @@ class SignedAngleFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask UNUSED(mask)) const final
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
Array<EdgeMapEntry> edge_map = create_edge_map(polys, loops, mesh.totedge);
auto angle_fn =
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc
index 17b9dd739b7..716cbf589d9 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_neighbors.cc
@@ -28,7 +28,7 @@ class EdgeNeighborCountFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask UNUSED(mask)) const final
{
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
Array<int> face_count(mesh.totedge, 0);
for (const MLoop &loop : loops) {
face_count[loop.e]++;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc
index 81e9badf347..7fd2df7c552 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_edge_vertices.cc
@@ -31,7 +31,7 @@ static VArray<int> construct_edge_vertices_gvarray(const Mesh &mesh,
const VertexNumber vertex,
const eAttrDomain domain)
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
if (domain == ATTR_DOMAIN_EDGE) {
if (vertex == VERTEX_ONE) {
return VArray<int>::ForFunc(edges.size(),
@@ -79,8 +79,8 @@ static VArray<float3> construct_edge_positions_gvarray(const Mesh &mesh,
const VertexNumber vertex,
const eAttrDomain domain)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MEdge> edges = mesh.edges();
if (vertex == VERTEX_ONE) {
return bke::mesh_attributes(mesh).adapt_domain<float3>(
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc
index a466b63e027..7dfeaa8e8d9 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_area.cc
@@ -18,9 +18,9 @@ static void node_declare(NodeDeclarationBuilder &b)
static VArray<float> construct_face_area_varray(const Mesh &mesh, const eAttrDomain domain)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
auto area_fn = [verts, polys, loops](const int i) -> float {
const MPoly &poly = polys[i];
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc
index 1a82ae61c1b..b316639fd0a 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_is_planar.cc
@@ -37,9 +37,9 @@ class PlanarFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask /*mask*/) const final
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
const Span<float3> poly_normals{(float3 *)BKE_mesh_poly_normals_ensure(&mesh), mesh.totpoly};
bke::MeshFieldContext context{mesh, ATTR_DOMAIN_FACE};
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc
index 01b4f65788f..59d30b997a6 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_face_neighbors.cc
@@ -21,8 +21,8 @@ static void node_declare(NodeDeclarationBuilder &b)
static VArray<int> construct_neighbor_count_varray(const Mesh &mesh, const eAttrDomain domain)
{
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
Array<int> edge_count(mesh.totedge, 0);
for (const MLoop &loop : loops) {
@@ -70,7 +70,7 @@ class FaceNeighborCountFieldInput final : public bke::MeshFieldInput {
static VArray<int> construct_vertex_count_varray(const Mesh &mesh, const eAttrDomain domain)
{
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
+ const Span<MPoly> polys = mesh.polygons();
return bke::mesh_attributes(mesh).adapt_domain<int>(
VArray<int>::ForFunc(polys.size(),
[polys](const int i) -> float { return polys[i].totloop; }),
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_island.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_island.cc
index 89ef06705e7..53cb3d0a19f 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_island.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_island.cc
@@ -33,7 +33,7 @@ class IslandFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask UNUSED(mask)) const final
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
DisjointSet islands(mesh.totvert);
for (const int i : edges.index_range()) {
@@ -74,7 +74,7 @@ class IslandCountFieldInput final : public bke::MeshFieldInput {
const eAttrDomain domain,
IndexMask UNUSED(mask)) const final
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
DisjointSet islands(mesh.totvert);
for (const int i : edges.index_range()) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc
index 23f7988edf7..ab44a6c8515 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_mesh_vertex_neighbors.cc
@@ -22,7 +22,7 @@ static void node_declare(NodeDeclarationBuilder &b)
static VArray<int> construct_vertex_count_gvarray(const Mesh &mesh, const eAttrDomain domain)
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
if (domain == ATTR_DOMAIN_POINT) {
Array<int> counts(mesh.totvert, 0);
for (const int i : edges.index_range()) {
@@ -62,7 +62,7 @@ class VertexCountFieldInput final : public bke::MeshFieldInput {
static VArray<int> construct_face_count_gvarray(const Mesh &mesh, const eAttrDomain domain)
{
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MLoop> loops = mesh.loops();
if (domain == ATTR_DOMAIN_POINT) {
Array<int> vertices(mesh.totvert, 0);
for (const int i : loops.index_range()) {
diff --git a/source/blender/nodes/geometry/nodes/node_geo_input_shortest_edge_paths.cc b/source/blender/nodes/geometry/nodes/node_geo_input_shortest_edge_paths.cc
index 7ebcae07cef..e13edc8f979 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_input_shortest_edge_paths.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_input_shortest_edge_paths.cc
@@ -28,7 +28,7 @@ struct EdgeVertMap {
EdgeVertMap(const Mesh &mesh)
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
edges_by_vertex_map.reinitialize(mesh.totvert);
for (const int edge_i : edges.index_range()) {
const MEdge &edge = edges[edge_i];
@@ -45,7 +45,7 @@ static void shortest_paths(const Mesh &mesh,
MutableSpan<int> r_next_index,
MutableSpan<float> r_cost)
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
Array<bool> visited(mesh.totvert, false);
std::priority_queue<VertPriority, std::vector<VertPriority>, std::greater<VertPriority>> queue;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
index 772a6b44ec2..ba3871adc76 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_circle.cc
@@ -109,10 +109,10 @@ static Mesh *create_circle_mesh(const float radius,
circle_corner_total(fill_type, verts_num),
circle_face_total(fill_type, verts_num));
BKE_id_material_eval_ensure_default_slot(&mesh->id);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
/* Assign vertex coordinates. */
const float angle_delta = 2.0f * (M_PI / static_cast<float>(verts_num));
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
index cdc305fc658..98ae1ef1275 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_cone.cc
@@ -657,7 +657,7 @@ static Mesh *create_vertex_mesh()
{
/* Returns a mesh with a single vertex at the origin. */
Mesh *mesh = BKE_mesh_new_nomain(1, 0, 0, 0, 0);
- copy_v3_fl3(bke::mesh_vertices_for_write(*mesh).first().co, 0.0f, 0.0f, 0.0f);
+ copy_v3_fl3(mesh->vertices_for_write().first().co, 0.0f, 0.0f, 0.0f);
return mesh;
}
@@ -689,10 +689,10 @@ Mesh *create_cylinder_or_cone_mesh(const float radius_top,
config.tot_verts, config.tot_edges, 0, config.tot_corners, config.tot_faces);
BKE_id_material_eval_ensure_default_slot(&mesh->id);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
calculate_cone_vertices(verts, config);
calculate_cone_edges(edges, config);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
index c44d7838b8a..656c5988bef 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_grid.cc
@@ -49,10 +49,10 @@ Mesh *create_grid_mesh(const int verts_x,
0,
edges_x * edges_y * 4,
edges_x * edges_y);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
{
const float dx = edges_x == 0 ? 0.0f : size_x / edges_x;
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
index 0402919acc5..130fb8ae589 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_line.cc
@@ -179,8 +179,8 @@ Mesh *create_line_mesh(const float3 start, const float3 delta, const int count)
Mesh *mesh = BKE_mesh_new_nomain(count, count - 1, 0, 0, 0);
BKE_id_material_eval_ensure_default_slot(&mesh->id);
- MutableSpan<MVert> vertices = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
+ MutableSpan<MVert> vertices = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
threading::parallel_invoke(
1024 < count,
diff --git a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
index 22ab6d85316..48a95bfcb49 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_mesh_primitive_uv_sphere.cc
@@ -301,10 +301,10 @@ static Mesh *create_uv_sphere_mesh(const float radius, const int segments, const
sphere_corner_total(segments, rings),
sphere_face_total(segments, rings));
BKE_id_material_eval_ensure_default_slot(&mesh->id);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MEdge> edges = bke::mesh_edges_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MEdge> edges = mesh->edges_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
threading::parallel_invoke(
1024 < segments * rings,
diff --git a/source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc b/source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc
index 72a46fddb4f..fc467a9424d 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_scale_elements.cc
@@ -158,10 +158,10 @@ static void scale_vertex_islands_uniformly(Mesh &mesh,
const UniformScaleParams &params,
const GetVertexIndicesFn get_vertex_indices)
{
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ MutableSpan<MVert> verts = mesh.vertices_for_write();
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
threading::parallel_for(islands.index_range(), 256, [&](const IndexRange range) {
for (const int island_index : range) {
@@ -199,10 +199,10 @@ static void scale_vertex_islands_on_axis(Mesh &mesh,
const AxisScaleParams &params,
const GetVertexIndicesFn get_vertex_indices)
{
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ MutableSpan<MVert> verts = mesh.vertices_for_write();
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
threading::parallel_for(islands.index_range(), 256, [&](const IndexRange range) {
for (const int island_index : range) {
@@ -245,8 +245,8 @@ static void scale_vertex_islands_on_axis(Mesh &mesh,
static Vector<ElementIsland> prepare_face_islands(const Mesh &mesh, const IndexMask face_selection)
{
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
/* Use the disjoint set data structure to determine which vertices have to be scaled together. */
DisjointSet disjoint_set(mesh.totvert);
@@ -342,7 +342,7 @@ static void scale_faces_uniformly(Mesh &mesh, const UniformScaleFields &fields)
static Vector<ElementIsland> prepare_edge_islands(const Mesh &mesh, const IndexMask edge_selection)
{
- const Span<MEdge> edges = bke::mesh_edges(mesh);
+ const Span<MEdge> edges = mesh.edges();
/* Use the disjoint set data structure to determine which vertices have to be scaled together. */
DisjointSet disjoint_set(mesh.totvert);
diff --git a/source/blender/nodes/geometry/nodes/node_geo_set_position.cc b/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
index 2495b3d5e0b..ce453a8ef32 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_set_position.cc
@@ -36,7 +36,7 @@ static void set_computed_position_and_offset(GeometryComponent &component,
switch (component.type()) {
case GEO_COMPONENT_TYPE_MESH: {
Mesh *mesh = static_cast<MeshComponent &>(component).get_for_write();
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
if (in_positions.is_same(positions.varray)) {
devirtualize_varray(in_offsets, [&](const auto in_offsets) {
threading::parallel_for(
diff --git a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
index 69c71f074d6..6be37a02bd5 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_transfer_attribute.cc
@@ -264,9 +264,9 @@ static void get_closest_mesh_corners(const Mesh &mesh,
const MutableSpan<float> r_distances_sq,
const MutableSpan<float3> r_positions)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
BLI_assert(mesh.totloop > 0);
Array<int> poly_indices(positions.size());
diff --git a/source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc b/source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc
index 979e4c7bbec..5900e234220 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_uv_pack_islands.cc
@@ -37,9 +37,9 @@ static VArray<float3> construct_uv_gvarray(const Mesh &mesh,
const float margin,
const eAttrDomain domain)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
bke::MeshFieldContext face_context{mesh, ATTR_DOMAIN_FACE};
FieldEvaluator face_evaluator{face_context, polys.size()};
diff --git a/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc b/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc
index 96fd5a900ee..3095cac6a50 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_uv_unwrap.cc
@@ -62,10 +62,10 @@ static VArray<float3> construct_uv_gvarray(const Mesh &mesh,
const GeometryNodeUVUnwrapMethod method,
const eAttrDomain domain)
{
- const Span<MVert> verts = bke::mesh_vertices(mesh);
- const Span<MEdge> edges = bke::mesh_edges(mesh);
- const Span<MPoly> polys = bke::mesh_polygons(mesh);
- const Span<MLoop> loops = bke::mesh_loops(mesh);
+ const Span<MVert> verts = mesh.vertices();
+ const Span<MEdge> edges = mesh.edges();
+ const Span<MPoly> polys = mesh.polygons();
+ const Span<MLoop> loops = mesh.loops();
bke::MeshFieldContext face_context{mesh, ATTR_DOMAIN_FACE};
FieldEvaluator face_evaluator{face_context, polys.size()};
diff --git a/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc b/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc
index b1751fd0b4d..5788a744041 100644
--- a/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc
+++ b/source/blender/nodes/geometry/nodes/node_geo_volume_to_mesh.cc
@@ -123,9 +123,9 @@ static Mesh *create_mesh_from_volume_grids(Span<openvdb::GridBase::ConstPtr> gri
Mesh *mesh = BKE_mesh_new_nomain(vert_offset, 0, 0, loop_offset, poly_offset);
BKE_id_material_eval_ensure_default_slot(&mesh->id);
- MutableSpan<MVert> verts = bke::mesh_vertices_for_write(*mesh);
- MutableSpan<MPoly> polys = bke::mesh_polygons_for_write(*mesh);
- MutableSpan<MLoop> loops = bke::mesh_loops_for_write(*mesh);
+ MutableSpan<MVert> verts = mesh->vertices_for_write();
+ MutableSpan<MPoly> polys = mesh->polygons_for_write();
+ MutableSpan<MLoop> loops = mesh->loops_for_write();
for (const int i : grids.index_range()) {
const bke::OpenVDBMeshData &data = mesh_data[i];
diff --git a/source/blender/render/intern/texture_margin.cc b/source/blender/render/intern/texture_margin.cc
index ab3df0c65ba..eae849e1968 100644
--- a/source/blender/render/intern/texture_margin.cc
+++ b/source/blender/render/intern/texture_margin.cc
@@ -505,8 +505,8 @@ static void generate_margin(ImBuf *ibuf,
totpoly = me->totpoly;
totloop = me->totloop;
totedge = me->totedge;
- mpoly = bke::mesh_polygons(*me).data();
- mloop = bke::mesh_loops(*me).data();
+ mpoly = me->polygons().data();
+ mloop = me->loops().data();
if ((uv_layer == nullptr) || (uv_layer[0] == '\0')) {
mloopuv = static_cast<const MLoopUV *>(CustomData_get_layer(&me->ldata, CD_MLOOPUV));
@@ -520,7 +520,7 @@ static void generate_margin(ImBuf *ibuf,
tottri = poly_to_tri_count(me->totpoly, me->totloop);
looptri_mem = static_cast<MLoopTri *>(MEM_mallocN(sizeof(*looptri) * tottri, __func__));
BKE_mesh_recalc_looptri(
- mloop, mpoly, bke::mesh_vertices(*me).data(), me->totloop, me->totpoly, looptri_mem);
+ mloop, mpoly, me->vertices().data(), me->totloop, me->totpoly, looptri_mem);
looptri = looptri_mem;
}
else {