Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'source/blender/modifiers/intern/MOD_armature.c')
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c124
1 files changed, 55 insertions, 69 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index ad8d6ac8b8a..b62c03d1b03 100644
--- a/source/blender/modifiers/intern/MOD_armature.c
+++ b/source/blender/modifiers/intern/MOD_armature.c
@@ -34,9 +34,9 @@
#include "DNA_screen_types.h"
#include "BKE_action.h"
+#include "BKE_armature.h"
#include "BKE_context.h"
#include "BKE_editmesh.h"
-#include "BKE_lattice.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_mesh.h"
@@ -49,6 +49,8 @@
#include "RNA_access.h"
+#include "BLO_read_write.h"
+
#include "DEG_depsgraph_query.h"
#include "bmesh.h"
@@ -74,7 +76,7 @@ static void copyData(const ModifierData *md, ModifierData *target, const int fla
ArmatureModifierData *tamd = (ArmatureModifierData *)target;
BKE_modifier_copydata_generic(md, target, flag);
- tamd->prevCos = NULL;
+ tamd->vert_coords_prev = NULL;
}
static void requiredDataMask(Object *UNUSED(ob),
@@ -146,88 +148,64 @@ static void deformVerts(ModifierData *md,
MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- armature_deform_verts(amd->object,
- ctx->object,
- mesh,
- vertexCos,
- NULL,
- numVerts,
- amd->deformflag,
- (float(*)[3])amd->prevCos,
- amd->defgrp_name,
- NULL);
+ BKE_armature_deform_coords_with_mesh(amd->object,
+ ctx->object,
+ vertexCos,
+ NULL,
+ numVerts,
+ amd->deformflag,
+ amd->vert_coords_prev,
+ amd->defgrp_name,
+ mesh);
/* free cache */
- if (amd->prevCos) {
- MEM_freeN(amd->prevCos);
- amd->prevCos = NULL;
- }
+ MEM_SAFE_FREE(amd->vert_coords_prev);
}
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- Mesh *mesh,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
-
- /* TODO(Campbell): use edit-mode data only (remove this line). */
- if (mesh_src != NULL) {
- BKE_mesh_wrapper_ensure_mdata(mesh_src);
- }
MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- armature_deform_verts(amd->object,
- ctx->object,
- mesh_src,
- vertexCos,
- NULL,
- numVerts,
- amd->deformflag,
- (float(*)[3])amd->prevCos,
- amd->defgrp_name,
- NULL);
+ BKE_armature_deform_coords_with_editmesh(amd->object,
+ ctx->object,
+ vertexCos,
+ NULL,
+ numVerts,
+ amd->deformflag,
+ amd->vert_coords_prev,
+ amd->defgrp_name,
+ em);
/* free cache */
- if (amd->prevCos) {
- MEM_freeN(amd->prevCos);
- amd->prevCos = NULL;
- }
-
- if (mesh_src != mesh) {
- BKE_id_free(NULL, mesh_src);
- }
+ MEM_SAFE_FREE(amd->vert_coords_prev);
}
static void deformMatricesEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- Mesh *mesh,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
float (*defMats)[3][3],
int numVerts)
{
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
-
- armature_deform_verts(amd->object,
- ctx->object,
- mesh_src,
- vertexCos,
- defMats,
- numVerts,
- amd->deformflag,
- NULL,
- amd->defgrp_name,
- NULL);
-
- if (mesh_src != mesh) {
- BKE_id_free(NULL, mesh_src);
- }
+
+ BKE_armature_deform_coords_with_editmesh(amd->object,
+ ctx->object,
+ vertexCos,
+ defMats,
+ numVerts,
+ amd->deformflag,
+ NULL,
+ amd->defgrp_name,
+ em);
}
static void deformMatrices(ModifierData *md,
@@ -240,16 +218,15 @@ static void deformMatrices(ModifierData *md,
ArmatureModifierData *amd = (ArmatureModifierData *)md;
Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, NULL, mesh, NULL, numVerts, false, false);
- armature_deform_verts(amd->object,
- ctx->object,
- mesh_src,
- vertexCos,
- defMats,
- numVerts,
- amd->deformflag,
- NULL,
- amd->defgrp_name,
- NULL);
+ BKE_armature_deform_coords_with_mesh(amd->object,
+ ctx->object,
+ vertexCos,
+ defMats,
+ numVerts,
+ amd->deformflag,
+ NULL,
+ amd->defgrp_name,
+ mesh_src);
if (!ELEM(mesh_src, NULL, mesh)) {
BKE_id_free(NULL, mesh_src);
@@ -274,7 +251,7 @@ static void panel_draw(const bContext *C, Panel *panel)
uiItemR(col, &ptr, "use_deform_preserve_volume", 0, NULL, ICON_NONE);
uiItemR(col, &ptr, "use_multi_modifier", 0, NULL, ICON_NONE);
- col = uiLayoutColumnWithHeading(layout, true, "Bind to");
+ col = uiLayoutColumnWithHeading(layout, true, IFACE_("Bind to"));
uiItemR(col, &ptr, "use_vertex_groups", 0, IFACE_("Vertex Groups"), ICON_NONE);
uiItemR(col, &ptr, "use_bone_envelopes", 0, IFACE_("Bone Envelopes"), ICON_NONE);
@@ -286,6 +263,13 @@ static void panelRegister(ARegionType *region_type)
modifier_panel_register(region_type, eModifierType_Armature, panel_draw);
}
+static void blendRead(BlendDataReader *UNUSED(reader), ModifierData *md)
+{
+ ArmatureModifierData *amd = (ArmatureModifierData *)md;
+
+ amd->vert_coords_prev = NULL;
+}
+
ModifierTypeInfo modifierType_Armature = {
/* name */ "Armature",
/* structName */ "ArmatureModifierData",
@@ -317,4 +301,6 @@ ModifierTypeInfo modifierType_Armature = {
/* foreachTexLink */ NULL,
/* freeRuntimeData */ NULL,
/* panelRegister */ panelRegister,
+ /* blendWrite */ NULL,
+ /* blendRead */ blendRead,
};