doxygen: add newline after \file
[blender.git] / source / blender / bmesh / operators / bmo_unsubdivide.c
1 /*
2  * This program is free software; you can redistribute it and/or
3  * modify it under the terms of the GNU General Public License
4  * as published by the Free Software Foundation; either version 2
5  * of the License, or (at your option) any later version.
6  *
7  * This program is distributed in the hope that it will be useful,
8  * but WITHOUT ANY WARRANTY; without even the implied warranty of
9  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
10  * GNU General Public License for more details.
11  *
12  * You should have received a copy of the GNU General Public License
13  * along with this program; if not, write to the Free Software Foundation,
14  * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
15  */
16
17 /** \file
18  * \ingroup bmesh
19  *
20  * Pattern based geometry reduction which has the result similar to undoing
21  * a subdivide operation.
22  */
23
24 #include "BLI_math.h"
25 #include "BLI_utildefines.h"
26
27 #include "bmesh.h"
28 #include "bmesh_tools.h"
29
30 #include "intern/bmesh_operators_private.h" /* own include */
31
32 /* - BMVert.flag & BM_ELEM_TAG:  shows we touched this vert
33  * - BMVert.index == -1:         shows we will remove this vert
34  */
35 void bmo_unsubdivide_exec(BMesh *bm, BMOperator *op)
36 {
37         BMVert *v;
38         BMIter iter;
39
40         const int iterations = max_ii(1, BMO_slot_int_get(op->slots_in, "iterations"));
41
42         BMOpSlot *vinput = BMO_slot_get(op->slots_in, "verts");
43         BMVert **vinput_arr = (BMVert **)vinput->data.buf;
44         int v_index;
45
46         /* tag verts */
47         BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
48                 BM_elem_flag_disable(v, BM_ELEM_TAG);
49         }
50         for (v_index = 0; v_index < vinput->len; v_index++) {
51                 v = vinput_arr[v_index];
52                 BM_elem_flag_enable(v, BM_ELEM_TAG);
53         }
54
55         /* do all the real work here */
56         BM_mesh_decimate_unsubdivide_ex(bm, iterations, true);
57 }