Blender V5.0
BKE_deform.hh
Go to the documentation of this file.
1/* SPDX-FileCopyrightText: 2001-2002 NaN Holding BV. All rights reserved.
2 *
3 * SPDX-License-Identifier: GPL-2.0-or-later */
4
5#pragma once
6
9#include "BLI_span.hh"
10#include "BLI_string_ref.hh"
12
17
18struct BlendDataReader;
19struct BlendWriter;
20struct ID;
21struct ListBase;
22struct MDeformVert;
23struct MDeformWeight;
24struct Object;
25struct bDeformGroup;
26
27bool BKE_id_supports_vertex_groups(const ID *id);
31
40void BKE_object_defgroup_active_index_set(Object *ob, int new_index);
41
47const ListBase *BKE_id_defgroup_list_get(const ID *id);
53 int *r_index,
54 bDeformGroup **r_group);
55bool BKE_id_defgroup_name_find(const ID *id,
57 int *r_index,
58 bDeformGroup **r_group);
59
61void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase);
78int *BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num);
79
84 bool use_default,
85 int *r_flip_map_num);
90 bool use_default,
91 int defgroup,
92 int *r_flip_map_num);
93int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default);
96void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name);
97
98MDeformWeight *BKE_defvert_find_index(const MDeformVert *dv, int defgroup);
110void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight);
117void BKE_defvert_clear(MDeformVert *dvert);
122int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b);
126bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot);
127
128void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert);
129void BKE_defvert_array_free(MDeformVert *dvert, int totvert);
130void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert);
131
132float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup);
141 int index,
142 int defgroup,
143 bool invert);
144
149 int defbase_num,
150 const bool *defbase_sel);
151
161 int defbase_num,
162 const bool *defbase_sel,
163 int defbase_sel_num,
164 bool is_normalized);
165
166/* This much unlocked weight is considered equivalent to none. */
167#define VERTEX_WEIGHT_LOCK_EPSILON 1e-6f
168
175 float locked_weight,
176 float unlocked_weight);
182float BKE_defvert_lock_relative_weight(float weight,
183 const MDeformVert *dv,
184 int defbase_num,
185 const bool *defbase_locked,
186 const bool *defbase_unlocked);
187
188void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src);
195 const MDeformVert *dvert_src,
196 const bool *vgroup_subset,
197 int vgroup_num);
204 const MDeformVert *dvert_src,
205 const bool *vgroup_subset,
206 int vgroup_num,
207 const int *flip_map,
208 int flip_map_num);
214void BKE_defvert_copy_index(MDeformVert *dvert_dst,
215 int defgroup_dst,
216 const MDeformVert *dvert_src,
217 int defgroup_src);
222void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure);
227 const MDeformVert *dvert_src,
228 const int *flip_map,
229 int flip_map_num,
230 bool use_ensure);
234void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len);
235void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num);
236void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num);
237
247
257
265 blender::Span<bool> subset_flags,
266 blender::Span<bool> lock_flags);
267
298 blender::Span<bool> vgroup_subset,
299 blender::Span<bool> lock_flags,
300 blender::Span<bool> soft_lock_flags);
301
302/* Utilities to 'extract' a given vgroup into a simple float array,
303 * for verts, but also edges/faces/loops. */
304
306 const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights);
307
313 int defgroup,
314 int verts_num,
316 bool invert_vgroup,
317 float *r_weights);
319 int defgroup,
320 int verts_num,
321 blender::Span<int> corner_verts,
322 bool invert_vgroup,
323 float *r_weights);
324
326 int defgroup,
327 int verts_num,
328 const blender::Span<int> corner_verts,
330 bool invert_vgroup,
331 float *r_weights);
332
333void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight);
334
335void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist);
336void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts);
337void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase);
338
339namespace blender::bke {
340
343 int defgroup_index);
344void remove_defgroup_index(MutableSpan<MDeformVert> dverts, int defgroup_index);
345
348 const IndexMask &indices,
350
351} // namespace blender::bke
void BKE_defvert_copy_index(MDeformVert *dvert_dst, int defgroup_dst, const MDeformVert *dvert_src, int defgroup_src)
Definition deform.cc:150
void BKE_object_defgroup_active_index_set(Object *ob, int new_index)
Definition deform.cc:612
void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist)
Definition deform.cc:1602
void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase)
Definition deform.cc:1595
ListBase * BKE_id_defgroup_list_get_mutable(ID *id)
Definition deform.cc:520
void BKE_defvert_array_free(MDeformVert *dvert, int totvert)
Definition deform.cc:1074
void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert)
Definition deform.cc:1038
void BKE_defvert_sync_mapped(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const int *flip_map, int flip_map_num, bool use_ensure)
Definition deform.cc:194
void BKE_defvert_extract_vgroup_to_edgeweights(const MDeformVert *dvert, int defgroup, int verts_num, blender::Span< blender::int2 > edges, bool invert_vgroup, float *r_weights)
Definition deform.cc:1108
bool BKE_id_supports_vertex_groups(const ID *id)
Definition deform.cc:455
int BKE_object_defgroup_active_index_get(const Object *ob)
Definition deform.cc:607
void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:416
float BKE_defvert_lock_relative_weight(float weight, const MDeformVert *dv, int defbase_num, const bool *defbase_locked, const bool *defbase_unlocked)
Definition deform.cc:1017
bool BKE_defgroup_listbase_name_find(const ListBase *defbase, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:554
bool BKE_id_defgroup_name_find(const ID *id, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:577
bDeformGroup * BKE_defgroup_duplicate(const bDeformGroup *ingroup)
Definition deform.cc:82
void BKE_defvert_extract_vgroup_to_loopweights(const MDeformVert *dvert, int defgroup, int verts_num, blender::Span< int > corner_verts, bool invert_vgroup, float *r_weights)
Definition deform.cc:1135
bDeformGroup * BKE_object_defgroup_new(Object *ob, blender::StringRef name)
Definition deform.cc:48
bool BKE_object_supports_vertex_groups(const Object *ob)
Definition deform.cc:463
void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight)
Definition deform.cc:856
int BKE_object_defgroup_count(const Object *ob)
Definition deform.cc:602
void BKE_defvert_mirror_subset(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const bool *vgroup_subset, int vgroup_num, const int *flip_map, int flip_map_num)
Definition deform.cc:112
void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len)
Definition deform.cc:220
bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot)
Definition deform.cc:936
int BKE_defgroup_name_index(const ListBase *defbase, blender::StringRef name)
Definition deform.cc:540
const ListBase * BKE_object_defgroup_list(const Object *ob)
Definition deform.cc:585
int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default)
Definition deform.cc:714
float BKE_defvert_calc_lock_relative_weight(float weight, float locked_weight, float unlocked_weight)
Definition deform.cc:989
void BKE_defvert_normalize(MDeformVert &dvert)
Definition deform.cc:237
MDeformWeight * BKE_defvert_ensure_index(MDeformVert *dv, int defgroup)
Definition deform.cc:825
float BKE_defvert_array_find_weight_safe(const MDeformVert *dvert, int index, int defgroup, bool invert)
Definition deform.cc:780
int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b)
Definition deform.cc:920
void BKE_defvert_extract_vgroup_to_faceweights(const MDeformVert *dvert, int defgroup, int verts_num, const blender::Span< int > corner_verts, blender::OffsetIndices< int > faces, bool invert_vgroup, float *r_weights)
Definition deform.cc:1160
void BKE_object_defgroup_unique_name(bDeformGroup *dg, Object *ob)
Definition deform.cc:752
void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert)
Definition deform.cc:1056
float BKE_defvert_total_selected_weight(const MDeformVert *dv, int defbase_num, const bool *defbase_sel)
Definition deform.cc:950
void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase)
Definition deform.cc:73
int * BKE_object_defgroup_flip_map_single(const Object *ob, bool use_default, int defgroup, int *r_flip_map_num)
Definition deform.cc:679
MDeformWeight * BKE_defvert_find_index(const MDeformVert *dv, int defgroup)
Definition deform.cc:806
int BKE_id_defgroup_name_index(const ID *id, blender::StringRef name)
Definition deform.cc:549
void BKE_defvert_clear(MDeformVert *dvert)
Definition deform.cc:913
ListBase * BKE_object_defgroup_list_mutable(Object *ob)
Definition deform.cc:596
void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight)
Definition deform.cc:1556
float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup)
Definition deform.cc:774
void BKE_defvert_extract_vgroup_to_vertweights(const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1089
void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure)
Definition deform.cc:174
bDeformGroup * BKE_object_defgroup_find_name(const Object *ob, blender::StringRef name)
Definition deform.cc:526
void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts)
Definition deform.cc:1619
void BKE_defvert_copy_subset(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const bool *vgroup_subset, int vgroup_num)
Definition deform.cc:99
int * BKE_object_defgroup_flip_map_unlocked(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:672
void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src)
Definition deform.cc:127
void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:430
void BKE_defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw)
Definition deform.cc:880
int * BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:667
void BKE_defvert_normalize_lock_map(MDeformVert &dvert, blender::Span< bool > subset_flags, blender::Span< bool > lock_flags)
Definition deform.cc:242
int BKE_object_defgroup_name_index(const Object *ob, blender::StringRef name)
Definition deform.cc:591
const ListBase * BKE_id_defgroup_list_get(const ID *id)
Definition deform.cc:470
void BKE_defvert_normalize_subset(MDeformVert &dvert, blender::Span< bool > subset_flags)
Definition deform.cc:232
void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name)
Definition deform.cc:762
float BKE_defvert_multipaint_collective_weight(const MDeformVert *dv, int defbase_num, const bool *defbase_sel, int defbase_sel_num, bool is_normalized)
Definition deform.cc:972
void BKE_defvert_normalize_ex(MDeformVert &dvert, blender::Span< bool > vgroup_subset, blender::Span< bool > lock_flags, blender::Span< bool > soft_lock_flags)
Definition deform.cc:249
static ushort indices[]
int count
CCL_NAMESPACE_BEGIN ccl_device float invert(const float color, const float factor)
Definition invert.h:11
static char faces[256]
void remove_defgroup_index(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1753
void gather_deform_verts(Span< MDeformVert > src, Span< int > indices, MutableSpan< MDeformVert > dst)
Definition deform.cc:1768
VMutableArray< float > varray_for_mutable_deform_verts(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1747
VArray< float > varray_for_deform_verts(Span< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1743
const char * name
Definition DNA_ID.h:414