Code Cleanup: move delete funcs out of bmesh_construct.c into own file
This commit is contained in:
@@ -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
|
||||
|
@@ -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"
|
||||
|
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
/*************************************************************/
|
||||
|
||||
|
||||
|
@@ -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);
|
||||
|
259
source/blender/bmesh/intern/bmesh_delete.c
Normal file
259
source/blender/bmesh/intern/bmesh_delete.c
Normal file
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
36
source/blender/bmesh/intern/bmesh_delete.h
Normal file
36
source/blender/bmesh/intern/bmesh_delete.h
Normal file
@@ -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__ */
|
Reference in New Issue
Block a user