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:
Diffstat (limited to 'source/blender/bmesh')
-rw-r--r--source/blender/bmesh/intern/bmesh_operators.c3
-rw-r--r--source/blender/bmesh/operators/bmo_create.c2
-rw-r--r--source/blender/bmesh/operators/bmo_dupe.c21
-rw-r--r--source/blender/bmesh/operators/bmo_extrude.c91
4 files changed, 29 insertions, 88 deletions
diff --git a/source/blender/bmesh/intern/bmesh_operators.c b/source/blender/bmesh/intern/bmesh_operators.c
index 7f8b40d85dc..63c00d5b545 100644
--- a/source/blender/bmesh/intern/bmesh_operators.c
+++ b/source/blender/bmesh/intern/bmesh_operators.c
@@ -561,8 +561,6 @@ static int bmo_mesh_flag_count(BMesh *bm, const char htype, const short oflag,
BMElemF *ele_f;
int i;
- BLI_assert((unsigned int)test_for_enabled <= 1);
-
for (i = 0; i < 3; i++) {
if (htype & flag_types[i]) {
BM_ITER_MESH (ele_f, &iter, bm, iter_types[i]) {
@@ -937,7 +935,6 @@ static void bmo_slot_buffer_from_flag(BMesh *bm, BMOperator *op,
int totelement, i = 0;
BLI_assert(op->slots_in == slot_args || op->slots_out == slot_args);
- BLI_assert((unsigned int)test_for_enabled <= 1);
if (test_for_enabled)
totelement = BMO_mesh_enabled_flag_count(bm, htype, oflag);
diff --git a/source/blender/bmesh/operators/bmo_create.c b/source/blender/bmesh/operators/bmo_create.c
index ad858c514d2..e43c04f7d08 100644
--- a/source/blender/bmesh/operators/bmo_create.c
+++ b/source/blender/bmesh/operators/bmo_create.c
@@ -217,7 +217,7 @@ void bmo_contextual_create_exec(BMesh *bm, BMOperator *op)
/* Continue with ad-hoc fill methods since operators fail,
* edge, vcloud... may add more */
- if (0) { /* nice feature but perhaps it should be a different tool? */
+ if (0) { /* nice feature but perhaps it should be a different tool? */
/* tricky feature for making a line/edge from selection history...
*
diff --git a/source/blender/bmesh/operators/bmo_dupe.c b/source/blender/bmesh/operators/bmo_dupe.c
index e41fbd69616..d65e2669a58 100644
--- a/source/blender/bmesh/operators/bmo_dupe.c
+++ b/source/blender/bmesh/operators/bmo_dupe.c
@@ -130,9 +130,11 @@ static BMFace *copy_face(BMOperator *op,
BMOpSlot *slot_facemap_out,
BMesh *source_mesh,
BMFace *source_face, BMesh *target_mesh,
- BMVert **vtar, BMEdge **edar, GHash *vhash, GHash *ehash)
+ GHash *vhash, GHash *ehash)
{
/* BMVert *target_vert1, *target_vert2; */ /* UNUSED */
+ BMVert **vtar = BLI_array_alloca(vtar, source_face->len);
+ BMEdge **edar = BLI_array_alloca(edar, source_face->len);
BMLoop *source_loop, *target_loop;
BMFace *target_face = NULL;
BMIter iter, iter2;
@@ -190,11 +192,6 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_src, BMesh *bm_dst)
BMVert *v = NULL, *v2;
BMEdge *e = NULL;
BMFace *f = NULL;
-
- BLI_array_declare(vtar);
- BLI_array_declare(edar);
- BMVert **vtar = NULL;
- BMEdge **edar = NULL;
BMIter viter, eiter, fiter;
GHash *vhash, *ehash;
@@ -280,14 +277,7 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_src, BMesh *bm_dst)
}
}
- /* ensure arrays are the right size */
- BLI_array_empty(vtar);
- BLI_array_empty(edar);
-
- BLI_array_grow_items(vtar, f->len);
- BLI_array_grow_items(edar, f->len);
-
- copy_face(op, slot_face_map_out, bm_src, f, bm_dst, vtar, edar, vhash, ehash);
+ copy_face(op, slot_face_map_out, bm_src, f, bm_dst, vhash, ehash);
BMO_elem_flag_enable(bm_src, f, DUPE_DONE);
}
}
@@ -295,9 +285,6 @@ static void bmo_mesh_copy(BMOperator *op, BMesh *bm_src, BMesh *bm_dst)
/* free pointer hashes */
BLI_ghash_free(vhash, NULL, NULL);
BLI_ghash_free(ehash, NULL, NULL);
-
- BLI_array_free(vtar); /* free vert pointer array */
- BLI_array_free(edar); /* free edge pointer array */
}
/**
diff --git a/source/blender/bmesh/operators/bmo_extrude.c b/source/blender/bmesh/operators/bmo_extrude.c
index 32c8ee50e05..070cc187045 100644
--- a/source/blender/bmesh/operators/bmo_extrude.c
+++ b/source/blender/bmesh/operators/bmo_extrude.c
@@ -31,7 +31,6 @@
#include "DNA_meshdata_types.h"
#include "BLI_math.h"
-#include "BLI_array.h"
#include "BLI_buffer.h"
#include "BKE_customdata.h"
@@ -54,84 +53,42 @@ enum {
void bmo_extrude_discrete_faces_exec(BMesh *bm, BMOperator *op)
{
- BMVert **verts = NULL;
- BLI_array_declare(verts);
- BMEdge **edges = NULL;
- BLI_array_declare(edges);
-
BMOIter siter;
- BMIter liter, liter2;
- BMFace *f, *f2, *f3;
- BMLoop *l, *l2, *l3, *l4, *l_tmp;
- BMEdge *e, *laste;
- BMVert *v, *lastv, *firstv;
- int i;
+ BMFace *f_org;
- BMO_ITER (f, &siter, op->slots_in, "faces", BM_FACE) {
- BLI_array_empty(verts);
- BLI_array_empty(edges);
- BLI_array_grow_items(verts, f->len);
- BLI_array_grow_items(edges, f->len);
-
- i = 0;
- firstv = lastv = NULL;
- BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
- v = BM_vert_create(bm, l->v->co, l->v, 0);
- /* skip on the first iteration */
- if (lastv) {
- e = BM_edge_create(bm, lastv, v, l->e, 0);
- edges[i] = e;
- verts[i] = lastv;
- i++;
- }
+ BMO_ITER (f_org, &siter, op->slots_in, "faces", BM_FACE) {
+ BMFace *f_new;
+ BMLoop *l_org, *l_org_first;
+ BMLoop *l_new;
- lastv = v;
- laste = l->e;
- if (!firstv) firstv = v;
- }
+ BMO_elem_flag_enable(bm, f_org, EXT_DEL);
- /* this fits in the array because we skip one in the loop above */
- e = BM_edge_create(bm, v, firstv, laste, 0);
- edges[i] = e;
- verts[i] = lastv;
- i++;
+ f_new = BM_face_copy(bm, bm, f_org, true, true);
+ BMO_elem_flag_enable(bm, f_new, EXT_KEEP);
- BMO_elem_flag_enable(bm, f, EXT_DEL);
+ l_org = l_org_first = BM_FACE_FIRST_LOOP(f_org);
+ l_new = BM_FACE_FIRST_LOOP(f_new);
- f2 = BM_face_create(bm, verts, edges, f->len, 0);
- if (UNLIKELY(f2 == NULL)) {
- BMO_error_raise(bm, op, BMERR_MESH_ERROR, "Extrude failed: could not create face");
- BLI_array_free(edges);
- return;
- }
-
- BMO_elem_flag_enable(bm, f2, EXT_KEEP);
- BM_elem_attrs_copy(bm, bm, f, f2);
-
- l2 = BM_iter_new(&liter2, bm, BM_LOOPS_OF_FACE, f2);
- BM_ITER_ELEM (l, &liter, f, BM_LOOPS_OF_FACE) {
- BM_elem_attrs_copy(bm, bm, l, l2);
-
- l3 = l->next;
- l4 = l2->next;
+ do {
+ BMFace *f_side;
+ BMLoop *l_side_iter;
- f3 = BM_face_create_quad_tri(bm, l3->v, l4->v, l2->v, l->v, f, false);
- /* XXX, no error check here, why? - Campbell */
+ BM_elem_attrs_copy(bm, bm, l_org, l_new);
- l_tmp = BM_FACE_FIRST_LOOP(f3);
+ f_side = BM_face_create_quad_tri(bm,
+ l_org->next->v, l_new->next->v, l_new->v, l_org->v,
+ f_org, false);
- BM_elem_attrs_copy(bm, bm, l->next, l_tmp); l_tmp = l_tmp->next;
- BM_elem_attrs_copy(bm, bm, l->next, l_tmp); l_tmp = l_tmp->next;
- BM_elem_attrs_copy(bm, bm, l, l_tmp); l_tmp = l_tmp->next;
- BM_elem_attrs_copy(bm, bm, l, l_tmp);
+ l_side_iter = BM_FACE_FIRST_LOOP(f_side);
- l2 = BM_iter_step(&liter2);
- }
+ BM_elem_attrs_copy(bm, bm, l_org->next, l_side_iter); l_side_iter = l_side_iter->next;
+ BM_elem_attrs_copy(bm, bm, l_org->next, l_side_iter); l_side_iter = l_side_iter->next;
+ BM_elem_attrs_copy(bm, bm, l_org, l_side_iter); l_side_iter = l_side_iter->next;
+ BM_elem_attrs_copy(bm, bm, l_org, l_side_iter);
+ } while (((l_new = l_new->next),
+ (l_org = l_org->next)) != l_org_first);
}
- BLI_array_free(verts);
- BLI_array_free(edges);
-
BMO_op_callf(bm, op->flag,
"delete geom=%ff context=%i",
EXT_DEL, DEL_ONLYFACES);