[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [18975] branches/bmesh/blender/source/ blender/bmesh/operators/dissolveops.c: dissolve verts ( which can be executed with xkey btw) now cleans up any two-edged faces that may result.
Joseph Eagar
joeedh at gmail.com
Sun Feb 15 02:02:52 CET 2009
Revision: 18975
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=18975
Author: joeedh
Date: 2009-02-15 02:02:51 +0100 (Sun, 15 Feb 2009)
Log Message:
-----------
dissolve verts (which can be executed with xkey btw) now cleans up any two-edged faces that may result.
Modified Paths:
--------------
branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
Modified: branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 2009-02-15 00:47:19 UTC (rev 18974)
+++ branches/bmesh/blender/source/blender/bmesh/operators/dissolveops.c 2009-02-15 01:02:51 UTC (rev 18975)
@@ -9,14 +9,11 @@
#include <stdio.h>
#define FACE_MARK 1
+
+#define VERT_MARK 1
+
void dissolvefaces_exec(BMesh *bmesh, BMOperator *op)
{
- BMOpSlot *finput;
- BMFace *face;
- float projectverts[400][3];
- void *projverts;
- int i, count = 0;
-
BMO_Flag_Buffer(bmesh, op, BMOP_DISFACES_FACEIN, FACE_MARK);
/*TODO: need to discuss with Briggs how best to implement this, seems this would be
@@ -25,26 +22,44 @@
could just use dissolve disk on them.*/
}
-void dissolveverts_exec(BMesh *bmesh, BMOperator *op)
+void dissolveverts_exec(BMesh *bm, BMOperator *op)
{
BMOpSlot *vinput;
- BMVert *vert;
- int i;
+ BMIter iter, liter, fiter;
+ BMVert *v;
+ BMFace *f, *f2;
+ BMEdge *e;
+ BMLoop *l;
+ int i, found;
vinput = BMO_GetSlot(op, BMOP_DISVERTS_VERTIN);
- /*
- BMO_Flag_Buffer(bmesh, op, BMOP_DISVERTS_VERTIN, VERT_MARK);
+ BMO_Flag_Buffer(bm, op, BMOP_DISVERTS_VERTIN, VERT_MARK);
- for (vert=BMIter_New(&iter, bmesh, BM_VERTS, NULL); vert; vert=BMIter_Step(&iter)) {
- if (BMO_TestFlag(bmesh, vert, VERT_MARK)) {
- BM_Dissolve_Disk(bmesh, vert);
+ for (v=BMIter_New(&iter, bm, BM_VERTS, NULL); v; v=BMIter_Step(&iter)) {
+ if (BMO_TestFlag(bm, v, VERT_MARK)) {
+ BM_Dissolve_Disk(bm, v);
}
}
- */
- for (i=0; i<vinput->len; i++) {
- vert = ((BMVert**)vinput->data.p)[i];
- BM_Dissolve_Disk(bmesh, vert);
+ /*clean up two-edged faces*/
+ for (f=BMIter_New(&iter, bm, BM_FACES, NULL); f; f=BMIter_Step(&iter)){
+ if (f->len == 2) {
+ found = 0;
+ l = BMIter_New(&liter, bm, BM_LOOPS_OF_FACE, f);
+ for (; l; l=BMIter_Step(&liter)) {
+ f2 = BMIter_New(&fiter, bm,
+ BM_FACES_OF_EDGE, l->e);
+ for (; f2; f2=BMIter_Step(&fiter)) {
+ if (f2 != f) {
+ BM_Join_Faces(bm, f, f2, l->e,
+ 1, 0);
+ found = 1;
+ break;
+ }
+ }
+ if (found) break;
+ }
+ }
}
}
\ No newline at end of file
More information about the Bf-blender-cvs
mailing list