Carve proved it's a way to go, so the time have came to get rid of old
boolean operation module which isn't used anymore.
Still kept BOP interface but move it to BSP module. At some point it
could be cleaned up further (like perhaps removed extra abstraction
level or so) but would be nice to combine such a refactor with making
BSP aware of NGons.
Tested on linux using both cmake and scons, possible regressions on
windows/osx. Would check windoes build just after commit.
-----
Bugfixes for #6816 and #6988: Under Windows, Blender would crash if boolean
operations were done on objects which resulted in an empty mesh. Problem was
"iterators" created for ConvertCSGDescriptorsToDerivedMesh() tried to access
invalid memory.
duplicate code. Also removed redundant files from the bsp module,
that where replaced by boolop last year, no sense in updating them
for these changes. On the user level things should still work the
same, this is only preparation work.
Not counting the removed files, -1501 lines of code, not too bad :)
problems reported by klockwork.com who was very nice and has offered to
provide free source code analisys for us.
This one deals with freeing memory for an object when there is an
error. (The function allocated memory intending to return it but
then ran into problems, and was forgetting to free it before it returned
NULL)
Kent
Adding back some code to booleans that got lost in the Orange merge.
I've also added back the code which checked that meshes were solid
("manifolds") but have the actual check in
intern/boolop/intern/BOP_Interface.cpp, since from my testing it was
not causing crashes or hangs. It *can* give odd results depending on
what you're trying to intersect, but seems useful. Additionally, since
existing bugs in the current code can create non-solid/non-manifold
meshes, seems hypocritical to create a mesh that can't later be used in
another boolean operation.
Previous patch for "problems with STL iterators/vectors that only show up under
Visual Studio 2005" could cause a crash when object used as a boolean modifier
was changed (for example, flipping all the normals). The problem is that result
of boolean operations (apparently) can result in empty meshes. Patched to
use the vector::size operator to check for empty vectors before trying to
check the iterator.
here is a quick summary...
Kent
intern/bsp/intern/BSP_CSGMesh_CFIterator.h
removed tri_index (unused variable)
intern/bsp/intern/CSG_BooleanOps.cpp
removed extra ;
intern/string/intern/STR_String.cpp
added <ctype.h>
source/blender/blenkernel/BKE_writeavi.h
moved things around so not doing forward declarations
source/blender/renderconverter/intern/convertBlenderScene.c
changed render.h to render_types.h
source/blender/src/blenderbuttons.c
source/blender/src/editgroup.c
source/blender/src/meshtools.c
added newline
source/gameengine/Ketsji/KX_KetsjiEngine.cpp
commented out include "PIL_time.h" code that requires it is commented out
reading blender/src/writeavicodec.c
(struct keyword to a couple of lines that needed it)
and added:
extern struct Render R;
blender/renderconverter/intern/convertBlenderScene.c
added extern Render R;
added #include "rendercore.h" to get rid of undeclared shade_material_loop
(Not sure if this is right but it fixes it.
Did not fix this problem, is it alright to just pass NULL here or should we chan
ge it to something else:
init_render_materials' : too few
gameengine/Physics/BlOde/OdePhysicsEnvironment.cpp
removed argument to dHashSpaceCreate
commented out dWorldQuickStep since it does not exist
*Fixed boolean buglet in the bsp lib. I have not committed any libraries so you'll
have to do this to see the changes in blender.
*Got the bsp test program working again with the new GHOST createWindow
interface.
*(Visual C++) Modfied some of the dsp in the intern library to NOT prompt when
overwirting old libs and header files. This is the /Y option after XCOPY
Cheers
Laurence.
---------------------------->8----------------------------------------------
g++ -DHAVE_CONFIG_H -I. -I../../../blender/intern/bsp -I../.. -I../../../blender/intern/container -I../../../blender/intern/moto/include -I../../../blender/intern/memutil -I/usr/freeware/include -g -funsigned-char -c ../../../blender/intern/bsp/intern/BSP_CSGMesh.cpp -MT BSP_CSGMesh.lo -MD -MP -MF .deps/BSP_CSGMesh.TPlo -DPIC -o .libs/BSP_CSGMesh.lo
/usr/freeware/lib/gcc-lib/mips-sgi-irix6.5/3.0.4/include/g++/bits/stl_iterator.h: In
constructor `std::__normal_iterator<_Iterator,
_Container>::__normal_iterator(const std::__normal_iterator<_Iter,
_Container>&) [with _Iter = const BSP_MFace*, _Iterator = BSP_MFace*,
_Container = std::vector<BSP_MFace, std::allocator<BSP_MFace> >]':
../../../blender/intern/bsp/intern/BSP_CSGMesh.cpp:270: instantiated from here
/usr/freeware/lib/gcc-lib/mips-sgi-irix6.5/3.0.4/include/g++/bits/stl_iterator.h:474: cannot
convert `const BSP_MFace* const' to `BSP_MFace*' in initialization
*** Error code 1 (bu21)
*** Error code 1 (bu21)
*** Error code 1 (bu21)
*** Error code 1 (bu21)
---------------------------->8----------------------------------------------
The line in question that causes the error is the middle one in this group:
vector<BSP_MFace>::const_iterator f_it_end = FaceSet().end();
vector<BSP_MFace>::const_iterator f_it_begin = FaceSet().begin();
vector<BSP_MFace>::iterator f_it = FaceSet().begin();
Dropping the 'const_' from that middle line enables gcc to compile the
file correctly (this is also consistent with what is going on with other
parts of the file, i.e., stuff that is returned from a begin() method is
declared as vector<BSP_MFace>::iterator instead of
vector<BSP_MFace>::const_iterator.
But I'll be honest: I have no idea what this code does, so if somebody with
better C++ skills wants to check it, then please do.
This change was also tested to compile and run on debian linux/x86
(well, booleans are broken right now, so I wasn't able to do too much
testing).
Chris
I took out the following from the includes in the intern dir that still had
it:
-#ifdef HAVE_CONFIG_H
-#include <config.h>
-#endif
Kent
--
mein@cs.umn.edu
(to stop gcc compiler warnings) caused segfaults when
performing intersections (and possibly while doing other
boolean operations). I felt it was best to revert these
changes (I also got rid of the DOS line terminators in
the files). Some more info about the matter can be found
in the first 10 or so posts for Novembor on the old
mailing list:
http://www.soze.com/mailman/private/bf-committers/2002-November/date.html
Chris (Merry Christmas!)