Commit: fc8533a3c93ce689a712b67680c90b16f226f9b9 Author: Hans Goudey Date: Mon Aug 31 11:49:22 2020 -0500 Branches: master https://developer.blender.org/rBfc8533a3c93ce689a712b67680c90b16f226f9b9
New Boolean: Always expose solver propery, add warning After discussion with @howardt, it seems the solver property should always be exposed, even in lite builds. This commit removes the ifdefs for that property and adds a warning if the "Exact" solver is used when Blender is compiled without GMP. These changes apply to the boolean modifier as well. =================================================================== M source/blender/editors/mesh/editmesh_intersect.c M source/blender/modifiers/intern/MOD_boolean.c =================================================================== diff --git a/source/blender/editors/mesh/editmesh_intersect.c b/source/blender/editors/mesh/editmesh_intersect.c index ae882ee59bb..1b5e374b2a7 100644 --- a/source/blender/editors/mesh/editmesh_intersect.c +++ b/source/blender/editors/mesh/editmesh_intersect.c @@ -154,6 +154,9 @@ static int edbm_intersect_exec(bContext *C, wmOperator *op) #ifdef WITH_GMP const bool exact = RNA_enum_get(op->ptr, "solver") == ISECT_SOLVER_EXACT; #else + if (RNA_enum_get(op->ptr, "solver") == ISECT_SOLVER_EXACT) { + BKE_report(op->reports, RPT_WARNING, "Compiled without GMP, using fast solver"); + } const bool exact = false; #endif bool use_self; @@ -248,11 +251,7 @@ static void edbm_intersect_ui(bContext *UNUSED(C), wmOperator *op) RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); -#ifdef WITH_GMP bool use_exact = RNA_enum_get(&ptr, "solver") == ISECT_SOLVER_EXACT; -#else - bool use_exact = false; -#endif uiLayoutSetPropSep(layout, true); uiLayoutSetPropDecorate(layout, false); @@ -262,11 +261,11 @@ static void edbm_intersect_ui(bContext *UNUSED(C), wmOperator *op) row = uiLayoutRow(layout, false); uiItemR(row, &ptr, "separate_mode", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemS(layout); -#ifdef WITH_GMP + row = uiLayoutRow(layout, false); uiItemR(row, &ptr, "solver", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemS(layout); -#endif + if (!use_exact) { uiItemR(layout, &ptr, "threshold", 0, NULL, ICON_NONE); } @@ -295,13 +294,11 @@ void MESH_OT_intersect(struct wmOperatorType *ot) {0, NULL, 0, NULL, NULL}, }; -#ifdef WITH_GMP static const EnumPropertyItem isect_intersect_solver_items[] = { {ISECT_SOLVER_FAST, "FAST", 0, "Fast", "Faster Solver, some limitations"}, {ISECT_SOLVER_EXACT, "EXACT", 0, "Exact", "Exact Solver, slower, handles more cases"}, {0, NULL, 0, NULL, NULL}, }; -#endif /* identifiers */ ot->name = "Intersect (Knife)"; @@ -319,14 +316,12 @@ void MESH_OT_intersect(struct wmOperatorType *ot) ot->srna, "separate_mode", isect_separate_items, ISECT_SEPARATE_CUT, "Separate Mode", ""); RNA_def_float_distance( ot->srna, "threshold", 0.000001f, 0.0, 0.01, "Merge threshold", "", 0.0, 0.001); -#ifdef WITH_GMP RNA_def_enum(ot->srna, "solver", isect_intersect_solver_items, ISECT_SOLVER_EXACT, "Solver", "Which Intersect solver to use"); -#endif /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; @@ -351,9 +346,12 @@ static int edbm_intersect_boolean_exec(bContext *C, wmOperator *op) bool use_swap = RNA_boolean_get(op->ptr, "use_swap"); bool use_self = RNA_boolean_get(op->ptr, "use_self"); #ifdef WITH_GMP - bool use_exact = RNA_enum_get(op->ptr, "solver") == ISECT_SOLVER_EXACT; + const bool use_exact = RNA_enum_get(op->ptr, "solver") == ISECT_SOLVER_EXACT; #else - bool use_exact = false; + if (RNA_enum_get(op->ptr, "solver") == ISECT_SOLVER_EXACT) { + BKE_report(op->reports, RPT_WARNING, "Compiled without GMP, using fast solver"); + } + const bool use_exact = false; #endif const float eps = RNA_float_get(op->ptr, "threshold"); int (*test_fn)(BMFace *, void *); @@ -415,11 +413,7 @@ static void edbm_intersect_boolean_ui(bContext *UNUSED(C), wmOperator *op) RNA_pointer_create(NULL, op->type->srna, op->properties, &ptr); -#ifdef WITH_GMP bool use_exact = RNA_enum_get(&ptr, "solver") == ISECT_SOLVER_EXACT; -#else - bool use_exact = false; -#endif uiLayoutSetPropSep(layout, true); uiLayoutSetPropDecorate(layout, false); @@ -427,11 +421,11 @@ static void edbm_intersect_boolean_ui(bContext *UNUSED(C), wmOperator *op) row = uiLayoutRow(layout, false); uiItemR(row, &ptr, "operation", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemS(layout); -#ifdef WITH_GMP + row = uiLayoutRow(layout, false); uiItemR(row, &ptr, "solver", UI_ITEM_R_EXPAND, NULL, ICON_NONE); uiItemS(layout); -#endif + uiItemR(layout, &ptr, "use_swap", 0, NULL, ICON_NONE); uiItemR(layout, &ptr, "use_self", 0, NULL, ICON_NONE); if (!use_exact) { @@ -447,13 +441,12 @@ void MESH_OT_intersect_boolean(struct wmOperatorType *ot) {BMESH_ISECT_BOOLEAN_DIFFERENCE, "DIFFERENCE", 0, "Difference", ""}, {0, NULL, 0, NULL, NULL}, }; -#ifdef WITH_GMP + static const EnumPropertyItem isect_boolean_solver_items[] = { {ISECT_SOLVER_FAST, "FAST", 0, "Fast", "Faster Solver, some limitations"}, {ISECT_SOLVER_EXACT, "EXACT", 0, "Exact", "Exact Solver, slower, handles more cases"}, {0, NULL, 0, NULL, NULL}, }; -#endif /* identifiers */ ot->name = "Intersect (Boolean)"; @@ -480,14 +473,12 @@ void MESH_OT_intersect_boolean(struct wmOperatorType *ot) RNA_def_boolean(ot->srna, "use_self", false, "Self", "Do self-union or self-intersection"); RNA_def_float_distance( ot->srna, "threshold", 0.000001f, 0.0, 0.01, "Merge threshold", "", 0.0, 0.001); -#ifdef WITH_GMP RNA_def_enum(ot->srna, "solver", isect_boolean_solver_items, ISECT_SOLVER_EXACT, "Solver", "Which Boolean solver to use"); -#endif /* flags */ ot->flag = OPTYPE_REGISTER | OPTYPE_UNDO; diff --git a/source/blender/modifiers/intern/MOD_boolean.c b/source/blender/modifiers/intern/MOD_boolean.c index dbdcaccf6f1..37c3f32f529 100644 --- a/source/blender/modifiers/intern/MOD_boolean.c +++ b/source/blender/modifiers/intern/MOD_boolean.c @@ -324,6 +324,9 @@ static Mesh *modifyMesh(ModifierData *md, const ModifierEvalContext *ctx, Mesh * #ifdef WITH_GMP bool use_exact = bmd->solver == eBooleanModifierSolver_Exact; #else + if (bmd->solver == eBooleanModifierSolver_Exact) { + BKE_modifier_set_error(md, "Compiled without GMP, using fast solver"); + } bool use_exact = false; #endif @@ -390,15 +393,10 @@ static void panel_draw(const bContext *C, Panel *panel) uiLayoutSetPropSep(layout, true); - uiItemR(layout, &ptr, "object", 0, NULL, ICON_NONE); - -#ifndef WITH_GMP - bool use_exact = false; -#else - bool use_exact = RNA_enum_get(&ptr, "solver") == eBooleanModifierSolver_Exact; + const bool use_exact = RNA_enum_get(&ptr, "solver") == eBooleanModifierSolver_Exact; + uiItemR(layout, &ptr, "object", 0, NULL, ICON_NONE); uiItemR(layout, &ptr, "solver", UI_ITEM_R_EXPAND, NULL, ICON_NONE); -#endif if (!use_exact) { uiItemR(layout, &ptr, "double_threshold", 0, NULL, ICON_NONE); _______________________________________________ Bf-blender-cvs mailing list Bf-blender-cvs@blender.org https://lists.blender.org/mailman/listinfo/bf-blender-cvs