[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [40981] branches/bmesh/blender/source/ blender: Add nodoubles arg to BM_Make_Face
Andrew Wiggin
ender79bl at gmail.com
Thu Oct 13 06:58:37 CEST 2011
Revision: 40981
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=40981
Author: ender79
Date: 2011-10-13 04:58:34 +0000 (Thu, 13 Oct 2011)
Log Message:
-----------
Add nodoubles arg to BM_Make_Face
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/bmesh.h
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
branches/bmesh/blender/source/blender/bmesh/operators/bevel.c
branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
Modified: branches/bmesh/blender/source/blender/bmesh/bmesh.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/bmesh.h 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/bmesh.h 2011-10-13 04:58:34 UTC (rev 40981)
@@ -131,7 +131,7 @@
struct BMEdge *BM_Make_Edge ( struct BMesh *bm, struct BMVert *v1, struct BMVert *v2, const struct BMEdge *example, int nodouble );
struct BMFace *BM_Make_Quadtriangle ( struct BMesh *bm, struct BMVert **verts, BMEdge **edges, int len, const struct BMFace *example, int nodouble );
-BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len);
+BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len, int nodouble);
/*more easier to use version of BM_Make_Quadtriangle.
creates edges if necassary.*/
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_construct.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -207,7 +207,7 @@
if(!edar[2]) edar[2] = BM_Make_Edge(bm, verts[2], verts[0], NULL, 0);
}
- f = BM_Make_Face(bm, verts, edar, len);
+ f = BM_Make_Face(bm, verts, edar, len, 0);
if(example && f)
BM_Copy_Attributes(bm, bm, example, f);
@@ -353,16 +353,8 @@
goto err;
}
- /*check if face already exists*/
- if(nodouble)
- overlap = BM_Face_Exists(bm, verts, len, &f);
+ f = BM_Make_Face(bm, verts, edges2, len, nodouble);
- /*create the face, if necassary*/
- if (!f && !overlap)
- f = BM_Make_Face(bm, verts, edges2, len);
- else if (!overlap)
- f = NULL;
-
/*clean up flags*/
for (i=0; i<len; i++) {
bmesh_api_clearflag(edges2[i], _FLAG_MF);
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_mods.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -470,7 +470,7 @@
l = l->next;
} while (l != bm_firstfaceloop(f));
- f2 = BM_Make_Face(bm, verts, edges, BLI_array_count(verts));
+ f2 = BM_Make_Face(bm, verts, edges, BLI_array_count(verts), 0);
l = bm_firstfaceloop(f2);
i = 0;
do {
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_newcore.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -179,7 +179,7 @@
l = l->next;
} while (l != bm_firstfaceloop(f));
- f2 = BM_Make_Face(bm, verts, edges, f->len);
+ f2 = BM_Make_Face(bm, verts, edges, f->len, 0);
BM_Copy_Attributes(bm, bm, f, f2);
@@ -194,16 +194,27 @@
return f2;
}
-BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len) {
- BMFace *f;
+BMFace *BM_Make_Face(BMesh *bm, BMVert **verts, BMEdge **edges, int len, int nodouble) {
+ BMFace *f = NULL;
BMLoop *l, *startl, *lastl;
- int i;
+ int i, overlap;
if (len == 0) {
/*just return NULL for now*/
return NULL;
}
+ if (nodouble) {
+ /* Check if face already exists */
+ overlap = BM_Face_Exists(bm, verts, len, &f);
+ if (overlap) {
+ return f;
+ }
+ else {
+ BLI_assert(f == NULL);
+ }
+ }
+
f = BLI_mempool_calloc(bm->fpool);
bm->totface += 1;
f->head.type = BM_FACE;
@@ -1752,7 +1763,7 @@
/*
* BMESH UNGLUE REGION MAKE VERT
*
- * Disconnects a face from its vertex fan at loop sl.
+ * Disconnects sf from the vertex fan at sv
*/
BMVert *bmesh_urmv(BMesh *bm, BMFace *sf, BMVert *sv)
{
Modified: branches/bmesh/blender/source/blender/bmesh/operators/bevel.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bevel.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bevel.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -128,10 +128,8 @@
}
#else
/*oddly, this simplistic method seems to work the best*/
- mul_v3_fl(vec1, fac);
- mul_v3_fl(vec2, fac);
add_v3_v3(vec1, vec2);
- mul_v3_fl(vec1, 0.5);
+ mul_v3_fl(vec1, fac * 0.5);
if (inv)
negate_v3(vec1);
@@ -151,7 +149,7 @@
BMVert *v;
BMFace **faces = NULL, *f;
LoopTag *tags=NULL, *tag;
- EdgeTag *etags = NULL, *etag;
+ EdgeTag *etags = NULL;
BMVert **verts = NULL;
BMEdge **edges = NULL;
BLI_array_declare(faces);
@@ -186,7 +184,7 @@
BMEdge *edges[2] = {e, BM_Make_Edge(bm, e->v1, e->v2, e, 0)};
BMO_SetFlag(bm, edges[1], BEVEL_FLAG);
- BM_Make_Face(bm, verts, edges, 2);
+ BM_Make_Face(bm, verts, edges, 2, 0);
}
#endif
}
@@ -383,7 +381,7 @@
}
}
- /*create new faces*/
+ /*create new faces inset from original faces*/
for (i=0; i<BLI_array_count(faces); i++) {
BMLoop *l;
BMIter liter;
@@ -411,8 +409,7 @@
}
lastv=tag->newv;
- etag = etags + BM_GetIndex(l->e);
- v2 = l->next->v == l->e->v1 ? etag->newv1 : etag->newv2;
+ v2 = ETAG_GET(l->e, l->next->v);
tag = tags + BM_GetIndex(l->next);
if (!BMO_TestFlag(bm, l->e, BEVEL_FLAG) && v2 && v2 != tag->newv) {
@@ -431,9 +428,9 @@
BM_Copy_Attributes(bm, bm, bm_firstfaceloop(faces[i])->prev->e, e);
BLI_array_append(edges, e);
- f = BM_Make_Ngon(bm, verts[0], verts[1], edges, BLI_array_count(verts), 0);
+ f = BM_Make_Ngon(bm, verts[0], verts[1], edges, BLI_array_count(edges), 0);
if (!f) {
- printf("eck!!\n");
+ printf("eek!!\n");
continue;
}
@@ -463,6 +460,7 @@
v4 = tags[BM_GetIndex(l->radial_next->next)].newv;
}
} else {
+ /*the loop is on a boundary*/
v3 = l->next->v;
v4 = l->v;
@@ -628,7 +626,7 @@
}
/*find edges that exist between vertices in verts. this is basically
- a topological walk of the edges connecting them.*/
+ a topological walk of the edges connecting them.*/
vstart = vstart ? vstart : verts[0];
vv = vstart;
do {
@@ -661,8 +659,8 @@
continue;
/*there may not be a complete loop of edges, so start again and make
- final edge afterwards. in this case, the previous loop worked to
- find one of the two edges at the extremes.*/
+ final edge afterwards. in this case, the previous loop worked to
+ find one of the two edges at the extremes.*/
if (vv != vstart) {
/*undo previous tagging*/
for (i=0; i<BLI_array_count(verts); i++) {
@@ -791,7 +789,7 @@
}
}
#if 0
- /*clean up any remainin 2-edged faces*/
+ /*clean up any remaining 2-edged faces*/
BM_ITER(f, &iter, bm, BM_FACES_OF_MESH, NULL) {
if (f->len == 2) {
BMFace *faces[2] = {f, bm_firstfaceloop(f)->radial_next->f};
Modified: branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/bmesh_dupeops.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -124,7 +124,7 @@
}
/*create new face*/
- target_face = BM_Make_Face(target_mesh, vtar, edar, source_face->len);
+ target_face = BM_Make_Face(target_mesh, vtar, edar, source_face->len, 0);
BMO_Insert_MapPointer(source_mesh, op,
"facemap", source_face, target_face);
BMO_Insert_MapPointer(source_mesh, op,
@@ -259,6 +259,7 @@
if (edar) {
MEM_freeN(edar);
}
+ /*free vert pointer array*/
if (vtar) {
MEM_freeN(vtar);
}
Modified: branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/edgesplitop.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -90,7 +90,7 @@
edges_tmp[i] = BM_Make_Edge(bm, lastv1, lastv2, NULL, 1);
- f2 = BM_Make_Face(bm, verts, edges_tmp, f->len);
+ f2 = BM_Make_Face(bm, verts, edges_tmp, f->len, 0);
if (!f2) {
return NULL;
}
Modified: branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/bmesh/operators/mesh_conv.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -59,7 +59,7 @@
float (*keyco)[3]= NULL;
int *keyi;
int set_key = BMO_Get_Int(op, "set_shapekey");
- int totuv, i, j, li, allocsize[4] = {512, 512, 2048, 512};
+ int totuv, i, j, allocsize[4] = {512, 512, 2048, 512};
if (!me || !me->totvert) return; /*sanity check*/
@@ -191,7 +191,6 @@
}
mpoly = me->mpoly;
- li = 0;
for (i=0; i<me->totpoly; i++, mpoly++) {
BMVert *v1, *v2;
BMIter iter;
@@ -220,7 +219,7 @@
v2 = fedges[0]->v1;
}
- f = BM_Make_Face(bm, verts, fedges, mpoly->totloop);
+ f = BM_Make_Face(bm, verts, fedges, mpoly->totloop, 0);
if (!f) {
printf("Warning! Bad face in mesh"
@@ -241,7 +240,6 @@
j = 0;
BM_ITER(l, &iter, bm, BM_LOOPS_OF_FACE, f) {
CustomData_to_bmesh_block(&me->ldata, &bm->ldata, mpoly->loopstart+j, &l->head.data);
- li++;
j++;
}
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-10-13 04:44:39 UTC (rev 40980)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-10-13 04:58:34 UTC (rev 40981)
@@ -2355,7 +2355,6 @@
BMLoop *l;
BMEdge *e, *e2, *closest = NULL;
BMVert *v, *ripvert = NULL;
- BMFace *f;
int side = 0, i, singlesel = 0;
float projectMat[4][4], fmval[3] = {event->mval[0], event->mval[1]};
float dist = FLT_MAX, d;
More information about the Bf-blender-cvs
mailing list