[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [36286] branches/bmesh/blender/source/ blender: =bmesh= brought back fill faces, alt-f
Joseph Eagar
joeedh at gmail.com
Sat Apr 23 02:05:14 CEST 2011
Revision: 36286
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=36286
Author: joeedh
Date: 2011-04-23 00:05:13 +0000 (Sat, 23 Apr 2011)
Log Message:
-----------
=bmesh= brought back fill faces, alt-f
Modified Paths:
--------------
branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c
branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
Modified: branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c
===================================================================
--- branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c 2011-04-22 23:37:58 UTC (rev 36285)
+++ branches/bmesh/blender/source/blender/blenlib/intern/scanfill.c 2011-04-23 00:05:13 UTC (rev 36286)
@@ -869,7 +869,7 @@
if( compare_v3v3(v2, eve->co, COMPLIMIT)==0) {
float inner = angle_v3v3v3(v1, v2, eve->co);
- if (fabs(inner-M_PI) < 0.05 || fabs(inner) < 0.05) {
+ if (fabs(inner-M_PI) < FLT_EPSILON*200 || fabs(inner) < FLT_EPSILON*200) {
eve = eve->next;
continue;
}
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2011-04-22 23:37:58 UTC (rev 36285)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_opdefines.c 2011-04-23 00:05:13 UTC (rev 36286)
@@ -946,7 +946,7 @@
Makes triangle a bit nicer
*/
BMOpDefine def_beautify_fill = {
- "beautify_fill",
+"beautify_fill",
{{BMOP_OPSLOT_ELEMENT_BUF, "faces"}, /* input faces */
{BMOP_OPSLOT_ELEMENT_BUF, "constrain_edges"}, /* edges that can't be flipped */
{BMOP_OPSLOT_ELEMENT_BUF, "geomout"}, /* new flipped faces and edges */
@@ -955,6 +955,20 @@
BMOP_UNTAN_MULTIRES
};
+/*
+ Triangle Fill
+
+ Fill edges with triangles
+ */
+BMOpDefine def_triangle_fill = {
+ "triangle_fill",
+ {{BMOP_OPSLOT_ELEMENT_BUF, "edges"}, /* input edges */
+ {BMOP_OPSLOT_ELEMENT_BUF, "geomout"}, /* new faces and edges */
+ {0} /*null-terminating sentinel*/},
+ bmesh_triangle_fill_exec,
+ BMOP_UNTAN_MULTIRES
+};
+
BMOpDefine *opdefines[] = {
&def_splitop,
&def_dupeop,
@@ -1016,6 +1030,7 @@
&def_join_triangles,
&def_bevel,
&def_beautify_fill,
+ &def_triangle_fill,
};
int bmesh_total_ops = (sizeof(opdefines) / sizeof(void*));
Modified: branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h 2011-04-22 23:37:58 UTC (rev 36285)
+++ branches/bmesh/blender/source/blender/bmesh/intern/bmesh_operators_private.h 2011-04-23 00:05:13 UTC (rev 36286)
@@ -70,5 +70,6 @@
void bmesh_jointriangles_exec(BMesh *bm, BMOperator *op);
void bmesh_bevel_exec(BMesh *bm, BMOperator *op);
void bmesh_beautify_fill_exec(BMesh *bm, BMOperator *op);
+void bmesh_triangle_fill_exec(BMesh *bm, BMOperator *op);
#endif
Modified: branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c
===================================================================
--- branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c 2011-04-22 23:37:58 UTC (rev 36285)
+++ branches/bmesh/blender/source/blender/bmesh/operators/triangulateop.c 2011-04-23 00:05:13 UTC (rev 36286)
@@ -1,3 +1,7 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
#include "MEM_guardedalloc.h"
#include "BKE_utildefines.h"
@@ -2,10 +6,10 @@
-#include "bmesh.h"
-#include "bmesh_private.h"
+#include "BLI_scanfill.h"
#include "BLI_math.h"
#include "BLI_array.h"
+#include "BLI_editVert.h"
+#include "BLI_smallhash.h"
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
+#include "bmesh.h"
+#include "bmesh_private.h"
@@ -128,3 +132,65 @@
BMO_Flag_To_Slot(bm, op, "geomout", ELE_NEW, BM_EDGE|BM_FACE);
}
+
+void bmesh_triangle_fill_exec(BMesh *bm, BMOperator *op)
+{
+ BMOIter siter;
+ BMEdge *e;
+ BMOperator bmop;
+ EditEdge *eed;
+ EditVert *eve, *v1, *v2;
+ EditFace *efa;
+ SmallHash hash;
+
+ BLI_smallhash_init(&hash);
+
+ BLI_begin_edgefill();
+
+ BMO_ITER(e, &siter, bm, op, "edges", BM_EDGE) {
+ BMO_SetFlag(bm, e, EDGE_MARK);
+
+ if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v1)) {
+ eve = BLI_addfillvert(e->v1->co);
+ eve->tmp.p = e->v1;
+ BLI_smallhash_insert(&hash, (uintptr_t)e->v1, eve);
+ }
+
+ if (!BLI_smallhash_haskey(&hash, (uintptr_t)e->v2)) {
+ eve = BLI_addfillvert(e->v2->co);
+ eve->tmp.p = e->v2;
+ BLI_smallhash_insert(&hash, (uintptr_t)e->v2, eve);
+ }
+
+ v1 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v1);
+ v2 = BLI_smallhash_lookup(&hash, (uintptr_t)e->v2);
+ eed = BLI_addfilledge(v1, v2);
+ eed->tmp.p = e;
+ }
+
+ BLI_edgefill(0);
+
+ for (efa=fillfacebase.first; efa; efa=efa->next) {
+ BMFace *f = BM_Make_QuadTri(bm, efa->v1->tmp.p, efa->v2->tmp.p, efa->v3->tmp.p, NULL, NULL, 1);
+ BMLoop *l;
+ BMIter liter;
+
+ BMO_SetFlag(bm, f, ELE_NEW);
+ BM_ITER(l, &liter, bm, BM_LOOPS_OF_FACE, f) {
+ if (!BMO_TestFlag(bm, l->e, EDGE_MARK)) {
+ BMO_SetFlag(bm, l->e, ELE_NEW);
+ }
+ }
+ }
+
+ BLI_end_edgefill();
+ BLI_smallhash_release(&hash);
+
+ /*clean up fill*/
+ BMO_InitOpf(bm, &bmop, "beautify_fill faces=%ff constrain_edges=%fe", ELE_NEW, EDGE_MARK);
+ BMO_Exec_Op(bm, &bmop);
+ BMO_Flag_Buffer(bm, &bmop, "geomout", ELE_NEW, BM_FACE|BM_EDGE);
+ BMO_Finish_Op(bm, &bmop);
+
+ BMO_Flag_To_Slot(bm, op, "geomout", ELE_NEW, BM_EDGE|BM_FACE);
+}
Modified: branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c
===================================================================
--- branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-04-22 23:37:58 UTC (rev 36285)
+++ branches/bmesh/blender/source/blender/editors/mesh/bmesh_tools.c 2011-04-23 00:05:13 UTC (rev 36286)
@@ -3855,17 +3855,24 @@
static int fill_mesh_exec(bContext *C, wmOperator *op)
{
-#if 0
Object *obedit= CTX_data_edit_object(C);
- EditMesh *em= BKE_mesh_get_editmesh((Mesh *)obedit->data);
-
- fill_mesh(em);
-
- BKE_mesh_end_editmesh(obedit->data, em);
-
+ BMEditMesh *em= ((Mesh *)obedit->data)->edit_btmesh;
+ BMOperator bmop;
+
+ if (!EDBM_InitOpf(em, &bmop, op, "triangle_fill edges=%he", BM_SELECT))
+ return OPERATOR_CANCELLED;
+
+ BMO_Exec_Op(em->bm, &bmop);
+
+ /*select new geometry*/
+ BMO_HeaderFlag_Buffer(em->bm, &bmop, "geomout", BM_SELECT, BM_FACE|BM_EDGE);
+
+ if (!EDBM_FinishOp(em, &bmop, op, 1))
+ return OPERATOR_CANCELLED;
+
DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
-#endif
+
return OPERATOR_FINISHED;
}
@@ -3894,6 +3901,7 @@
DAG_id_tag_update(obedit->data, OB_RECALC_DATA);
WM_event_add_notifier(C, NC_GEOM|ND_DATA, obedit->data);
+
return OPERATOR_FINISHED;
}
More information about the Bf-blender-cvs
mailing list