diff options
Diffstat (limited to 'src/live_effects/lpe-bool.h')
-rw-r--r-- | src/live_effects/lpe-bool.h | 93 |
1 files changed, 93 insertions, 0 deletions
diff --git a/src/live_effects/lpe-bool.h b/src/live_effects/lpe-bool.h new file mode 100644 index 0000000..9cd2ef2 --- /dev/null +++ b/src/live_effects/lpe-bool.h @@ -0,0 +1,93 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * Boolean operation live path effect + * + * Copyright (C) 2016 Michael Soegtrop + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_LPE_BOOL_H +#define INKSCAPE_LPE_BOOL_H + +#include "livarot/LivarotDefs.h" +#include "live_effects/effect.h" +#include "live_effects/parameter/bool.h" +#include "live_effects/parameter/enum.h" +#include "live_effects/parameter/hidden.h" +#include "live_effects/parameter/originalsatellite.h" +#include "live_effects/parameter/parameter.h" + +namespace Inkscape { +namespace LivePathEffect { + +class LPEBool : public Effect { +public: + LPEBool(LivePathEffectObject *lpeobject); + ~LPEBool() override; + + void doEffect(SPCurve *curve) override; + void addCanvasIndicators(SPLPEItem const *lpeitem, std::vector<Geom::PathVector> &hp_vec) override; + void doBeforeEffect(SPLPEItem const *lpeitem) override; + void transform_multiply(Geom::Affine const &postmul, bool set) override; + void doAfterEffect(SPLPEItem const* lpeitem, SPCurve *curve) override; + void doOnVisibilityToggled(SPLPEItem const * /*lpeitem*/) override; + void doOnRemove(SPLPEItem const * /*lpeitem*/) override; + bool doOnOpen(SPLPEItem const *lpeitem) override; + void add_filter(); + void fractureit(SPObject * operandit, Geom::PathVector unionpv); + void divisionit(SPObject * operand_a, SPObject * operand_b, Geom::PathVector unionpv); + Geom::PathVector get_union(SPObject *root, SPObject *object, bool prefear_original = false); + Inkscape::XML::Node *dupleNode(SPObject * origin, Glib::ustring element_type); + void remove_filter(SPObject *object); + enum bool_op_ex + { + bool_op_ex_union = bool_op_union, + bool_op_ex_inters = bool_op_inters, + bool_op_ex_diff = bool_op_diff, + bool_op_ex_symdiff = bool_op_symdiff, + bool_op_ex_cut = bool_op_cut, + bool_op_ex_cut_both, + // bool_op_ex_slice = bool_op_slice, + // bool_op_ex_slice_inside, // like bool_op_slice, but leaves only the contour pieces inside of the cut path + // bool_op_ex_slice_outside, // like bool_op_slice, but leaves only the contour pieces outside of the cut path + bool_op_ex_count + }; + + inline friend bool_op to_bool_op(bool_op_ex val) + { + //assert(val <= bool_op_ex_slice); + assert(val <= bool_op_ex_cut); + return (bool_op) val; + } + +private: + LPEBool(const LPEBool &) = delete; + LPEBool &operator=(const LPEBool &) = delete; + + OriginalSatelliteParam operand_item; + EnumParam<bool_op_ex> bool_operation; + EnumParam<fill_typ> fill_type_this; + EnumParam<fill_typ> fill_type_operand; + BoolParam swap_operands; + BoolParam rmv_inner; + bool legacytest_livarotonly = false; + bool onremove = false; + SPItem *operand = nullptr; + SPObject *parentlpe = nullptr; + SPGroup *division = nullptr; + SPGroup *division_both = nullptr; + SPGroup *division_other = nullptr; + Glib::ustring operand_id = ""; + Glib::ustring division_id = ""; + Glib::ustring division_other_id = ""; + HiddenParam filter; + Geom::PathVector _hp; + Geom::Affine prev_affine; + bool reverse = false; +}; + +}; //namespace LivePathEffect +}; //namespace Inkscape + +#endif |