Cleanup/refactor: Move get_mesh_eval_for_modifier from MOD_util to BKE_modifier.

Because some modifiers' actual code is in BKE... Also renamed to more
BKE-valid name BKE_modifier_get_evaluated_mesh_from_object.
This commit is contained in:
Bastien Montagne 2018-05-09 12:44:22 +02:00
parent 1cc7d7d5ec
commit e53cf14280
8 changed files with 21 additions and 22 deletions

View File

@ -548,5 +548,7 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(
struct ModifierData *md, const struct ModifierEvalContext *ctx,
struct BMEditMesh *editData, struct DerivedMesh *dm);
struct Mesh *BKE_modifier_get_evaluated_mesh_from_object(struct Object *ob, const ModifierApplyFlag flag);
#endif

View File

@ -1164,3 +1164,16 @@ struct DerivedMesh *modifier_applyModifierEM_DM_deprecated(struct ModifierData *
}
}
/** Get evaluated mesh for other object, which is used as an operand for the modifier,
* i.e. second operand for boolean modifier.
*/
Mesh *BKE_modifier_get_evaluated_mesh_from_object(Object *ob, const ModifierApplyFlag flag)
{
if (flag & MOD_APPLY_RENDER) {
/* TODO(sergey): Use proper derived render in the future. */
return ob->mesh_evaluated;
}
else {
return ob->mesh_evaluated;
}
}

View File

@ -390,7 +390,7 @@ static Mesh *arrayModifier_doArray(
vgroup_start_cap_remap = BKE_object_defgroup_index_map_create(
amd->start_cap, ctx->object, &vgroup_start_cap_remap_len);
start_cap_mesh = get_mesh_eval_for_modifier(amd->start_cap, ctx->flag);
start_cap_mesh = BKE_modifier_get_evaluated_mesh_from_object(amd->start_cap, ctx->flag);
if (start_cap_mesh) {
start_cap_nverts = start_cap_mesh->totvert;
start_cap_nedges = start_cap_mesh->totedge;
@ -402,7 +402,7 @@ static Mesh *arrayModifier_doArray(
vgroup_end_cap_remap = BKE_object_defgroup_index_map_create(
amd->end_cap, ctx->object, &vgroup_end_cap_remap_len);
end_cap_mesh = get_mesh_eval_for_modifier(amd->end_cap, ctx->flag);
end_cap_mesh = BKE_modifier_get_evaluated_mesh_from_object(amd->end_cap, ctx->flag);
if (end_cap_mesh) {
end_cap_nverts = end_cap_mesh->totvert;
end_cap_nedges = end_cap_mesh->totedge;

View File

@ -307,7 +307,7 @@ static void meshdeformModifier_do(
free_cagemesh = true;
}
else {
cagemesh = get_mesh_eval_for_modifier(mmd->object, md->mode & eModifierMode_Render ? MOD_APPLY_RENDER : 0);
cagemesh = BKE_modifier_get_evaluated_mesh_from_object(ob, md->mode & eModifierMode_Render ? MOD_APPLY_RENDER : 0);
}
/* if we don't have one computed, use derivedmesh from data

View File

@ -1051,8 +1051,8 @@ static Mesh *surfacedeform_get_mesh(SurfaceDeformModifierData *smd, bool *r_need
*r_needsfree = true;
}
else {
mesh = get_mesh_eval_for_modifier(smd->target,
smd->modifier.mode & eModifierMode_Render ? MOD_APPLY_RENDER : 0);
mesh = BKE_modifier_get_evaluated_mesh_from_object(
smd->target, smd->modifier.mode & eModifierMode_Render ? MOD_APPLY_RENDER : 0);
*r_needsfree = false;
}

View File

@ -345,21 +345,6 @@ DerivedMesh *get_dm_for_modifier(Object *ob, ModifierApplyFlag flag)
}
}
/* Get evaluated mesh for other object, which is used as an operand for the modifier,
* i.e. second operand for boolean modifier.
*/
Mesh *get_mesh_eval_for_modifier(Object *ob, ModifierApplyFlag flag)
{
if (flag & MOD_APPLY_RENDER) {
/* TODO(sergey): Use proper derived render in the future. */
return ob->mesh_evaluated;
}
else {
return ob->mesh_evaluated;
}
}
void modifier_get_vgroup(Object *ob, DerivedMesh *dm, const char *name, MDeformVert **dvert, int *defgrp_index)
{
*defgrp_index = defgroup_name_index(ob, name);

View File

@ -58,7 +58,6 @@ struct DerivedMesh *get_dm(struct Object *ob, struct BMEditMesh *em, struct Deri
struct Mesh *get_mesh(struct Object *ob, struct BMEditMesh *em, struct Mesh *mesh,
float (*vertexCos)[3], bool use_normals, bool use_orco);
struct DerivedMesh *get_dm_for_modifier(struct Object *ob, ModifierApplyFlag flag);
struct Mesh *get_mesh_eval_for_modifier(struct Object *ob, ModifierApplyFlag flag);
void modifier_get_vgroup(struct Object *ob, struct DerivedMesh *dm,
const char *name, struct MDeformVert **dvert, int *defgrp_index);

View File

@ -504,7 +504,7 @@ static Mesh *applyModifier(ModifierData *md, const ModifierEvalContext *ctx, Mes
const bool use_trgt_faces = (wmd->proximity_flags & MOD_WVG_PROXIMITY_GEOM_FACES) != 0;
if (use_trgt_verts || use_trgt_edges || use_trgt_faces) {
Mesh *target_mesh = get_mesh_eval_for_modifier(obr, ctx->flag);
Mesh *target_mesh = BKE_modifier_get_evaluated_mesh_from_object(obr, ctx->flag);
/* We must check that we do have a valid target_mesh! */
if (target_mesh != NULL) {