From b410d06ddeae82ba70d8f69368f17a1fbb2c0daf Mon Sep 17 00:00:00 2001 From: Sergey Sharybin Date: Mon, 30 Jan 2012 09:19:38 +0000 Subject: Fix #29976: Carve Boolenas crasher with Solidify Issue was caused by union policy needed to deal with cases when operand intersects two or more intersecting meshes of another operand. Changed this policy to run union operation only if there's actual intersection between two meshes of the same object. Should work in general but it's still possible to make it behave incorrect -- for example object consist of two groups if concentric cubes which intersects each other. --- source/blender/modifiers/intern/MOD_boolean.c | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'source/blender/modifiers/intern/MOD_boolean.c') diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c index 16f0912bd9b..2493b5e0f74 100644 --- a/source/blender/modifiers/intern/MOD_boolean.c +++ b/source/blender/modifiers/intern/MOD_boolean.c @@ -47,6 +47,8 @@ #include "MOD_boolean_util.h" #include "MOD_util.h" +#include "PIL_time.h" + static void copyData(ModifierData *md, ModifierData *target) { BooleanModifierData *bmd = (BooleanModifierData*) md; @@ -136,8 +138,12 @@ static DerivedMesh *applyModifier(ModifierData *md, Object *ob, result = get_quick_derivedMesh(derivedData, dm, bmd->operation); if(result == NULL) { + // TIMEIT_START(NewBooleanDerivedMesh) + result = NewBooleanDerivedMesh(dm, bmd->object, derivedData, ob, 1 + bmd->operation); + + // TIMEIT_END(NewBooleanDerivedMesh) } /* if new mesh returned, return it; otherwise there was -- cgit v1.2.3