Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_mask.cc
| /* SPDX-License-Identifier: GPL-2.0-or-later | /* SPDX-License-Identifier: GPL-2.0-or-later | ||||
| * Copyright 2005 Blender Foundation. All rights reserved. */ | * Copyright 2005 Blender Foundation. All rights reserved. */ | ||||
| /** \file | /** \file | ||||
| * \ingroup modifiers | * \ingroup modifiers | ||||
| */ | */ | ||||
| #include "MEM_guardedalloc.h" | #include "MEM_guardedalloc.h" | ||||
| #include "BLI_utildefines.h" | #include "BLI_utildefines.h" | ||||
| #include "BLI_array_utils.hh" | |||||
| #include "BLI_ghash.h" | #include "BLI_ghash.h" | ||||
| #include "BLI_listbase.h" | #include "BLI_listbase.h" | ||||
| #include "BLI_math.h" | #include "BLI_math.h" | ||||
| #include "BLT_translation.h" | #include "BLT_translation.h" | ||||
| #include "DNA_armature_types.h" | #include "DNA_armature_types.h" | ||||
| #include "DNA_defaults.h" | #include "DNA_defaults.h" | ||||
| ▲ Show 20 Lines • Show All 109 Lines • ▼ Show 20 Lines | static void compute_vertex_mask__vertex_group_mode(const MDeformVert *dvert, | ||||
| MutableSpan<bool> r_vertex_mask) | MutableSpan<bool> r_vertex_mask) | ||||
| { | { | ||||
| for (int i : r_vertex_mask.index_range()) { | for (int i : r_vertex_mask.index_range()) { | ||||
| const bool found = BKE_defvert_find_weight(&dvert[i], defgrp_index) > threshold; | const bool found = BKE_defvert_find_weight(&dvert[i], defgrp_index) > threshold; | ||||
| r_vertex_mask[i] = found; | r_vertex_mask[i] = found; | ||||
| } | } | ||||
| } | } | ||||
| static void invert_boolean_array(MutableSpan<bool> array) | |||||
| { | |||||
| for (bool &value : array) { | |||||
| value = !value; | |||||
| } | |||||
| } | |||||
| static void compute_masked_verts(Span<bool> vertex_mask, | static void compute_masked_verts(Span<bool> vertex_mask, | ||||
| MutableSpan<int> r_vertex_map, | MutableSpan<int> r_vertex_map, | ||||
| uint *r_verts_masked_num) | uint *r_verts_masked_num) | ||||
| { | { | ||||
| BLI_assert(vertex_mask.size() == r_vertex_map.size()); | BLI_assert(vertex_mask.size() == r_vertex_map.size()); | ||||
| uint verts_masked_num = 0; | uint verts_masked_num = 0; | ||||
| for (uint i_src : r_vertex_map.index_range()) { | for (uint i_src : r_vertex_map.index_range()) { | ||||
| ▲ Show 20 Lines • Show All 528 Lines • ▼ Show 20 Lines | else { | ||||
| } | } | ||||
| vertex_mask = Array<bool>(mesh->totvert); | vertex_mask = Array<bool>(mesh->totvert); | ||||
| compute_vertex_mask__vertex_group_mode( | compute_vertex_mask__vertex_group_mode( | ||||
| dverts.data(), defgrp_index, mmd->threshold, vertex_mask); | dverts.data(), defgrp_index, mmd->threshold, vertex_mask); | ||||
| } | } | ||||
| if (invert_mask) { | if (invert_mask) { | ||||
| invert_boolean_array(vertex_mask); | blender::array_utils::invert_booleans(vertex_mask); | ||||
| } | } | ||||
| Array<int> vertex_map(mesh->totvert); | Array<int> vertex_map(mesh->totvert); | ||||
| uint verts_masked_num; | uint verts_masked_num; | ||||
| compute_masked_verts(vertex_mask, vertex_map, &verts_masked_num); | compute_masked_verts(vertex_mask, vertex_map, &verts_masked_num); | ||||
| Array<int> edge_map(mesh->totedge); | Array<int> edge_map(mesh->totedge); | ||||
| uint edges_masked_num; | uint edges_masked_num; | ||||
| ▲ Show 20 Lines • Show All 165 Lines • Show Last 20 Lines | |||||