diff options
author | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2010-11-30 00:24:55 +0300 |
---|---|---|
committer | Tamito Kajiyama <rd6t-kjym@asahi-net.or.jp> | 2010-11-30 00:24:55 +0300 |
commit | 2f52fa782077e8b18d86062ad9dea6a19114d8bc (patch) | |
tree | 220d1c73a2f5ce49dfaf073e2fa83c3730898461 /source/blender/blenkernel | |
parent | 7f2829d30e9e39820afb3c756e78b9d72bb5c992 (diff) |
Fix for properly unlinking target object pointers when objects are deleted
from scenes.
Diffstat (limited to 'source/blender/blenkernel')
-rw-r--r-- | source/blender/blenkernel/BKE_linestyle.h | 3 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/linestyle.c | 27 | ||||
-rw-r--r-- | source/blender/blenkernel/intern/object.c | 10 |
3 files changed, 40 insertions, 0 deletions
diff --git a/source/blender/blenkernel/BKE_linestyle.h b/source/blender/blenkernel/BKE_linestyle.h index 2e68ab38ecd..ebbfe7c5559 100644 --- a/source/blender/blenkernel/BKE_linestyle.h +++ b/source/blender/blenkernel/BKE_linestyle.h @@ -39,6 +39,7 @@ #define LS_MODIFIER_TYPE_THICKNESS 3 struct Main; +struct Object; FreestyleLineStyle *FRS_new_linestyle(char *name, struct Main *main); void FRS_free_linestyle(FreestyleLineStyle *linestyle); @@ -58,4 +59,6 @@ void FRS_move_linestyle_thickness_modifier(FreestyleLineStyle *linestyle, LineSt void FRS_list_modifier_color_ramps(FreestyleLineStyle *linestyle, ListBase *listbase); char *FRS_path_from_ID_to_color_ramp(FreestyleLineStyle *linestyle, ColorBand *color_ramp); +void FRS_unlink_linestyle_target_object(FreestyleLineStyle *linestyle, struct Object *ob); + #endif diff --git a/source/blender/blenkernel/intern/linestyle.c b/source/blender/blenkernel/intern/linestyle.c index 4b12473eda2..f6f8378cebc 100644 --- a/source/blender/blenkernel/intern/linestyle.c +++ b/source/blender/blenkernel/intern/linestyle.c @@ -368,3 +368,30 @@ char *FRS_path_from_ID_to_color_ramp(FreestyleLineStyle *linestyle, ColorBand *c found: return BLI_sprintfN("color_modifiers[\"%s\"].color_ramp", m->name); } + +void FRS_unlink_linestyle_target_object(FreestyleLineStyle *linestyle, struct Object *ob) +{ + LineStyleModifier *m; + + for (m = (LineStyleModifier *)linestyle->color_modifiers.first; m; m = m->next) { + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { + if (((LineStyleColorModifier_DistanceFromObject *)m)->target == ob) { + ((LineStyleColorModifier_DistanceFromObject *)m)->target = NULL; + } + } + } + for (m = (LineStyleModifier *)linestyle->alpha_modifiers.first; m; m = m->next) { + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { + if (((LineStyleAlphaModifier_DistanceFromObject *)m)->target == ob) { + ((LineStyleAlphaModifier_DistanceFromObject *)m)->target = NULL; + } + } + } + for (m = (LineStyleModifier *)linestyle->thickness_modifiers.first; m; m = m->next) { + if (m->type == LS_MODIFIER_DISTANCE_FROM_OBJECT) { + if (((LineStyleThicknessModifier_DistanceFromObject *)m)->target == ob) { + ((LineStyleThicknessModifier_DistanceFromObject *)m)->target = NULL; + } + } + } +} diff --git a/source/blender/blenkernel/intern/object.c b/source/blender/blenkernel/intern/object.c index fe557dfefa0..79818ba6799 100644 --- a/source/blender/blenkernel/intern/object.c +++ b/source/blender/blenkernel/intern/object.c @@ -102,6 +102,8 @@ #include "GPU_material.h" +#include "FRS_freestyle.h" + /* Local function protos */ static void solve_parenting (Scene *scene, Object *ob, Object *par, float obmat[][4], float slowmat[][4], int simul); @@ -577,6 +579,14 @@ void unlink_object(Object *ob) } SEQ_END } + + { + SceneRenderLayer *srl; + + for (srl= sce->r.layers.first; srl; srl= srl->next) { + FRS_unlink_target_object(&srl->freestyleConfig, ob); + } + } } sce= sce->id.next; |