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')
-rw-r--r--source/blender/modifiers/intern/MOD_armature.c111
-rw-r--r--source/blender/modifiers/intern/MOD_curve.c61
-rw-r--r--source/blender/modifiers/intern/MOD_explode.c2
-rw-r--r--source/blender/modifiers/intern/MOD_lattice.c33
-rw-r--r--source/blender/modifiers/intern/MOD_particleinstance.c2
-rw-r--r--source/blender/modifiers/intern/MOD_util.c8
-rw-r--r--source/blender/modifiers/intern/MOD_util.h4
7 files changed, 105 insertions, 116 deletions
diff --git a/source/blender/modifiers/intern/MOD_armature.c b/source/blender/modifiers/intern/MOD_armature.c
index ad8d6ac8b8a..0cc0680804e 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"
@@ -74,7 +74,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 +146,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 +216,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);
diff --git a/source/blender/modifiers/intern/MOD_curve.c b/source/blender/modifiers/intern/MOD_curve.c
index a2348539779..a13bb07f678 100644
--- a/source/blender/modifiers/intern/MOD_curve.c
+++ b/source/blender/modifiers/intern/MOD_curve.c
@@ -33,8 +33,9 @@
#include "DNA_screen_types.h"
#include "BKE_context.h"
+#include "BKE_curve.h"
+#include "BKE_deform.h"
#include "BKE_editmesh.h"
-#include "BKE_lattice.h"
#include "BKE_lib_id.h"
#include "BKE_lib_query.h"
#include "BKE_mesh.h"
@@ -129,16 +130,17 @@ static void deformVerts(ModifierData *md,
int defgrp_index = -1;
MOD_get_vgroup(ctx->object, mesh_src, cmd->name, &dvert, &defgrp_index);
- /* silly that defaxis and curve_deform_verts are off by 1
+ /* Silly that defaxis and BKE_curve_deform_coords are off by 1
* but leave for now to save having to call do_versions */
- curve_deform_verts(cmd->object,
- ctx->object,
- vertexCos,
- numVerts,
- dvert,
- defgrp_index,
- cmd->flag,
- cmd->defaxis - 1);
+
+ BKE_curve_deform_coords(cmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ dvert,
+ defgrp_index,
+ cmd->flag,
+ cmd->defaxis - 1);
if (!ELEM(mesh_src, NULL, mesh)) {
BKE_id_free(NULL, mesh_src);
@@ -147,22 +149,41 @@ static void deformVerts(ModifierData *md,
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
- struct BMEditMesh *em,
- Mesh *mesh,
+ BMEditMesh *em,
+ Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
- Mesh *mesh_src = MOD_deform_mesh_eval_get(ctx->object, em, mesh, NULL, numVerts, false, false);
+ CurveModifierData *cmd = (CurveModifierData *)md;
+ bool use_dverts = false;
+ int defgrp_index = -1;
- /* TODO(Campbell): use edit-mode data only (remove this line). */
- if (mesh_src != NULL) {
- BKE_mesh_wrapper_ensure_mdata(mesh_src);
+ if (ctx->object->type == OB_MESH && cmd->name[0] != '\0') {
+ defgrp_index = BKE_object_defgroup_name_index(ctx->object, cmd->name);
+ if (defgrp_index != -1) {
+ use_dverts = true;
+ }
}
- deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
-
- if (!ELEM(mesh_src, NULL, mesh)) {
- BKE_id_free(NULL, mesh_src);
+ if (use_dverts) {
+ BKE_curve_deform_coords_with_editmesh(cmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ defgrp_index,
+ cmd->flag,
+ cmd->defaxis - 1,
+ em);
+ }
+ else {
+ BKE_curve_deform_coords(cmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ NULL,
+ defgrp_index,
+ cmd->flag,
+ cmd->defaxis - 1);
}
}
diff --git a/source/blender/modifiers/intern/MOD_explode.c b/source/blender/modifiers/intern/MOD_explode.c
index 0c1eedd429a..f2e476f85aa 100644
--- a/source/blender/modifiers/intern/MOD_explode.c
+++ b/source/blender/modifiers/intern/MOD_explode.c
@@ -1115,7 +1115,7 @@ static Mesh *explodeMesh(ExplodeModifierData *emd,
explode->runtime.cd_dirty_vert |= CD_MASK_NORMAL;
if (psmd->psys->lattice_deform_data) {
- end_latt_deform(psmd->psys->lattice_deform_data);
+ BKE_lattice_deform_data_destroy(psmd->psys->lattice_deform_data);
psmd->psys->lattice_deform_data = NULL;
}
diff --git a/source/blender/modifiers/intern/MOD_lattice.c b/source/blender/modifiers/intern/MOD_lattice.c
index 4d96638fc83..574ea969be4 100644
--- a/source/blender/modifiers/intern/MOD_lattice.c
+++ b/source/blender/modifiers/intern/MOD_lattice.c
@@ -113,14 +113,14 @@ static void deformVerts(ModifierData *md,
MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- lattice_deform_verts(lmd->object,
- ctx->object,
- mesh_src,
- vertexCos,
- numVerts,
- lmd->flag,
- lmd->name,
- lmd->strength);
+ BKE_lattice_deform_coords_with_mesh(lmd->object,
+ ctx->object,
+ vertexCos,
+ numVerts,
+ lmd->flag,
+ lmd->name,
+ lmd->strength,
+ mesh_src);
if (!ELEM(mesh_src, NULL, mesh)) {
BKE_id_free(NULL, mesh_src);
@@ -130,23 +130,16 @@ static void deformVerts(ModifierData *md,
static void deformVertsEM(ModifierData *md,
const ModifierEvalContext *ctx,
struct BMEditMesh *em,
- struct Mesh *mesh,
+ struct Mesh *UNUSED(mesh),
float (*vertexCos)[3],
int numVerts)
{
- struct 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);
- }
+ LatticeModifierData *lmd = (LatticeModifierData *)md;
- deformVerts(md, ctx, mesh_src, vertexCos, numVerts);
+ MOD_previous_vcos_store(md, vertexCos); /* if next modifier needs original vertices */
- if (!ELEM(mesh_src, NULL, mesh)) {
- BKE_id_free(NULL, mesh_src);
- }
+ BKE_lattice_deform_coords_with_editmesh(
+ lmd->object, ctx->object, vertexCos, numVerts, lmd->flag, lmd->name, lmd->strength, em);
}
static void panel_draw(const bContext *C, Panel *panel)
diff --git a/source/blender/modifiers/intern/MOD_particleinstance.c b/source/blender/modifiers/intern/MOD_particleinstance.c
index 0a9fb964281..62b28f22c17 100644
--- a/source/blender/modifiers/intern/MOD_particleinstance.c
+++ b/source/blender/modifiers/intern/MOD_particleinstance.c
@@ -542,7 +542,7 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh *
}
if (psys->lattice_deform_data) {
- end_latt_deform(psys->lattice_deform_data);
+ BKE_lattice_deform_data_destroy(psys->lattice_deform_data);
psys->lattice_deform_data = NULL;
}
diff --git a/source/blender/modifiers/intern/MOD_util.c b/source/blender/modifiers/intern/MOD_util.c
index 1aee545aa43..c6dff375109 100644
--- a/source/blender/modifiers/intern/MOD_util.c
+++ b/source/blender/modifiers/intern/MOD_util.c
@@ -169,12 +169,12 @@ void MOD_get_texture_coords(MappingInfoModifierData *dmd,
}
}
-void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3])
+void MOD_previous_vcos_store(ModifierData *md, const float (*vert_coords)[3])
{
while ((md = md->next) && md->type == eModifierType_Armature) {
ArmatureModifierData *amd = (ArmatureModifierData *)md;
- if (amd->multi && amd->prevCos == NULL) {
- amd->prevCos = MEM_dupallocN(vertexCos);
+ if (amd->multi && amd->vert_coords_prev == NULL) {
+ amd->vert_coords_prev = MEM_dupallocN(vert_coords);
}
else {
break;
@@ -187,7 +187,7 @@ void MOD_previous_vcos_store(ModifierData *md, float (*vertexCos)[3])
Mesh *MOD_deform_mesh_eval_get(Object *ob,
struct BMEditMesh *em,
Mesh *mesh,
- float (*vertexCos)[3],
+ const float (*vertexCos)[3],
const int num_verts,
const bool use_normals,
const bool use_orco)
diff --git a/source/blender/modifiers/intern/MOD_util.h b/source/blender/modifiers/intern/MOD_util.h
index 38e2083082d..a05e25d204c 100644
--- a/source/blender/modifiers/intern/MOD_util.h
+++ b/source/blender/modifiers/intern/MOD_util.h
@@ -40,12 +40,12 @@ void MOD_get_texture_coords(struct MappingInfoModifierData *dmd,
float (*cos)[3],
float (*r_texco)[3]);
-void MOD_previous_vcos_store(struct ModifierData *md, float (*vertexCos)[3]);
+void MOD_previous_vcos_store(struct ModifierData *md, const float (*vertexCos)[3]);
struct Mesh *MOD_deform_mesh_eval_get(struct Object *ob,
struct BMEditMesh *em,
struct Mesh *mesh,
- float (*vertexCos)[3],
+ const float (*vertexCos)[3],
const int num_verts,
const bool use_normals,
const bool use_orco);