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:
Diffstat (limited to 'source/blender/blenkernel/intern/mesh_fair.cc')
-rw-r--r--source/blender/blenkernel/intern/mesh_fair.cc19
1 files changed, 12 insertions, 7 deletions
diff --git a/source/blender/blenkernel/intern/mesh_fair.cc b/source/blender/blenkernel/intern/mesh_fair.cc
index 960e6c43103..0d865275a7f 100644
--- a/source/blender/blenkernel/intern/mesh_fair.cc
+++ b/source/blender/blenkernel/intern/mesh_fair.cc
@@ -27,6 +27,7 @@
#include "eigen_capi.h"
using blender::Array;
+using blender::float3;
using blender::Map;
using blender::MutableSpan;
using blender::Span;
@@ -191,12 +192,12 @@ class FairingContext {
class MeshFairingContext : public FairingContext {
public:
- MeshFairingContext(Mesh *mesh, MVert *deform_mverts)
+ MeshFairingContext(Mesh *mesh, MutableSpan<float3> deform_positions)
{
totvert_ = mesh->totvert;
totloop_ = mesh->totloop;
- MutableSpan<MVert> verts = mesh->verts_for_write();
+ MutableSpan<float3> positions = mesh->positions_for_write();
medge_ = mesh->edges();
mpoly_ = mesh->polys();
mloop_ = mesh->loops();
@@ -210,14 +211,14 @@ class MeshFairingContext : public FairingContext {
/* Deformation coords. */
co_.reserve(mesh->totvert);
- if (deform_mverts) {
+ if (!deform_positions.is_empty()) {
for (int i = 0; i < mesh->totvert; i++) {
- co_[i] = deform_mverts[i].co;
+ co_[i] = deform_positions[i];
}
}
else {
for (int i = 0; i < mesh->totvert; i++) {
- co_[i] = verts[i].co;
+ co_[i] = positions[i];
}
}
@@ -466,11 +467,15 @@ static void prefair_and_fair_verts(FairingContext *fairing_context,
}
void BKE_mesh_prefair_and_fair_verts(struct Mesh *mesh,
- struct MVert *deform_mverts,
+ float (*deform_positions)[3],
bool *affect_verts,
const eMeshFairingDepth depth)
{
- MeshFairingContext *fairing_context = new MeshFairingContext(mesh, deform_mverts);
+ MutableSpan<float3> deform_positions_span;
+ if (deform_positions) {
+ deform_positions_span = {reinterpret_cast<float3 *>(deform_positions), mesh->totvert};
+ }
+ MeshFairingContext *fairing_context = new MeshFairingContext(mesh, deform_positions_span);
prefair_and_fair_verts(fairing_context, affect_verts, depth);
delete fairing_context;
}