src/editmodes/magicwandmode.h

changeset 823
1a2f593f0c02
parent 818
748ba8818af8
child 824
6add2126e7ff
equal deleted inserted replaced
821:a67b1201942a 823:1a2f593f0c02
1 /*
2 * LDForge: LDraw parts authoring CAD
3 * Copyright (C) 2013, 2014 Santeri Piippo
4 *
5 * This program is free software: you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation, either version 3 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with this program. If not, see <http://www.gnu.org/licenses/>.
17 */
18
19 #pragma once
20 #include "abstracteditmode.h"
21 #include "../basics.h"
22 #include <QMap>
23 #include <QVector>
24
25 class MagicWandMode : public AbstractSelectMode
26 {
27 QMap<Vertex, QVector<LDObjectPtr>> _vertices;
28 QVector<LDObjectPtr> _selection;
29
30 DEFINE_CLASS (MagicWandMode, AbstractSelectMode)
31
32 public:
33 using BoundaryType = std::tuple<Vertex, Vertex>;
34 enum MagicType
35 {
36 Set,
37 Additive,
38 Subtractive,
39 InternalRecursion
40 };
41
42 MagicWandMode (GLRenderer* renderer);
43 void doMagic (LDObjectPtr obj, MagicType type);
44 virtual EditModeType type() const override;
45 virtual void mouseReleased (MouseEventData const& data) override;
46
47 private:
48 void fillBoundaries (LDObjectPtr obj, QVector<BoundaryType>& boundaries, QVector<LDObjectPtr>& candidates);
49 };

mercurial