#include "BKE_tessmesh.h"
#include "BKE_report.h"
#include "BKE_DerivedMesh.h"
+#include "BKE_object_deform.h"
#include "RNA_access.h"
#include "RNA_define.h"
}
}
-/* TODO - select between groups */
static void vgroup_normalize_all(Object *ob, int lock_active)
{
MDeformVert *dv, **dvert_array = NULL;
ED_vgroup_give_parray(ob->data, &dvert_array, &dvert_tot, use_vert_sel);
if (dvert_array) {
- if (lock_active) {
+ const int defbase_tot = BLI_countlist(&ob->defbase);
+ char *lock_flags = BKE_objdef_lock_flags_get(ob, defbase_tot);
- for (i = 0; i < dvert_tot; i++) {
- /* in case its not selected */
- if (!(dv = dvert_array[i])) {
- continue;
- }
-
- defvert_normalize_lock(dv, def_nr);
- }
+ if ((lock_active == TRUE) &&
+ (lock_flags != NULL) &&
+ (def_nr < defbase_tot))
+ {
+ lock_flags[def_nr] = TRUE;
}
- else {
- for (i = 0; i < dvert_tot; i++) {
- /* in case its not selected */
- if (!(dv = dvert_array[i])) {
- continue;
+ for (i = 0; i < dvert_tot; i++) {
+ /* in case its not selected */
+ if ((dv = dvert_array[i])) {
+ if (lock_flags) {
+ defvert_normalize_lock_map(dv, lock_flags, defbase_tot);
+ }
+ else if (lock_active) {
+ defvert_normalize_lock_single(dv, def_nr);
+ }
+ else {
+ defvert_normalize(dv);
}
-
- defvert_normalize(dv);
}
}
+ if (lock_flags) {
+ MEM_freeN(lock_flags);
+ }
+
MEM_freeN(dvert_array);
}
}