BOP_Merge2.cpp
had same variable name at different scopes so I renamed a couple.
resources.c
added include that was missing. (This maybe was going to move? the old one
was commented out)
ed_markers.c
initalized a var that needed it.
Kent
-----
New boolean merge algorithm. The current code often does a poor job of merging tris and quads after the operation, resulting in many unnecessary faces. This commit add a new algorithm which takes advantage of topology information saved in the interal BOP structures.
The file intern/boolop/intern/BOP_Misc.h has two #defines which control which algorithm(s) are compiled. They are set now to compile both, with the new algorithm as the default. The original algorithm can be enabled by setting the "rt" debugging button on the Scene panel (F10) to 100.
One note: the current boolean code still occasionally creates a non-manifold mesh from an operation on two manifold meshes. The original merge algorithm would sometimes "close" these meshes and sometimes not. The new algorithms behaves the same way, but sometimes closes a mesh the original would not and sometimes leaves open a mesh the original would close. My fairly extensive tests did not indicate any significant difference in the percentage of final non-manifold meshes.
-----
Minor changes to boolean code; add an new include file to gather various
#defines global to the boolean system. Currently, this just allows control
of whether some debugging code is compiled or not.
This is a precursor commit for some other boolean optimizations/cleanups.
But in case that commit is later reverted, this code should still remain.
-----
More improvements to boolean tools. The main change (although very little in
code) is changing fuzzy comparisons of floating point values. For testing, a
new define is added in intern/boolop/intern/BOP_MathUtils.h called
VAR_EPSILON, which enables better comparisons. This is turned on by default;
undefining it will revert to using the previous comparisons. The downside of
these new comparisons is a loss in speed, but the resulting meshes are more
likely to be manifold (although still not always).
The other changes include speed improvements based on profiling results and
fixes for the improper creation of triangular faces with only two vertices.
------
Bugfix #6847: Previous fix for "spikes" when using booleans caused creation
of faces with only two unique vertices ("eekadoodles"). This patch cleans up
the test for triangles with near-colinear vertices so PHANTOM faces can be
used again, and also adds a hack for now which removes any eekadoodle faces.
I haven't figured out yet exactly how the faces are being created; if I can
do so and fix it the hack will be removed.
-----
Bugfix #6847: Boolean code was marking some valid faces as "PHANTOM" when the
three vertices were nearly co-linear (according to its tests). This
introduced holes into one or both meshes which could then result in either
holes in the final results and/or spurrious faces which should have been
split.
This commit removes the code in question until either an alternative test is
coded.
which caused faces of convex objects to be classified wrongly. Also removed
some dead code. For convex objects, the BSP trees would also be literally
orders of magnitude larger than they were supposed to be (one test with a
5000 face torus reduced the BSP tree size from 5.96 million nodes to just 72.1
thousand).
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 :)
Boolean crashed when using vertexcolors or UVs. The fix is disputable... it
just always returns a valid char * for "face vertex material", whatever
that may be... this fix seems not to break anything.
Also moved the report to Todo tracker, with message:
-> Need new Boolean maintainer!
Experimental boolean tool optimization: for very large meshes a significant
amount of time is spend performing linear searches of edges. This patch
implements a "hash" table (really more of a bucket table) to narrow the
search space.
If someone should need to disable this, just remove the "#define HASH" at
the beginning of BOP_Mesh.h
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.
Bug "fix" for #3932, and possibly for #3799. Booleans can get into an endless loop (at least until memory runs out); through triangulation somehow a face is repeatedly added to the list of faces to triangulate. This patch checks the face list for duplicates prior to a list add and aborts if a dup is found.
The real issue is why the triangulation is creating the face in the first place, but that will take a more thorough (and longer) examination of the code. If I can fix that issue that prior to the 2.42 release, then this code can be removed.
BOP_Mesh.h:45: warning: ‘class BOP_Mesh’ only defines private constructors and h
as no friends
drawimasel.c initalized a variable so it didn't give warnings about it.
(wasn't really needed but if the code changes could be potential issue)
Kent
extern/bullet/BulletDynamics/ConstraintSolver/SimpleConstraintSolver.h
added newline at end of file.
intern/boolop/intern/BOP_Face2Face.cpp
fixed indentation and had nested declarations of a varible i used
for multiple for loops, changed it to just one declaration.
source/blender/blenkernel/bad_level_call_stubs/stubs.c
added prototypes and a couple other fixes.
source/blender/include/BDR_drawobject.h
source/blender/include/BSE_node.h
source/blender/include/butspace.h
source/blender/render/extern/include/RE_shader_ext.h
added struct definitions
source/blender/src/editmesh_mods.c
source/gameengine/Ketsji/KX_BlenderMaterial.cpp
source/gameengine/Ketsji/KX_ConvertPhysicsObjects.cpp
source/gameengine/Ketsji/KX_RaySensor.cpp
removed unused variables;
source/gameengine/GameLogic/Joystick/SCA_Joystick.cpp
changed format of case statements to avoid warnings in gcc.
Kent