From ba51cebbdd62b185e839f02f9e7dd1aab63b6980 Mon Sep 17 00:00:00 2001 From: sake Date: Thu, 10 Jul 2025 10:40:29 -0400 Subject: [PATCH] Fix: #141639: Renaming Boolean Operation Solver From Fast to Float Some parts of the UI (e.g., the boolean node) had renamed the 'fast' solver to be the 'float' solver, since with the advent of the manifold solver, it is no longer really right to characterize the float one as the (sole) fast one. This commit finishes the job. It does have the effect of changing the string needed within the Python API to select the float solver, so this is a (minor) API-breaking change. --- .../blender/editors/mesh/editmesh_intersect.cc | 4 ++-- source/blender/makesrna/intern/rna_modifier.cc | 2 +- tests/python/boolean_operator.py | 18 +++++++++--------- tests/python/modifiers.py | 8 ++++---- 4 files changed, 16 insertions(+), 16 deletions(-) diff --git a/source/blender/editors/mesh/editmesh_intersect.cc b/source/blender/editors/mesh/editmesh_intersect.cc index 0cf0aa7be38..fb38ce27ed5 100644 --- a/source/blender/editors/mesh/editmesh_intersect.cc +++ b/source/blender/editors/mesh/editmesh_intersect.cc @@ -289,7 +289,7 @@ void MESH_OT_intersect(wmOperatorType *ot) static const EnumPropertyItem isect_intersect_solver_items[] = { {ISECT_SOLVER_FAST, - "FAST", + "FLOAT", 0, "Float", "Simple solver with good performance, without support for overlapping geometry"}, @@ -434,7 +434,7 @@ void MESH_OT_intersect_boolean(wmOperatorType *ot) }; static const EnumPropertyItem isect_boolean_solver_items[] = { - {ISECT_SOLVER_FAST, "FAST", 0, "Fast", "Faster solver, some limitations"}, + {ISECT_SOLVER_FAST, "FLOAT", 0, "Float", "Faster solver, some limitations"}, {ISECT_SOLVER_EXACT, "EXACT", 0, "Exact", "Exact solver, slower, handles more cases"}, {0, nullptr, 0, nullptr, nullptr}, }; diff --git a/source/blender/makesrna/intern/rna_modifier.cc b/source/blender/makesrna/intern/rna_modifier.cc index 3a8f98a1a2e..ee87fdbabc3 100644 --- a/source/blender/makesrna/intern/rna_modifier.cc +++ b/source/blender/makesrna/intern/rna_modifier.cc @@ -3518,7 +3518,7 @@ static void rna_def_modifier_boolean(BlenderRNA *brna) static const EnumPropertyItem prop_solver_items[] = { {eBooleanModifierSolver_Float, - "FAST", + "FLOAT", 0, "Float", "Simple solver with good performance, without support for overlapping geometry"}, diff --git a/tests/python/boolean_operator.py b/tests/python/boolean_operator.py index de729810f35..c647d3035db 100644 --- a/tests/python/boolean_operator.py +++ b/tests/python/boolean_operator.py @@ -21,30 +21,30 @@ def main(): SpecMeshTest('Cubecube_intersect_union', 'Cubecube', 'Cubecube_result_1', [OperatorSpecEditMode('intersect_boolean', - {'operation': 'UNION', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + {'operation': 'UNION', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_intersect', 'Cubecube', 'Cubecube_result_2', - [OperatorSpecEditMode('intersect_boolean', {'operation': 'INTERSECT', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + [OperatorSpecEditMode('intersect_boolean', {'operation': 'INTERSECT', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_difference', 'Cubecube', 'Cubecube_result_3', - [OperatorSpecEditMode('intersect_boolean', {'operation': 'DIFFERENCE', 'solver': 'FAST'}, 'FACE', + [OperatorSpecEditMode('intersect_boolean', {'operation': 'DIFFERENCE', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_cut', 'Cubecube', 'Cubecube_result_4', [OperatorSpecEditMode('intersect', - {'separate_mode': 'CUT', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + {'separate_mode': 'CUT', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_all', 'Cubecube', 'Cubecube_result_5', [OperatorSpecEditMode('intersect', - {'separate_mode': 'ALL', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + {'separate_mode': 'ALL', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_none', 'Cubecube', 'Cubecube_result_6', [OperatorSpecEditMode('intersect', - {'separate_mode': 'NONE', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + {'separate_mode': 'NONE', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), SpecMeshTest('Cubecube_intersect_select_none', 'Cubecube', 'Cubecube_result_7', [OperatorSpecEditMode('intersect', - {'mode': 'SELECT', 'separate_mode': 'NONE', 'solver': 'FAST'}, 'FACE', + {'mode': 'SELECT', 'separate_mode': 'NONE', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11}, )]), SpecMeshTest('Cubecone_intersect_union', 'Cubecone', 'Cubecone_result_1', [OperatorSpecEditMode('intersect_boolean', - {'operation': 'UNION', 'solver': 'FAST'}, 'FACE', {6, 7, 8, 9, 10}, )]), + {'operation': 'UNION', 'solver': 'FLOAT'}, 'FACE', {6, 7, 8, 9, 10}, )]), SpecMeshTest('Cubecones_intersect_union', 'Cubecones', 'Cubecones_result_1', - [OperatorSpecEditMode('intersect_boolean', {'operation': 'UNION', 'solver': 'FAST'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), + [OperatorSpecEditMode('intersect_boolean', {'operation': 'UNION', 'solver': 'FLOAT'}, 'FACE', {0, 1, 2, 3, 4, 5}, )]), ] diff --git a/tests/python/modifiers.py b/tests/python/modifiers.py index 579cc55e753..535f4156b98 100644 --- a/tests/python/modifiers.py +++ b/tests/python/modifiers.py @@ -21,7 +21,7 @@ def cube_mask_first_modifier_list(): ModifierSpec('solidify', 'SOLIDIFY', {}), ModifierSpec('triangulate', 'TRIANGULATE', {}), ModifierSpec('bevel', 'BEVEL', {'width': 0.1, 'limit_method': 'NONE'}), - ModifierSpec('boolean', 'BOOLEAN', {'object': bpy.data.objects["testCubeMaskFirst_boolean"], 'solver': 'FAST'}), + ModifierSpec('boolean', 'BOOLEAN', {'object': bpy.data.objects["testCubeMaskFirst_boolean"], 'solver': 'FLOAT'}), ModifierSpec('edge split', 'EDGE_SPLIT', {}), ModifierSpec('build', 'BUILD', {'frame_start': 1, 'frame_duration': 1}, 2), ModifierSpec('multires', 'MULTIRES', {}), @@ -42,7 +42,7 @@ def cube_random_modifier_list(): ModifierSpec('array', 'ARRAY', {}), ModifierSpec('bevel', 'BEVEL', {'width': 0.1, 'limit_method': 'NONE'}), ModifierSpec('multires', 'MULTIRES', {}), - ModifierSpec('boolean', 'BOOLEAN', {'object': bpy.data.objects["testCubeRandom_boolean"], 'solver': 'FAST'}), + ModifierSpec('boolean', 'BOOLEAN', {'object': bpy.data.objects["testCubeRandom_boolean"], 'solver': 'FLOAT'}), ModifierSpec('solidify', 'SOLIDIFY', {}), ModifierSpec('build', 'BUILD', {'frame_start': 1, 'frame_duration': 1}, 2), ModifierSpec('triangulate', 'TRIANGULATE', {}), @@ -397,7 +397,7 @@ def main(): boolean_basename = "CubeBooleanDiffBMeshObject" tests.append(SpecMeshTest("BooleandDiffBMeshObject", "test" + boolean_basename, "expected" + boolean_basename, [ModifierSpec("boolean", 'BOOLEAN', - {"solver": 'FAST', "operation": 'DIFFERENCE', "operand_type": 'OBJECT', + {"solver": 'FLOAT', "operation": 'DIFFERENCE', "operand_type": 'OBJECT', "object": bpy.data.objects["test" + boolean_basename + "Operand"]})])) boolean_basename = "CubeBooleanDiffBMeshCollection" tests.append(SpecMeshTest("BooleandDiffBMeshCollection", @@ -405,7 +405,7 @@ def main(): "expected" + boolean_basename, [ModifierSpec("boolean", 'BOOLEAN', - {"solver": 'FAST', + {"solver": 'FLOAT', "operation": 'DIFFERENCE', "operand_type": 'COLLECTION', "collection": bpy.data.collections["test" + boolean_basename + "Operands"]})]))