Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2014-01-17 02:21:30 +0400
committerCampbell Barton <ideasman42@gmail.com>2014-01-17 02:21:30 +0400
commite7a6efa2a78f216db928617c73a12b784aaf21e8 (patch)
tree27cc1376d3f05ddaa2df782a71a8b167569fed5d /source/blender/bmesh
parentd9bbcb371a73b87532877791a948ceddde288b07 (diff)
Code Cleanup: move delete funcs out of bmesh_construct.c into own file
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/CMakeLists.txt2
-rw-r--r--source/blender/bmesh/bmesh.h1
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.c219
-rw-r--r--source/blender/bmesh/intern/bmesh_construct.h6
-rw-r--r--source/blender/bmesh/intern/bmesh_delete.c259
-rw-r--r--source/blender/bmesh/intern/bmesh_delete.h36
6 files changed, 298 insertions, 225 deletions
diff --git a/source/blender/bmesh/CMakeLists.txt b/source/blender/bmesh/CMakeLists.txt
index 8d87e290b6c..2cd256e2346 100644
--- a/source/blender/bmesh/CMakeLists.txt
+++ b/source/blender/bmesh/CMakeLists.txt
@@ -80,6 +80,8 @@ set(SRC
intern/bmesh_core.h
intern/bmesh_edgeloop.c
intern/bmesh_edgeloop.h
+ intern/bmesh_delete.c
+ intern/bmesh_delete.h
intern/bmesh_inline.h
intern/bmesh_interp.c
intern/bmesh_interp.h
diff --git a/source/blender/bmesh/bmesh.h b/source/blender/bmesh/bmesh.h
index 52aeff77fca..8b5250b7c1e 100644
--- a/source/blender/bmesh/bmesh.h
+++ b/source/blender/bmesh/bmesh.h
@@ -244,6 +244,7 @@ extern "C" {
#include "intern/bmesh_core.h"
#include "intern/bmesh_construct.h"
+#include "intern/bmesh_delete.h"
#include "intern/bmesh_edgeloop.h"
#include "intern/bmesh_interp.h"
#include "intern/bmesh_iterators.h"
diff --git a/source/blender/bmesh/intern/bmesh_construct.c b/source/blender/bmesh/intern/bmesh_construct.c
index 1a7464ce340..a8f8f92518a 100644
--- a/source/blender/bmesh/intern/bmesh_construct.c
+++ b/source/blender/bmesh/intern/bmesh_construct.c
@@ -494,225 +494,6 @@ BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len,
return f;
}
-/**
- * Called by operators to remove elements that they have marked for
- * removal.
- */
-void BMO_remove_tagged_faces(BMesh *bm, const short oflag)
-{
- BMFace *f, *f_next;
- BMIter iter;
-
- BM_ITER_MESH_MUTABLE (f, f_next, &iter, bm, BM_FACES_OF_MESH) {
- if (BMO_elem_flag_test(bm, f, oflag)) {
- BM_face_kill(bm, f);
- }
- }
-}
-
-void BMO_remove_tagged_edges(BMesh *bm, const short oflag)
-{
- BMEdge *e, *e_next;
- BMIter iter;
-
- BM_ITER_MESH_MUTABLE (e, e_next, &iter, bm, BM_EDGES_OF_MESH) {
- if (BMO_elem_flag_test(bm, e, oflag)) {
- BM_edge_kill(bm, e);
- }
- }
-}
-
-void BMO_remove_tagged_verts(BMesh *bm, const short oflag)
-{
- BMVert *v, *v_next;
- BMIter iter;
-
- BM_ITER_MESH_MUTABLE (v, v_next, &iter, bm, BM_VERTS_OF_MESH) {
- if (BMO_elem_flag_test(bm, v, oflag)) {
- BM_vert_kill(bm, v);
- }
- }
-}
-
-/**
- * you need to make remove tagged verts/edges/faces
- * api functions that take a filter callback.....
- * and this new filter type will be for opstack flags.
- * This is because the BM_remove_taggedXXX functions bypass iterator API.
- * - Ops don't care about 'UI' considerations like selection state, hide state, etc.
- * If you want to work on unhidden selections for instance,
- * copy output from a 'select context' operator to another operator....
- */
-
-static void bmo_remove_tagged_context_verts(BMesh *bm, const short oflag)
-{
- BMVert *v;
- BMEdge *e;
- BMFace *f;
-
- BMIter iter;
- BMIter itersub;
-
- BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
- if (BMO_elem_flag_test(bm, v, oflag)) {
- /* Visit edge */
- BM_ITER_ELEM (e, &itersub, v, BM_EDGES_OF_VERT) {
- BMO_elem_flag_enable(bm, e, oflag);
- }
- /* Visit face */
- BM_ITER_ELEM (f, &itersub, v, BM_FACES_OF_VERT) {
- BMO_elem_flag_enable(bm, f, oflag);
- }
- }
- }
-
- BMO_remove_tagged_faces(bm, oflag);
- BMO_remove_tagged_edges(bm, oflag);
- BMO_remove_tagged_verts(bm, oflag);
-}
-
-static void bmo_remove_tagged_context_edges(BMesh *bm, const short oflag)
-{
- BMEdge *e;
- BMFace *f;
-
- BMIter iter;
- BMIter itersub;
-
- BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
- if (BMO_elem_flag_test(bm, e, oflag)) {
- BM_ITER_ELEM (f, &itersub, e, BM_FACES_OF_EDGE) {
- BMO_elem_flag_enable(bm, f, oflag);
- }
- }
- }
- BMO_remove_tagged_faces(bm, oflag);
- BMO_remove_tagged_edges(bm, oflag);
-}
-
-#define DEL_WIREVERT (1 << 10)
-
-/**
- * \warning oflag applies to different types in some contexts,
- * not just the type being removed.
- *
- * \warning take care, uses operator flag DEL_WIREVERT
- */
-void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type)
-{
- BMVert *v;
- BMEdge *e;
- BMFace *f;
-
- BMIter viter;
- BMIter eiter;
- BMIter fiter;
-
- switch (type) {
- case DEL_VERTS:
- {
- bmo_remove_tagged_context_verts(bm, oflag);
-
- break;
- }
- case DEL_EDGES:
- {
- /* flush down to vert */
- BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
- if (BMO_elem_flag_test(bm, e, oflag)) {
- BMO_elem_flag_enable(bm, e->v1, oflag);
- BMO_elem_flag_enable(bm, e->v2, oflag);
- }
- }
- bmo_remove_tagged_context_edges(bm, oflag);
- /* remove loose vertice */
- BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) {
- if (BMO_elem_flag_test(bm, v, oflag) && (!(v->e)))
- BMO_elem_flag_enable(bm, v, DEL_WIREVERT);
- }
- BMO_remove_tagged_verts(bm, DEL_WIREVERT);
-
- break;
- }
- case DEL_EDGESFACES:
- {
- bmo_remove_tagged_context_edges(bm, oflag);
-
- break;
- }
- case DEL_ONLYFACES:
- {
- BMO_remove_tagged_faces(bm, oflag);
-
- break;
- }
- case DEL_ONLYTAGGED:
- {
- BMO_remove_tagged_faces(bm, oflag);
- BMO_remove_tagged_edges(bm, oflag);
- BMO_remove_tagged_verts(bm, oflag);
-
- break;
- }
- case DEL_FACES:
- {
- /* go through and mark all edges and all verts of all faces for delete */
- BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
- if (BMO_elem_flag_test(bm, f, oflag)) {
- for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter))
- BMO_elem_flag_enable(bm, e, oflag);
- for (v = BM_iter_new(&viter, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&viter))
- BMO_elem_flag_enable(bm, v, oflag);
- }
- }
- /* now go through and mark all remaining faces all edges for keeping */
- BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
- if (!BMO_elem_flag_test(bm, f, oflag)) {
- for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) {
- BMO_elem_flag_disable(bm, e, oflag);
- }
- for (v = BM_iter_new(&viter, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&viter)) {
- BMO_elem_flag_disable(bm, v, oflag);
- }
- }
- }
- /* also mark all the vertices of remaining edges for keeping */
- BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
- if (!BMO_elem_flag_test(bm, e, oflag)) {
- BMO_elem_flag_disable(bm, e->v1, oflag);
- BMO_elem_flag_disable(bm, e->v2, oflag);
- }
- }
- /* now delete marked face */
- BMO_remove_tagged_faces(bm, oflag);
- /* delete marked edge */
- BMO_remove_tagged_edges(bm, oflag);
- /* remove loose vertice */
- BMO_remove_tagged_verts(bm, oflag);
-
- break;
- }
- case DEL_ALL:
- {
- /* does this option even belong in here? */
- BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
- BMO_elem_flag_enable(bm, f, oflag);
- }
- BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
- BMO_elem_flag_enable(bm, e, oflag);
- }
- BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) {
- BMO_elem_flag_enable(bm, v, oflag);
- }
-
- BMO_remove_tagged_faces(bm, oflag);
- BMO_remove_tagged_edges(bm, oflag);
- BMO_remove_tagged_verts(bm, oflag);
-
- break;
- }
- }
-}
/*************************************************************/
diff --git a/source/blender/bmesh/intern/bmesh_construct.h b/source/blender/bmesh/intern/bmesh_construct.h
index e85c97dffd9..12d3a4bd474 100644
--- a/source/blender/bmesh/intern/bmesh_construct.h
+++ b/source/blender/bmesh/intern/bmesh_construct.h
@@ -44,12 +44,6 @@ BMFace *BM_face_create_ngon_verts(BMesh *bm, BMVert **vert_arr, const int len,
BMFace *BM_face_create_ngon_vcloud(BMesh *bm, BMVert **vert_arr, int len,
const BMFace *f_example, const eBMCreateFlag create_flag);
-void BMO_remove_tagged_faces(BMesh *bm, const short oflag);
-void BMO_remove_tagged_edges(BMesh *bm, const short oflag);
-void BMO_remove_tagged_verts(BMesh *bm, const short oflag);
-
-void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type);
-
void BM_elem_attrs_copy_ex(BMesh *bm_src, BMesh *bm_dst, const void *ele_src_v, void *ele_dst_v,
const char hflag_mask);
void BM_elem_attrs_copy(BMesh *bm_src, BMesh *bm_dst, const void *ele_src_v, void *ele_dst_v);
diff --git a/source/blender/bmesh/intern/bmesh_delete.c b/source/blender/bmesh/intern/bmesh_delete.c
new file mode 100644
index 00000000000..45d95fce546
--- /dev/null
+++ b/source/blender/bmesh/intern/bmesh_delete.c
@@ -0,0 +1,259 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * The Original Code is Copyright (C) 2007 Blender Foundation.
+ * All rights reserved.
+ *
+ * The Original Code is: all of this file.
+ *
+ * Contributor(s): Geoffrey Bantle.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/bmesh/intern/bmesh_delete.c
+ * \ingroup bmesh
+ *
+ * BM remove functions.
+ */
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+
+#include "bmesh.h"
+#include "intern/bmesh_private.h"
+
+/**
+ * Called by operators to remove elements that they have marked for
+ * removal.
+ */
+void BMO_remove_tagged_faces(BMesh *bm, const short oflag)
+{
+ BMFace *f, *f_next;
+ BMIter iter;
+
+ BM_ITER_MESH_MUTABLE (f, f_next, &iter, bm, BM_FACES_OF_MESH) {
+ if (BMO_elem_flag_test(bm, f, oflag)) {
+ BM_face_kill(bm, f);
+ }
+ }
+}
+
+void BMO_remove_tagged_edges(BMesh *bm, const short oflag)
+{
+ BMEdge *e, *e_next;
+ BMIter iter;
+
+ BM_ITER_MESH_MUTABLE (e, e_next, &iter, bm, BM_EDGES_OF_MESH) {
+ if (BMO_elem_flag_test(bm, e, oflag)) {
+ BM_edge_kill(bm, e);
+ }
+ }
+}
+
+void BMO_remove_tagged_verts(BMesh *bm, const short oflag)
+{
+ BMVert *v, *v_next;
+ BMIter iter;
+
+ BM_ITER_MESH_MUTABLE (v, v_next, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BMO_elem_flag_test(bm, v, oflag)) {
+ BM_vert_kill(bm, v);
+ }
+ }
+}
+
+/**
+ * you need to make remove tagged verts/edges/faces
+ * api functions that take a filter callback.....
+ * and this new filter type will be for opstack flags.
+ * This is because the BM_remove_taggedXXX functions bypass iterator API.
+ * - Ops don't care about 'UI' considerations like selection state, hide state, etc.
+ * If you want to work on unhidden selections for instance,
+ * copy output from a 'select context' operator to another operator....
+ */
+
+static void bmo_remove_tagged_context_verts(BMesh *bm, const short oflag)
+{
+ BMVert *v;
+ BMEdge *e;
+ BMFace *f;
+
+ BMIter iter;
+ BMIter itersub;
+
+ BM_ITER_MESH (v, &iter, bm, BM_VERTS_OF_MESH) {
+ if (BMO_elem_flag_test(bm, v, oflag)) {
+ /* Visit edge */
+ BM_ITER_ELEM (e, &itersub, v, BM_EDGES_OF_VERT) {
+ BMO_elem_flag_enable(bm, e, oflag);
+ }
+ /* Visit face */
+ BM_ITER_ELEM (f, &itersub, v, BM_FACES_OF_VERT) {
+ BMO_elem_flag_enable(bm, f, oflag);
+ }
+ }
+ }
+
+ BMO_remove_tagged_faces(bm, oflag);
+ BMO_remove_tagged_edges(bm, oflag);
+ BMO_remove_tagged_verts(bm, oflag);
+}
+
+static void bmo_remove_tagged_context_edges(BMesh *bm, const short oflag)
+{
+ BMEdge *e;
+ BMFace *f;
+
+ BMIter iter;
+ BMIter itersub;
+
+ BM_ITER_MESH (e, &iter, bm, BM_EDGES_OF_MESH) {
+ if (BMO_elem_flag_test(bm, e, oflag)) {
+ BM_ITER_ELEM (f, &itersub, e, BM_FACES_OF_EDGE) {
+ BMO_elem_flag_enable(bm, f, oflag);
+ }
+ }
+ }
+ BMO_remove_tagged_faces(bm, oflag);
+ BMO_remove_tagged_edges(bm, oflag);
+}
+
+#define DEL_WIREVERT (1 << 10)
+
+/**
+ * \warning oflag applies to different types in some contexts,
+ * not just the type being removed.
+ *
+ * \warning take care, uses operator flag DEL_WIREVERT
+ */
+void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type)
+{
+ BMVert *v;
+ BMEdge *e;
+ BMFace *f;
+
+ BMIter viter;
+ BMIter eiter;
+ BMIter fiter;
+
+ switch (type) {
+ case DEL_VERTS:
+ {
+ bmo_remove_tagged_context_verts(bm, oflag);
+
+ break;
+ }
+ case DEL_EDGES:
+ {
+ /* flush down to vert */
+ BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
+ if (BMO_elem_flag_test(bm, e, oflag)) {
+ BMO_elem_flag_enable(bm, e->v1, oflag);
+ BMO_elem_flag_enable(bm, e->v2, oflag);
+ }
+ }
+ bmo_remove_tagged_context_edges(bm, oflag);
+ /* remove loose vertice */
+ BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) {
+ if (BMO_elem_flag_test(bm, v, oflag) && (!(v->e)))
+ BMO_elem_flag_enable(bm, v, DEL_WIREVERT);
+ }
+ BMO_remove_tagged_verts(bm, DEL_WIREVERT);
+
+ break;
+ }
+ case DEL_EDGESFACES:
+ {
+ bmo_remove_tagged_context_edges(bm, oflag);
+
+ break;
+ }
+ case DEL_ONLYFACES:
+ {
+ BMO_remove_tagged_faces(bm, oflag);
+
+ break;
+ }
+ case DEL_ONLYTAGGED:
+ {
+ BMO_remove_tagged_faces(bm, oflag);
+ BMO_remove_tagged_edges(bm, oflag);
+ BMO_remove_tagged_verts(bm, oflag);
+
+ break;
+ }
+ case DEL_FACES:
+ {
+ /* go through and mark all edges and all verts of all faces for delete */
+ BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
+ if (BMO_elem_flag_test(bm, f, oflag)) {
+ for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter))
+ BMO_elem_flag_enable(bm, e, oflag);
+ for (v = BM_iter_new(&viter, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&viter))
+ BMO_elem_flag_enable(bm, v, oflag);
+ }
+ }
+ /* now go through and mark all remaining faces all edges for keeping */
+ BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
+ if (!BMO_elem_flag_test(bm, f, oflag)) {
+ for (e = BM_iter_new(&eiter, bm, BM_EDGES_OF_FACE, f); e; e = BM_iter_step(&eiter)) {
+ BMO_elem_flag_disable(bm, e, oflag);
+ }
+ for (v = BM_iter_new(&viter, bm, BM_VERTS_OF_FACE, f); v; v = BM_iter_step(&viter)) {
+ BMO_elem_flag_disable(bm, v, oflag);
+ }
+ }
+ }
+ /* also mark all the vertices of remaining edges for keeping */
+ BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
+ if (!BMO_elem_flag_test(bm, e, oflag)) {
+ BMO_elem_flag_disable(bm, e->v1, oflag);
+ BMO_elem_flag_disable(bm, e->v2, oflag);
+ }
+ }
+ /* now delete marked face */
+ BMO_remove_tagged_faces(bm, oflag);
+ /* delete marked edge */
+ BMO_remove_tagged_edges(bm, oflag);
+ /* remove loose vertice */
+ BMO_remove_tagged_verts(bm, oflag);
+
+ break;
+ }
+ case DEL_ALL:
+ {
+ /* does this option even belong in here? */
+ BM_ITER_MESH (f, &fiter, bm, BM_FACES_OF_MESH) {
+ BMO_elem_flag_enable(bm, f, oflag);
+ }
+ BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
+ BMO_elem_flag_enable(bm, e, oflag);
+ }
+ BM_ITER_MESH (v, &viter, bm, BM_VERTS_OF_MESH) {
+ BMO_elem_flag_enable(bm, v, oflag);
+ }
+
+ BMO_remove_tagged_faces(bm, oflag);
+ BMO_remove_tagged_edges(bm, oflag);
+ BMO_remove_tagged_verts(bm, oflag);
+
+ break;
+ }
+ }
+}
diff --git a/source/blender/bmesh/intern/bmesh_delete.h b/source/blender/bmesh/intern/bmesh_delete.h
new file mode 100644
index 00000000000..5e9134d0f5e
--- /dev/null
+++ b/source/blender/bmesh/intern/bmesh_delete.h
@@ -0,0 +1,36 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Geoffrey Bantle.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef __BMESH_DELETE_H__
+#define __BMESH_DELETE_H__
+
+/** \file blender/bmesh/intern/bmesh_delete.h
+ * \ingroup bmesh
+ */
+
+void BMO_remove_tagged_faces(BMesh *bm, const short oflag);
+void BMO_remove_tagged_edges(BMesh *bm, const short oflag);
+void BMO_remove_tagged_verts(BMesh *bm, const short oflag);
+
+void BMO_remove_tagged_context(BMesh *bm, const short oflag, const int type);
+
+#endif /* __BMESH_DELETE_H__ */