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:
authorLukas Tönne <lukas.toenne@gmail.com>2015-05-22 13:30:55 +0300
committerLukas Tönne <lukas.toenne@gmail.com>2015-05-22 13:30:55 +0300
commit89f17783285be016b36255368c618ed80ec42235 (patch)
tree83b0c51fc50a5df99198f75163bb4fad4028fcd3 /source/blender/blenkernel
parent3b089c1b904a2a534b008ca11e89277b1127e473 (diff)
Option for the haircut cache modifier to either use a scene object or
an "internal" object from the group.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r--source/blender/blenkernel/intern/cache_library.c19
1 files changed, 14 insertions, 5 deletions
diff --git a/source/blender/blenkernel/intern/cache_library.c b/source/blender/blenkernel/intern/cache_library.c
index d934c9da9a1..07b24a52879 100644
--- a/source/blender/blenkernel/intern/cache_library.c
+++ b/source/blender/blenkernel/intern/cache_library.c
@@ -1793,20 +1793,29 @@ static void haircut_apply(HaircutCacheModifier *hmd, HaircutCacheData *data, Str
}
}
-static void haircut_process(HaircutCacheModifier *hmd, CacheProcessContext *UNUSED(ctx), CacheProcessData *data, int UNUSED(frame), int UNUSED(frame_prev), eCacheLibrary_EvalMode UNUSED(eval_mode))
+static void haircut_process(HaircutCacheModifier *hmd, CacheProcessContext *ctx, CacheProcessData *data, int UNUSED(frame), int UNUSED(frame_prev), eCacheLibrary_EvalMode UNUSED(eval_mode))
{
Object *ob = hmd->object;
DupliObject *dob;
Strands *strands;
- DupliObjectData *target_data;
+ DerivedMesh *target_dm;
float mat[4][4];
HaircutCacheData shrinkwrap;
if (!BKE_cache_modifier_find_strands(data->dupcache, ob, hmd->hair_system, NULL, &strands, NULL))
return;
- if (!BKE_cache_modifier_find_object(data->dupcache, hmd->target, &target_data))
- return;
+ if (hmd->flag & eHaircutCacheModifier_Flag_InternalTarget) {
+ DupliObjectData *target_data;
+ if (!BKE_cache_modifier_find_object(data->dupcache, hmd->target, &target_data))
+ return;
+ target_dm = target_data->dm;
+ }
+ else {
+ if (!hmd->target)
+ return;
+ target_dm = mesh_get_derived_final(ctx->scene, hmd->target, CD_MASK_BAREMESH);
+ }
for (dob = data->dupcache->duplilist.first; dob; dob = dob->next) {
if (dob->ob != ob)
@@ -1816,7 +1825,7 @@ static void haircut_process(HaircutCacheModifier *hmd, CacheProcessContext *UNUS
invert_m4_m4(mat, dob->mat);
memset(&shrinkwrap, 0, sizeof(shrinkwrap));
- haircut_data_get_bvhtree(&shrinkwrap, target_data->dm, true);
+ haircut_data_get_bvhtree(&shrinkwrap, target_dm, true);
haircut_data_get_instances(&shrinkwrap, hmd->target, mat, &data->dupcache->duplilist);
haircut_apply(hmd, &shrinkwrap, strands);