user: How do I use BooleanModifier(Modifier) in Blender? Include parameters, examples, warnings and best practices.

assistant: # BooleanModifier(Modifier)

base classes — [`bpy_struct`](bpy.types.bpy_struct.html#bpy.types.bpy_struct "bpy.types.bpy_struct"), [`Modifier`](bpy.types.Modifier.html#bpy.types.Modifier "bpy.types.Modifier")

*class* bpy.types.BooleanModifier(*Modifier*)
:   Boolean operations modifier

    collection
    :   Use mesh objects in this collection for Boolean operation

        Type:
        :   [`Collection`](bpy.types.Collection.html#bpy.types.Collection "bpy.types.Collection")

    debug_options
    :   Debugging options, only when started with ‘-d’

        Type:
        :   enum set in {`'SEPARATE'`, `'NO_DISSOLVE'`, `'NO_CONNECT_REGIONS'`}, default set()

    double_threshold
    :   Threshold for checking overlapping geometry

        Type:
        :   float in [0, 1], default 1e-06

    material_mode
    :   Method for setting materials on the new faces

        - `INDEX`
          Index Based – Set the material on new faces based on the order of the material slot lists. If a material does not exist on the modifier object, the face will use the same material slot or the first if the object does not have enough slots..
        - `TRANSFER`
          Transfer – Transfer materials from non-empty slots to the result mesh, adding new materials as necessary. For empty slots, fall back to using the same material index as the operand mesh..

        Type:
        :   enum in [`'INDEX'`, `'TRANSFER'`], default `'INDEX'`

    object
    :   Mesh object to use for Boolean operation

        Type:
        :   [`Object`](bpy.types.Object.html#bpy.types.Object "bpy.types.Object")

    operand_type
    :   - `OBJECT`
          Object – Use a mesh object as the operand for the Boolean operation.
        - `COLLECTION`
          Collection – Use a collection of mesh objects as the operand for the Boolean operation.

        Type:
        :   enum in [`'OBJECT'`, `'COLLECTION'`], default `'OBJECT'`

    operation
    :   - `INTERSECT`
          Intersect – Keep the part of the mesh that is common between all operands.
        - `UNION`
          Union – Combine meshes in an additive way.
        - `DIFFERENCE`
          Difference – Combine meshes in a subtractive way.

        Type:
        :   enum in [`'INTERSECT'`, `'UNION'`, `'DIFFERENCE'`], default `'DIFFERENCE'`

    solver
    :   Method for calculating booleans

        - `FLOAT`
          Float – Simple solver with good performance, without support for overlapping geometry.
        - `EXACT`
          Exact – Slower solver with the best results for coplanar faces.
        - `MANIFOLD`
          Manifold – Fastest solver that works only on manifold meshes but gives better results.

        Type:
        :   enum in [`'FLOAT'`, `'EXACT'`, `'MANIFOLD'`], default `'EXACT'`

    use_hole_tolerant
    :   Better results when there are holes (slower)

        Type:
        :   boolean, default False

    use_self
    :   Allow self-intersection in operands

        Type:
        :   boolean, default False

    *classmethod* bl_rna_get_subclass(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The RNA type or default when not found.

        Return type:
        :   [`bpy.types.Struct`](bpy.types.Struct.html#bpy.types.Struct "bpy.types.Struct") subclass

    *classmethod* bl_rna_get_subclass_py(*id*, *default=None*, */*)
    :   Parameters:
        :   **id** (*str*) – The RNA type identifier.

        Returns:
        :   The class or default when not found.

        Return type:
        :   type