From b12677bc1a17a5e446af46e7964713818fbddfc0 Mon Sep 17 00:00:00 2001 From: Michael W <50232075+YishiMichael@users.noreply.github.com> Date: Wed, 10 Nov 2021 00:35:09 +0800 Subject: [PATCH] Add files via upload --- manimlib/mobject/boolean_ops.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/manimlib/mobject/boolean_ops.py b/manimlib/mobject/boolean_ops.py index a6b2749f..eddf345f 100644 --- a/manimlib/mobject/boolean_ops.py +++ b/manimlib/mobject/boolean_ops.py @@ -94,12 +94,23 @@ class Intersection(VMobject): class Exclusion(VMobject): - def __init__(self, subject, clip, **kwargs): + def __init__(self, *vmobjects, **kwargs): + if len(vmobjects) < 2: + raise ValueError("At least 2 mobjects needed for Exclusion.") super().__init__(**kwargs) outpen = pathops.Path() pathops.xor( - [_convert_vmobject_to_skia_path(subject)], - [_convert_vmobject_to_skia_path(clip)], + [_convert_vmobject_to_skia_path(vmobjects[0])], + [_convert_vmobject_to_skia_path(vmobjects[1])], outpen.getPen(), ) + new_outpen = outpen + for _i in range(2, len(vmobjects)): + new_outpen = pathops.Path() + pathops.xor( + [outpen], + [_convert_vmobject_to_skia_path(vmobjects[_i])], + new_outpen.getPen(), + ) + outpen = new_outpen _convert_skia_path_to_vmobject(outpen, self)