Source code for blendersynth.blender.boolean

"""Functions for boolean operations of meshes"""
import bpy
from ..utils import types


def _apply_boolean(
    target: types.Mesh,
    *others: types.Mesh,
    operation: str = "UNION",
    hide_others: bool = True
) -> types.Mesh:
    for other in others:
        target.add_child(other)

        modifier = target.obj.modifiers.new(type="BOOLEAN", name="bool")
        modifier.object = other.obj
        modifier.operation = operation

        bpy.ops.object.modifier_apply(modifier="bool")
        if hide_others:
            other.obj.hide_render = True
            other.obj.hide_set(True)
    return target


[docs] def union(target: types.Mesh, *others: types.Mesh, hide_others=True) -> types.Mesh: """Apply the union boolean modifier to a collection of meshes. :param target: The target Mesh: this is returned by the function :param others: Other Meshes to union with `target` :param hide_others: If True, hide all Meshes in the `others` list""" return _apply_boolean(target, *others, operation="UNION", hide_others=hide_others)
[docs] def difference(target: types.Mesh, *others: types.Mesh, hide_others=True) -> types.Mesh: """Apply the difference boolean modifier to a collection of meshes. :param target: The target Mesh: this is returned by the function :param others: Other Meshes to subtract from `target` :param hide_others: If True, hide all Meshes in the `others` list""" return _apply_boolean( target, *others, operation="DIFFERENCE", hide_others=hide_others )
[docs] def intersect(target: types.Mesh, *others: types.Mesh, hide_others=True) -> types.Mesh: """Apply the intersect boolean modifier to a collection of meshes. :param target: The target Mesh: this is returned by the function :param others: Other Meshes to intersect with `target` :param hide_others: If True, hide all Meshes in the `others` list""" return _apply_boolean( target, *others, operation="INTERSECT", hide_others=hide_others )