diff options
Diffstat (limited to 'source/blender/editors/object')
-rw-r--r-- | source/blender/editors/object/object_bake_api.c | 2 | ||||
-rw-r--r-- | source/blender/editors/object/object_modifier.cc | 29 | ||||
-rw-r--r-- | source/blender/editors/object/object_remesh.cc | 7 | ||||
-rw-r--r-- | source/blender/editors/object/object_vgroup.cc | 33 |
4 files changed, 35 insertions, 36 deletions
diff --git a/source/blender/editors/object/object_bake_api.c b/source/blender/editors/object/object_bake_api.c index e69ccf5a50d..6a415427558 100644 --- a/source/blender/editors/object/object_bake_api.c +++ b/source/blender/editors/object/object_bake_api.c @@ -1032,7 +1032,7 @@ static void bake_targets_populate_pixels_color_attributes(BakeTargets *targets, const MLoop *loops = BKE_mesh_loops(me_eval); BKE_mesh_recalc_looptri(loops, BKE_mesh_polys(me_eval), - BKE_mesh_verts(me_eval), + BKE_mesh_positions(me_eval), me_eval->totloop, me_eval->totpoly, looptri); diff --git a/source/blender/editors/object/object_modifier.cc b/source/blender/editors/object/object_modifier.cc index 67399717c72..013bbbf7e55 100644 --- a/source/blender/editors/object/object_modifier.cc +++ b/source/blender/editors/object/object_modifier.cc @@ -93,6 +93,7 @@ #include "object_intern.h" +using blender::float3; using blender::Span; static void modifier_skin_customdata_delete(struct Object *ob); @@ -590,13 +591,13 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList * /*reports*/, me->totvert = verts_num; me->totedge = edges_num; - CustomData_add_layer(&me->vdata, CD_MVERT, CD_SET_DEFAULT, nullptr, verts_num); + CustomData_add_layer_named( + &me->vdata, CD_PROP_FLOAT3, CD_CONSTRUCT, nullptr, verts_num, "position"); 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 = me->verts_for_write(); + blender::MutableSpan<float3> positions = me->positions_for_write(); blender::MutableSpan<MEdge> edges = me->edges_for_write(); - MVert *mvert = verts.data(); MEdge *medge = edges.data(); bke::MutableAttributeAccessor attributes = me->attributes_for_write(); @@ -610,7 +611,7 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList * /*reports*/, ParticleCacheKey *key = cache[a]; int kmax = key->segments; for (int k = 0; k <= kmax; k++, key++, cvert++, vert_index++) { - copy_v3_v3(mvert[vert_index].co, key->co); + positions[vert_index] = key->co; if (k) { medge->v1 = cvert - 1; medge->v2 = cvert; @@ -629,7 +630,7 @@ bool ED_object_modifier_convert_psys_to_mesh(ReportList * /*reports*/, ParticleCacheKey *key = cache[a]; int kmax = key->segments; for (int k = 0; k <= kmax; k++, key++, cvert++, vert_index++) { - copy_v3_v3(mvert[vert_index].co, key->co); + copy_v3_v3(positions[vert_index], key->co); if (k) { medge->v1 = cvert - 1; medge->v2 = cvert; @@ -2659,7 +2660,7 @@ void OBJECT_OT_skin_radii_equalize(wmOperatorType *ot) } static void skin_armature_bone_create(Object *skin_ob, - const MVert *mvert, + const Span<float3> positions, const MEdge *medge, bArmature *arm, BLI_bitmap *edges_visited, @@ -2686,8 +2687,8 @@ static void skin_armature_bone_create(Object *skin_ob, bone->flag |= BONE_CONNECTED; } - copy_v3_v3(bone->head, mvert[parent_v].co); - copy_v3_v3(bone->tail, mvert[v].co); + copy_v3_v3(bone->head, positions[parent_v]); + copy_v3_v3(bone->tail, positions[v]); bone->rad_head = bone->rad_tail = 0.25; BLI_snprintf(bone->name, sizeof(bone->name), "Bone.%.2d", endx); @@ -2698,14 +2699,14 @@ static void skin_armature_bone_create(Object *skin_ob, ED_vgroup_vert_add(skin_ob, dg, v, 1, WEIGHT_REPLACE); } - skin_armature_bone_create(skin_ob, mvert, medge, arm, edges_visited, emap, bone, v); + skin_armature_bone_create(skin_ob, positions, medge, arm, edges_visited, emap, bone, v); } } 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 = me->verts(); + const Span<float3> me_positions = me->positions(); const Span<MEdge> me_edges = me->edges(); Scene *scene_eval = DEG_get_evaluated_scene(depsgraph); @@ -2713,7 +2714,7 @@ static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain, const Mesh *me_eval_deform = mesh_get_eval_deform( depsgraph, scene_eval, ob_eval, &CD_MASK_BAREMESH); - const Span<MVert> verts_eval = me_eval_deform->verts(); + const Span<float3> positions_eval = me_eval_deform->positions(); /* add vertex weights to original mesh */ CustomData_add_layer(&me->vdata, CD_MDEFORMVERT, CD_SET_DEFAULT, nullptr, me->totvert); @@ -2748,8 +2749,8 @@ static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain, if (emap[v].count > 1) { bone = ED_armature_ebone_add(arm, "Bone"); - copy_v3_v3(bone->head, me_verts[v].co); - copy_v3_v3(bone->tail, me_verts[v].co); + copy_v3_v3(bone->head, me_positions[v]); + copy_v3_v3(bone->tail, me_positions[v]); bone->head[1] = 1.0f; bone->rad_head = bone->rad_tail = 0.25; @@ -2757,7 +2758,7 @@ static Object *modifier_skin_armature_create(Depsgraph *depsgraph, Main *bmain, if (emap[v].count >= 1) { skin_armature_bone_create( - skin_ob, verts_eval.data(), me_edges.data(), arm, edges_visited, emap, bone, v); + skin_ob, positions_eval, me_edges.data(), arm, edges_visited, emap, bone, v); } } } diff --git a/source/blender/editors/object/object_remesh.cc b/source/blender/editors/object/object_remesh.cc index b9acf5ae27b..8c133dfecfa 100644 --- a/source/blender/editors/object/object_remesh.cc +++ b/source/blender/editors/object/object_remesh.cc @@ -73,6 +73,7 @@ #include "object_intern.h" /* own include */ +using blender::float3; using blender::IndexRange; using blender::Span; @@ -681,7 +682,7 @@ 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 = mesh->verts(); + const Span<float3> positions = mesh->positions(); const Span<MEdge> edges = mesh->edges(); const Span<MLoop> loops = mesh->loops(); @@ -719,9 +720,7 @@ static bool mesh_is_manifold_consistent(Mesh *mesh) break; } /* Check for zero length edges */ - const MVert &v1 = verts[edges[i].v1]; - const MVert &v2 = verts[edges[i].v2]; - if (compare_v3v3(v1.co, v2.co, 1e-4f)) { + if (compare_v3v3(positions[edges[i].v1], positions[edges[i].v2], 1e-4f)) { is_manifold_consistent = false; break; } diff --git a/source/blender/editors/object/object_vgroup.cc b/source/blender/editors/object/object_vgroup.cc index d3bdf8ca4d3..72b9b1b839c 100644 --- a/source/blender/editors/object/object_vgroup.cc +++ b/source/blender/editors/object/object_vgroup.cc @@ -68,6 +68,7 @@ #include "object_intern.h" +using blender::float3; using blender::MutableSpan; using blender::Span; @@ -1286,12 +1287,12 @@ static blender::Vector<int> getSurroundingVerts(Mesh *me, int vert) * coord is the place the average is stored, * points is the point cloud, count is the number of points in the cloud. */ -static void getSingleCoordinate(MVert *points, int count, float coord[3]) +static void getSingleCoordinate(float3 *points, int count, float coord[3]) { int i; zero_v3(coord); for (i = 0; i < count; i++) { - add_v3_v3(coord, points[i].co); + add_v3_v3(coord, points[i]); } mul_v3_fl(coord, 1.0f / count); } @@ -1357,7 +1358,7 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph, Mesh *me_deform; MDeformWeight *dw, *dw_eval; - MVert m; + float3 m; MDeformVert *dvert = me->deform_verts_for_write().data() + index; MDeformVert *dvert_eval = mesh_eval->deform_verts_for_write().data() + index; int totweight = dvert->totweight; @@ -1382,9 +1383,9 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph, do { wasChange = false; me_deform = mesh_get_eval_deform(depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH); - const Span<MVert> verts = me_deform->verts(); - m = verts[index]; - copy_v3_v3(oldPos, m.co); + const Span<float3> positions = me_deform->positions(); + m = positions[index]; + copy_v3_v3(oldPos, m); distToStart = dot_v3v3(norm, oldPos) + d; if (distToBe == originalDistToBe) { @@ -1425,9 +1426,8 @@ static void moveCloserToDistanceFromPlane(Depsgraph *depsgraph, } dw_eval->weight = dw->weight; me_deform = mesh_get_eval_deform(depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH); - m = verts[index]; - getVerticalAndHorizontalChange( - norm, d, coord, oldPos, distToStart, m.co, changes, dists, i); + m = positions[index]; + getVerticalAndHorizontalChange(norm, d, coord, oldPos, distToStart, m, changes, dists, i); dw->weight = oldw; dw_eval->weight = oldw; if (!k) { @@ -1531,28 +1531,27 @@ static void vgroup_fix( int i; Mesh *me = static_cast<Mesh *>(ob->data); - MVert *mvert = me->verts_for_write().data(); if (!(me->editflag & ME_EDIT_PAINT_VERT_SEL)) { return; } const bke::AttributeAccessor attributes = me->attributes(); const VArray<bool> select_vert = attributes.lookup_or_default<bool>( ".select_vert", ATTR_DOMAIN_POINT, false); - for (i = 0; i < me->totvert && mvert; i++, mvert++) { + for (i = 0; i < me->totvert; i++) { if (select_vert[i]) { blender::Vector<int> verts = getSurroundingVerts(me, i); const int count = verts.size(); if (!verts.is_empty()) { - MVert m; - MVert *p = static_cast<MVert *>(MEM_callocN(sizeof(MVert) * (count), "deformedPoints")); + float3 m; + float3 *p = static_cast<float3 *>(MEM_callocN(sizeof(float3) * (count), "deformedPoints")); int k; Mesh *me_deform = mesh_get_eval_deform( depsgraph, scene_eval, object_eval, &CD_MASK_BAREMESH); - const Span<MVert> verts_deform = me_deform->verts(); + const Span<float3> positions_deform = me_deform->positions(); k = count; while (k--) { - p[k] = verts_deform[verts[k]]; + p[k] = positions_deform[verts[k]]; } if (count >= 3) { @@ -1560,8 +1559,8 @@ static void vgroup_fix( float coord[3]; float norm[3]; getSingleCoordinate(p, count, coord); - m = verts_deform[i]; - sub_v3_v3v3(norm, m.co, coord); + m = positions_deform[i]; + sub_v3_v3v3(norm, m, coord); mag = normalize_v3(norm); if (mag) { /* zeros fix */ d = -dot_v3v3(norm, coord); |