blender/intern
Sergey Sharybin 690c77dd7d Fix #29934: New Carve library can't execute boolean operations in some cases
Issue was caused by left boolean operand consist of several intersecting manifolds
which make Carve triangulator confused and which can't be resolved in general case.
Added mesh pre-processing before actual applying boolean operator on it. This
preprocessing applies union operation on intersecting manifolds of the same object
so intersection edge loop with second object wouldn't confuse tesselator and correct
result would be returned.
Detecting of intersecting manifolds is based on AABB intersection check which leads
to some extra union operation called, but it's possible to speed things up from
Carve side so union operation of two not intersecting meshes would work faster.
Additional condition for running union for manifold is this manifolds intersects
AABB of second operand, so mesh topology wouldn't be changed at all in areas
where there's definitely no intersection between operands. It might be improved
so only manifolds which actually intersects second operand would be joined
together, but it'll slow things down a bit and prefer to do it only if it'll
be really a problem.

Additional change is fixed memory leak when boolean operation fails to run -
it was missed "delete" call if exception happens in Carve library.

From side effects of this change might be named boolean operation between
suzanne and another object: suzanne is consist of three intersecting open
manifolds, so this new meshes preprocessing leads to missed eyes in result
because of failure of merging two open manifolds. Don't think making suzanne
work for all setups should really be a goal, it's a bit crappy mesh for CSG
algorithms.
2012-01-23 17:43:41 +00:00
..
audaspace split >120 length lines (mostly if statements) 2011-12-22 00:03:20 +00:00
boolop Fix #29934: New Carve library can't execute boolean operations in some cases 2012-01-23 17:43:41 +00:00
bsp style edits for function declarations 2011-12-30 07:55:15 +00:00
container correct indentation and some whitespace edits (no functional changes) 2011-11-11 13:09:14 +00:00
cycles Cycles Textures: 2012-01-22 22:59:21 +00:00
decimation correct indentation and some whitespace edits (no functional changes) 2011-11-11 13:09:14 +00:00
dualcon Fix for compilation error when compiling dualcon with mingw 2011-12-31 11:08:04 +00:00
elbeem remove $Id: tags after discussion on the mailign list: http://markmail.org/message/fp7ozcywxum3ar7n 2011-10-23 17:52:20 +00:00
ffmpeg Cycles: svn merge -r41225:41232 ^/trunk/blender 2011-10-24 22:32:00 +00:00
ghost Committing patch "[#27676] Change window size/resolution in realtime" by me. 2012-01-22 20:25:25 +00:00
guardedalloc workaround for error building with clang and quiet some warnings building without libmv. 2011-12-31 03:01:18 +00:00
iksolver Code cleanup: fix some clang static checker warnings. 2011-12-22 20:29:44 +00:00
itasc OSX: buildfix for itask on 10.5.sdk 2011-11-15 21:55:07 +00:00
memutil remove header text: 2011-11-29 10:54:47 +00:00
mikktspace Code cleanup: fix some clang static checker warnings. 2011-12-22 20:29:44 +00:00
moto Cycles: svn merge -r41225:41232 ^/trunk/blender 2011-10-24 22:32:00 +00:00
opennl Code cleanup: fix some clang static checker warnings. 2011-12-22 20:29:44 +00:00
smoke style edits for function declarations 2011-12-30 07:55:15 +00:00
string remove $Id: tags after discussion on the mailign list: http://markmail.org/message/fp7ozcywxum3ar7n 2011-10-23 17:52:20 +00:00
CMakeLists.txt option to build without remesh modifier for cmake and scons 2011-12-31 03:34:44 +00:00
SConscript option to build without remesh modifier for cmake and scons 2011-12-31 03:34:44 +00:00