Changeset View
Changeset View
Standalone View
Standalone View
source/blender/modifiers/intern/MOD_boolean.c
| Show First 20 Lines • Show All 71 Lines • ▼ Show 20 Lines | |||||
| static void initData(ModifierData *md) | static void initData(ModifierData *md) | ||||
| { | { | ||||
| BooleanModifierData *bmd = (BooleanModifierData *)md; | BooleanModifierData *bmd = (BooleanModifierData *)md; | ||||
| bmd->double_threshold = 1e-6f; | bmd->double_threshold = 1e-6f; | ||||
| bmd->operation = eBooleanModifierOp_Difference; | bmd->operation = eBooleanModifierOp_Difference; | ||||
| bmd->solver = eBooleanModifierSolver_Exact; | bmd->solver = eBooleanModifierSolver_Exact; | ||||
| bmd->flag = 0; | |||||
| } | } | ||||
| static bool isDisabled(const struct Scene *UNUSED(scene), | static bool isDisabled(const struct Scene *UNUSED(scene), | ||||
| ModifierData *md, | ModifierData *md, | ||||
| bool UNUSED(useRenderParams)) | bool UNUSED(useRenderParams)) | ||||
| { | { | ||||
| BooleanModifierData *bmd = (BooleanModifierData *)md; | BooleanModifierData *bmd = (BooleanModifierData *)md; | ||||
| ▲ Show 20 Lines • Show All 226 Lines • ▼ Show 20 Lines | #endif | ||||
| use_separate = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_Separate) != 0; | use_separate = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_Separate) != 0; | ||||
| use_dissolve = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_NoDissolve) == 0; | use_dissolve = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_NoDissolve) == 0; | ||||
| use_island_connect = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_NoConnectRegions) == | use_island_connect = (bmd->bm_flag & eBooleanModifierBMeshFlag_BMesh_NoConnectRegions) == | ||||
| 0; | 0; | ||||
| } | } | ||||
| #ifdef WITH_GMP | #ifdef WITH_GMP | ||||
| const bool use_exact = bmd->solver == eBooleanModifierSolver_Exact; | const bool use_exact = bmd->solver == eBooleanModifierSolver_Exact; | ||||
| const bool use_self = (bmd->flag & eBooleanModifierFlag_Self) != 0; | |||||
| #else | #else | ||||
| if (bmd->solver == eBooleanModifierSolver_Exact) { | if (bmd->solver == eBooleanModifierSolver_Exact) { | ||||
| BKE_modifier_set_error(md, "Compiled without GMP, using fast solver"); | BKE_modifier_set_error(md, "Compiled without GMP, using fast solver"); | ||||
| } | } | ||||
| const bool use_exact = false; | const bool use_exact = false; | ||||
| const bool use_self = false; | |||||
| #endif | #endif | ||||
| if (use_exact) { | if (use_exact) { | ||||
| BM_mesh_boolean(bm, looptris, tottri, bm_face_isect_pair, NULL, false, bmd->operation); | BM_mesh_boolean( | ||||
| bm, looptris, tottri, bm_face_isect_pair, NULL, use_self, bmd->operation); | |||||
| } | } | ||||
| else { | else { | ||||
| BM_mesh_intersect(bm, | BM_mesh_intersect(bm, | ||||
| looptris, | looptris, | ||||
| tottri, | tottri, | ||||
| bm_face_isect_pair, | bm_face_isect_pair, | ||||
| NULL, | NULL, | ||||
| false, | false, | ||||
| ▲ Show 20 Lines • Show All 49 Lines • ▼ Show 20 Lines | static void panel_draw(const bContext *UNUSED(C), Panel *panel) | ||||
| uiLayoutSetPropSep(layout, true); | uiLayoutSetPropSep(layout, true); | ||||
| const 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, "object", 0, NULL, ICON_NONE); | ||||
| uiItemR(layout, ptr, "solver", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | uiItemR(layout, ptr, "solver", UI_ITEM_R_EXPAND, NULL, ICON_NONE); | ||||
| if (!use_exact) { | if (use_exact) { | ||||
| uiItemR(layout, ptr, "use_self", 0, NULL, ICON_NONE); | |||||
| } | |||||
| else { | |||||
| uiItemR(layout, ptr, "double_threshold", 0, NULL, ICON_NONE); | uiItemR(layout, ptr, "double_threshold", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| if (G.debug) { | if (G.debug) { | ||||
| uiLayout *col = uiLayoutColumn(layout, true); | uiLayout *col = uiLayoutColumn(layout, true); | ||||
| uiItemR(col, ptr, "debug_options", 0, NULL, ICON_NONE); | uiItemR(col, ptr, "debug_options", 0, NULL, ICON_NONE); | ||||
| } | } | ||||
| ▲ Show 20 Lines • Show All 41 Lines • Show Last 20 Lines | |||||