Fix #109043: Mask modifier smooth option broken
Caused by two mistakes in 16fbadde36.
Fix the naming too, which was confusing and
non-standard before.
This commit is contained in:
@@ -5,6 +5,8 @@
|
||||
* \ingroup modifiers
|
||||
*/
|
||||
|
||||
#define DNA_DEPRECATED_ALLOW
|
||||
|
||||
#include "MEM_guardedalloc.h"
|
||||
|
||||
#include "BLI_utildefines.h"
|
||||
@@ -297,7 +299,7 @@ static void compute_interpolated_polys(const Mesh *mesh,
|
||||
int last_corner_vert = corner_verts[start];
|
||||
bool v_loop_in_mask_last = vertex_mask[last_corner_vert];
|
||||
for (const int j : poly_verts_src.index_range()) {
|
||||
const int corner_vert = corner_verts[(start + 1 + j) % poly_src.size()];
|
||||
const int corner_vert = poly_verts_src[(start + 1 + j) % poly_src.size()];
|
||||
const bool v_loop_in_mask = vertex_mask[corner_vert];
|
||||
if (v_loop_in_mask && !v_loop_in_mask_last) {
|
||||
dst_totloop = 3;
|
||||
@@ -513,9 +515,10 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh,
|
||||
/* Ring search starting at a vertex which is not included in the mask. */
|
||||
int start = -sub_poly_index - 1;
|
||||
bool skip = false;
|
||||
Span<int> corner_verts_src(&src_corner_verts[i_ml_src], src_poly.size());
|
||||
for (const int j : corner_verts_src.index_range()) {
|
||||
if (!vertex_mask[corner_verts_src[j]]) {
|
||||
const Span<int> poly_verts_src = src_corner_verts.slice(src_poly);
|
||||
const Span<int> poly_edges_src = src_corner_edges.slice(src_poly);
|
||||
for (const int j : poly_verts_src.index_range()) {
|
||||
if (!vertex_mask[poly_verts_src[j]]) {
|
||||
if (start == -1) {
|
||||
start = j;
|
||||
break;
|
||||
@@ -533,47 +536,39 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh,
|
||||
BLI_assert(start >= 0);
|
||||
BLI_assert(edge_index < dst_mesh.totedge);
|
||||
|
||||
int last_corner_i = start;
|
||||
bool v_loop_in_mask_last = vertex_mask[src_corner_verts[last_corner_i]];
|
||||
int last_index = start;
|
||||
for (const int j : corner_verts_src.index_range()) {
|
||||
bool v_loop_in_mask_last = vertex_mask[poly_verts_src[last_index]];
|
||||
for (const int j : poly_verts_src.index_range()) {
|
||||
const int index = (start + 1 + j) % src_poly.size();
|
||||
const bool v_loop_in_mask = vertex_mask[src_corner_verts[index]];
|
||||
const bool v_loop_in_mask = vertex_mask[poly_verts_src[index]];
|
||||
if (v_loop_in_mask && !v_loop_in_mask_last) {
|
||||
/* Start new cut. */
|
||||
float fac = get_interp_factor_from_vgroup(dvert,
|
||||
defgrp_index,
|
||||
threshold,
|
||||
src_corner_verts[last_corner_i],
|
||||
src_corner_verts[index]);
|
||||
float fac = get_interp_factor_from_vgroup(
|
||||
dvert, defgrp_index, threshold, poly_verts_src[last_index], poly_verts_src[index]);
|
||||
float weights[2] = {1.0f - fac, fac};
|
||||
int indices[2] = {i_ml_src + last_index, i_ml_src + index};
|
||||
CustomData_interp(
|
||||
&src_mesh.ldata, &dst_mesh.ldata, indices, weights, nullptr, 2, i_ml_dst);
|
||||
dst_corner_edges[i_ml_dst] = edge_map[src_corner_edges[last_corner_i]];
|
||||
dst_corner_edges[i_ml_dst] = edge_map[poly_edges_src[last_index]];
|
||||
dst_corner_verts[i_ml_dst] = dst_edges[dst_corner_edges[i_ml_dst]][0];
|
||||
i_ml_dst++;
|
||||
|
||||
CustomData_copy_data(&src_mesh.ldata, &dst_mesh.ldata, i_ml_src + index, i_ml_dst, 1);
|
||||
dst_corner_verts[i_ml_dst] = vertex_map[src_corner_verts[index]];
|
||||
dst_corner_edges[i_ml_dst] = edge_map[src_corner_edges[index]];
|
||||
dst_corner_verts[i_ml_dst] = vertex_map[poly_verts_src[index]];
|
||||
dst_corner_edges[i_ml_dst] = edge_map[poly_edges_src[index]];
|
||||
i_ml_dst++;
|
||||
}
|
||||
else if (!v_loop_in_mask && v_loop_in_mask_last) {
|
||||
BLI_assert(i_ml_dst != dst_poly_offsets[i_dst]);
|
||||
/* End active cut. */
|
||||
float fac = get_interp_factor_from_vgroup(dvert,
|
||||
defgrp_index,
|
||||
threshold,
|
||||
src_corner_verts[last_corner_i],
|
||||
src_corner_verts[index]);
|
||||
float fac = get_interp_factor_from_vgroup(
|
||||
dvert, defgrp_index, threshold, poly_verts_src[last_index], poly_verts_src[index]);
|
||||
float weights[2] = {1.0f - fac, fac};
|
||||
int indices[2] = {i_ml_src + last_index, i_ml_src + index};
|
||||
CustomData_interp(
|
||||
&src_mesh.ldata, &dst_mesh.ldata, indices, weights, nullptr, 2, i_ml_dst);
|
||||
dst_corner_edges[i_ml_dst] = edge_index;
|
||||
dst_corner_verts[i_ml_dst] = dst_edges[edge_map[src_corner_edges[last_corner_i]]][0];
|
||||
i_ml_dst++;
|
||||
dst_corner_verts[i_ml_dst] = dst_edges[edge_map[poly_edges_src[last_index]]][0];
|
||||
|
||||
/* Create closing edge. */
|
||||
int2 &cut_edge = dst_edges[edge_index];
|
||||
@@ -581,6 +576,7 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh,
|
||||
cut_edge[1] = dst_corner_verts[i_ml_dst];
|
||||
BLI_assert(cut_edge[0] != cut_edge[1]);
|
||||
edge_index++;
|
||||
i_ml_dst++;
|
||||
|
||||
/* Only handle one of the cuts per iteration. */
|
||||
break;
|
||||
@@ -589,11 +585,10 @@ static void add_interpolated_polys_to_new_mesh(const Mesh &src_mesh,
|
||||
BLI_assert(i_ml_dst != dst_poly_offsets[i_dst]);
|
||||
/* Extend active poly. */
|
||||
CustomData_copy_data(&src_mesh.ldata, &dst_mesh.ldata, i_ml_src + index, i_ml_dst, 1);
|
||||
dst_corner_verts[i_ml_dst] = vertex_map[src_corner_verts[index]];
|
||||
dst_corner_edges[i_ml_dst] = edge_map[src_corner_edges[index]];
|
||||
dst_corner_verts[i_ml_dst] = vertex_map[poly_verts_src[index]];
|
||||
dst_corner_edges[i_ml_dst] = edge_map[poly_edges_src[index]];
|
||||
i_ml_dst++;
|
||||
}
|
||||
last_corner_i = index;
|
||||
last_index = index;
|
||||
v_loop_in_mask_last = v_loop_in_mask;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user