Blender V4.3
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_string_ref.hh"
11
17struct BlendDataReader;
18struct BlendWriter;
19struct ID;
20struct ListBase;
21struct MDeformVert;
22struct MDeformWeight;
23struct Object;
24struct bDeformGroup;
25
26bool BKE_id_supports_vertex_groups(const ID *id);
30
39void BKE_object_defgroup_active_index_set(Object *ob, int new_index);
40
46const ListBase *BKE_id_defgroup_list_get(const ID *id);
52 int *r_index,
53 bDeformGroup **r_group);
54bool BKE_id_defgroup_name_find(const ID *id,
56 int *r_index,
57 bDeformGroup **r_group);
58
60void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase);
77int *BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num);
78
83 bool use_default,
84 int *r_flip_map_num);
89 bool use_default,
90 int defgroup,
91 int *r_flip_map_num);
92int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default);
95void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name);
96
97MDeformWeight *BKE_defvert_find_index(const MDeformVert *dv, int defgroup);
109void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight);
116void BKE_defvert_clear(MDeformVert *dvert);
121int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b);
125bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot);
126
127void BKE_defvert_array_free_elems(MDeformVert *dvert, int totvert);
128void BKE_defvert_array_free(MDeformVert *dvert, int totvert);
129void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert);
130
131float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup);
139float BKE_defvert_array_find_weight_safe(const MDeformVert *dvert, int index, int defgroup);
140
145 int defbase_num,
146 const bool *defbase_sel);
147
157 int defbase_num,
158 const bool *defbase_sel,
159 int defbase_sel_num,
160 bool is_normalized);
161
162/* This much unlocked weight is considered equivalent to none. */
163#define VERTEX_WEIGHT_LOCK_EPSILON 1e-6f
164
171 float locked_weight,
172 float unlocked_weight);
178float BKE_defvert_lock_relative_weight(float weight,
179 const MDeformVert *dv,
180 int defbase_num,
181 const bool *defbase_locked,
182 const bool *defbase_unlocked);
183
184void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src);
191 const MDeformVert *dvert_src,
192 const bool *vgroup_subset,
193 int vgroup_num);
200 const MDeformVert *dvert_src,
201 const bool *vgroup_subset,
202 int vgroup_num,
203 const int *flip_map,
204 int flip_map_num);
210void BKE_defvert_copy_index(MDeformVert *dvert_dst,
211 int defgroup_dst,
212 const MDeformVert *dvert_src,
213 int defgroup_src);
218void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure);
223 const MDeformVert *dvert_src,
224 const int *flip_map,
225 int flip_map_num,
226 bool use_ensure);
230void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len);
231void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num);
232void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num);
237void BKE_defvert_normalize_subset(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num);
242 const bool *vgroup_subset,
243 int vgroup_num,
244 uint def_nr_lock);
249 const bool *vgroup_subset,
250 int vgroup_num,
251 const bool *lock_flags,
252 int defbase_num);
253
254/* Utilities to 'extract' a given vgroup into a simple float array,
255 * for verts, but also edges/faces/loops. */
256
258 const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights);
259
265 int defgroup,
266 int verts_num,
267 const blender::int2 *edges,
268 int edges_num,
269 bool invert_vgroup,
270 float *r_weights);
272 int defgroup,
273 int verts_num,
274 const int *corner_verts,
275 int loops_num,
276 bool invert_vgroup,
277 float *r_weights);
278
280 int defgroup,
281 int verts_num,
282 const int *corner_verts,
283 int loops_num,
285 bool invert_vgroup,
286 float *r_weights);
287
288void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight);
289
290void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist);
291void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts);
292void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase);
293
294namespace blender::bke {
295
296VArray<float> varray_for_deform_verts(Span<MDeformVert> dverts, int defgroup_index);
297VMutableArray<float> varray_for_mutable_deform_verts(MutableSpan<MDeformVert> dverts,
298 int defgroup_index);
299void remove_defgroup_index(MutableSpan<MDeformVert> dverts, int defgroup_index);
300
301void gather_deform_verts(Span<MDeformVert> src, Span<int> indices, MutableSpan<MDeformVert> dst);
302void gather_deform_verts(Span<MDeformVert> src,
303 const IndexMask &indices,
304 MutableSpan<MDeformVert> dst);
305
306} // namespace blender::bke
void BKE_defvert_extract_vgroup_to_faceweights(const MDeformVert *dvert, int defgroup, int verts_num, const int *corner_verts, int loops_num, blender::OffsetIndices< int > faces, bool invert_vgroup, float *r_weights)
Definition deform.cc:1156
void BKE_defvert_copy_index(MDeformVert *dvert_dst, int defgroup_dst, const MDeformVert *dvert_src, int defgroup_src)
Definition deform.cc:153
void BKE_object_defgroup_active_index_set(Object *ob, int new_index)
Definition deform.cc:606
void BKE_defvert_blend_write(BlendWriter *writer, int count, const MDeformVert *dvlist)
Definition deform.cc:1642
void BKE_defbase_blend_write(BlendWriter *writer, const ListBase *defbase)
Definition deform.cc:1635
ListBase * BKE_id_defgroup_list_get_mutable(ID *id)
Definition deform.cc:514
void BKE_defvert_array_free(MDeformVert *dvert, int totvert)
Definition deform.cc:1066
void BKE_defvert_array_copy(MDeformVert *dst, const MDeformVert *src, int totvert)
Definition deform.cc:1029
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:197
void BKE_defvert_normalize_lock_single(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num, uint def_nr_lock)
Definition deform.cc:301
bool BKE_id_supports_vertex_groups(const ID *id)
Definition deform.cc:449
int BKE_object_defgroup_active_index_get(const Object *ob)
Definition deform.cc:601
void BKE_defvert_flip(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:410
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:1008
void BKE_defvert_normalize(MDeformVert *dvert)
Definition deform.cc:272
bool BKE_defgroup_listbase_name_find(const ListBase *defbase, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:548
bool BKE_id_defgroup_name_find(const ID *id, blender::StringRef name, int *r_index, bDeformGroup **r_group)
Definition deform.cc:571
void BKE_defvert_extract_vgroup_to_edgeweights(const MDeformVert *dvert, int defgroup, int verts_num, const blender::int2 *edges, int edges_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1100
bDeformGroup * BKE_defgroup_duplicate(const bDeformGroup *ingroup)
Definition deform.cc:85
bDeformGroup * BKE_object_defgroup_new(Object *ob, blender::StringRef name)
Definition deform.cc:51
bool BKE_object_supports_vertex_groups(const Object *ob)
Definition deform.cc:457
void BKE_defvert_add_index_notest(MDeformVert *dv, int defgroup, float weight)
Definition deform.cc:846
int BKE_object_defgroup_count(const Object *ob)
Definition deform.cc:596
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:115
void BKE_defvert_remap(MDeformVert *dvert, const int *map, int map_len)
Definition deform.cc:223
void BKE_defvert_normalize_subset(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num)
Definition deform.cc:235
bool BKE_defvert_is_weight_zero(const MDeformVert *dvert, int defgroup_tot)
Definition deform.cc:927
int BKE_defgroup_name_index(const ListBase *defbase, blender::StringRef name)
Definition deform.cc:534
const ListBase * BKE_object_defgroup_list(const Object *ob)
Definition deform.cc:579
int BKE_object_defgroup_flip_index(const Object *ob, int index, bool use_default)
Definition deform.cc:708
float BKE_defvert_calc_lock_relative_weight(float weight, float locked_weight, float unlocked_weight)
Definition deform.cc:980
MDeformWeight * BKE_defvert_ensure_index(MDeformVert *dv, int defgroup)
Definition deform.cc:814
int BKE_defvert_find_shared(const MDeformVert *dvert_a, const MDeformVert *dvert_b)
Definition deform.cc:911
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:1048
float BKE_defvert_total_selected_weight(const MDeformVert *dv, int defbase_num, const bool *defbase_sel)
Definition deform.cc:941
void BKE_defgroup_copy_list(ListBase *outbase, const ListBase *inbase)
Definition deform.cc:76
int * BKE_object_defgroup_flip_map_single(const Object *ob, bool use_default, int defgroup, int *r_flip_map_num)
Definition deform.cc:673
void BKE_defvert_extract_vgroup_to_loopweights(const MDeformVert *dvert, int defgroup, int verts_num, const int *corner_verts, int loops_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1129
MDeformWeight * BKE_defvert_find_index(const MDeformVert *dv, int defgroup)
Definition deform.cc:795
int BKE_id_defgroup_name_index(const ID *id, blender::StringRef name)
Definition deform.cc:543
void BKE_defvert_clear(MDeformVert *dvert)
Definition deform.cc:904
ListBase * BKE_object_defgroup_list_mutable(Object *ob)
Definition deform.cc:590
void BKE_defvert_weight_to_rgb(float r_rgb[3], float weight)
Definition deform.cc:1596
float BKE_defvert_find_weight(const MDeformVert *dvert, int defgroup)
Definition deform.cc:770
void BKE_defvert_extract_vgroup_to_vertweights(const MDeformVert *dvert, int defgroup, int verts_num, bool invert_vgroup, float *r_weights)
Definition deform.cc:1081
void BKE_defvert_sync(MDeformVert *dvert_dst, const MDeformVert *dvert_src, bool use_ensure)
Definition deform.cc:177
bDeformGroup * BKE_object_defgroup_find_name(const Object *ob, blender::StringRef name)
Definition deform.cc:520
void BKE_defvert_blend_read(BlendDataReader *reader, int count, MDeformVert *mdverts)
Definition deform.cc:1659
void BKE_defvert_copy_subset(MDeformVert *dvert_dst, const MDeformVert *dvert_src, const bool *vgroup_subset, int vgroup_num)
Definition deform.cc:102
int * BKE_object_defgroup_flip_map_unlocked(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:666
float BKE_defvert_array_find_weight_safe(const MDeformVert *dvert, int index, int defgroup)
Definition deform.cc:776
void BKE_defvert_copy(MDeformVert *dvert_dst, const MDeformVert *dvert_src)
Definition deform.cc:130
void BKE_defvert_flip_merged(MDeformVert *dvert, const int *flip_map, int flip_map_num)
Definition deform.cc:424
void BKE_defvert_remove_group(MDeformVert *dvert, MDeformWeight *dw)
Definition deform.cc:871
void BKE_defvert_normalize_lock_map(MDeformVert *dvert, const bool *vgroup_subset, int vgroup_num, const bool *lock_flags, int defbase_num)
Definition deform.cc:355
int * BKE_object_defgroup_flip_map(const Object *ob, bool use_default, int *r_flip_map_num)
Definition deform.cc:661
int BKE_object_defgroup_name_index(const Object *ob, blender::StringRef name)
Definition deform.cc:585
const ListBase * BKE_id_defgroup_list_get(const ID *id)
Definition deform.cc:464
void BKE_object_defgroup_set_name(bDeformGroup *dg, Object *ob, const char *new_name)
Definition deform.cc:758
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:963
unsigned int uint
int count
void remove_defgroup_index(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1796
void gather_deform_verts(Span< MDeformVert > src, Span< int > indices, MutableSpan< MDeformVert > dst)
Definition deform.cc:1811
VMutableArray< float > varray_for_mutable_deform_verts(MutableSpan< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1790
VArray< float > varray_for_deform_verts(Span< MDeformVert > dverts, int defgroup_index)
Definition deform.cc:1786
Definition DNA_ID.h:413