[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [45704] trunk/blender/source/blender: minor speedup for scanfill, dont calculate the normal if its already known - use for editmode ngon filling .

Campbell Barton ideasman42 at gmail.com
Mon Apr 16 20:24:50 CEST 2012


Revision: 45704
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=45704
Author:   campbellbarton
Date:     2012-04-16 18:24:49 +0000 (Mon, 16 Apr 2012)
Log Message:
-----------
minor speedup for scanfill, dont calculate the normal if its already known - use for editmode ngon filling.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
    trunk/blender/source/blender/blenlib/BLI_scanfill.h
    trunk/blender/source/blender/blenlib/intern/scanfill.c
    trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c
    trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
    trunk/blender/source/blender/windowmanager/intern/wm_gesture.c

Modified: trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/blenkernel/intern/editderivedmesh.c	2012-04-16 18:24:49 UTC (rev 45704)
@@ -218,7 +218,7 @@
 			/*complete the loop*/
 			BLI_addfilledge(&sf_ctx, firstv, v);
 
-			totfilltri = BLI_edgefill(&sf_ctx, FALSE);
+			totfilltri = BLI_edgefill_ex(&sf_ctx, FALSE, f->no);
 			BLI_array_growitems(looptris, totfilltri);
 
 			for (efa = sf_ctx.fillfacebase.first; efa; efa=efa->next) {

Modified: trunk/blender/source/blender/blenlib/BLI_scanfill.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_scanfill.h	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/blenlib/BLI_scanfill.h	2012-04-16 18:24:49 UTC (rev 45704)
@@ -100,6 +100,8 @@
 
 int BLI_begin_edgefill(ScanFillContext *sf_ctx);
 int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup);
+int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup,
+                    const float nor_proj[3]);
 void BLI_end_edgefill(ScanFillContext *sf_ctx);
 
 /* These callbacks are needed to make the lib finction properly */

Modified: trunk/blender/source/blender/blenlib/intern/scanfill.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/scanfill.c	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/blenlib/intern/scanfill.c	2012-04-16 18:24:49 UTC (rev 45704)
@@ -774,6 +774,11 @@
 
 int BLI_edgefill(ScanFillContext *sf_ctx, const short do_quad_tri_speedup)
 {
+	return BLI_edgefill_ex(sf_ctx, do_quad_tri_speedup, NULL);
+}
+
+int BLI_edgefill_ex(ScanFillContext *sf_ctx, const short do_quad_tri_speedup, const float nor_proj[3])
+{
 	/*
 	 * - fill works with its own lists, so create that first (no faces!)
 	 * - for vertices, put in ->tmp.v the old pointer
@@ -852,21 +857,28 @@
 		return 0;
 	}
 	else {
-		/* define projection: with 'best' normal */
-		/* Newell's Method */
-		/* Similar code used elsewhere, but this checks for double ups
-		 * which historically this function supports so better not change */
-		float *v_prev;
-		float n[3] = {0.0f};
+		float n[3];
 
-		eve = sf_ctx->fillvertbase.last;
-		v_prev = eve->co;
+		if (nor_proj) {
+			copy_v3_v3(n, nor_proj);
+		}
+		else {
+			/* define projection: with 'best' normal */
+			/* Newell's Method */
+			/* Similar code used elsewhere, but this checks for double ups
+			 * which historically this function supports so better not change */
+			float *v_prev;
 
-		for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) {
-			if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) {
-				add_newell_cross_v3_v3v3(n, v_prev, eve->co);
+			zero_v3(n);
+			eve = sf_ctx->fillvertbase.last;
+			v_prev = eve->co;
+
+			for (eve = sf_ctx->fillvertbase.first; eve; eve = eve->next) {
+				if (LIKELY(!compare_v3v3(v_prev, eve->co, COMPLIMIT))) {
+					add_newell_cross_v3_v3v3(n, v_prev, eve->co);
+				}
+				v_prev = eve->co;
 			}
-			v_prev = eve->co;
 		}
 
 		if (UNLIKELY(normalize_v3(n) == 0.0f)) {

Modified: trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c
===================================================================
--- trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/bmesh/intern/bmesh_polygon.c	2012-04-16 18:24:49 UTC (rev 45704)
@@ -529,8 +529,8 @@
 	GETMIN2(v1, v2, mv1, mv2);
 	GETMIN2(v3, v4, mv3, mv4);
 	
-	/* do an interval test on the x and y axe */
-	/* first do x axi */
+	/* do an interval test on the x and y axes */
+	/* first do x axis */
 	if (ABS(v1[1] - v2[1]) < EPS &&
 	    ABS(v3[1] - v4[1]) < EPS &&
 	    ABS(v1[1] - v3[1]) < EPS)
@@ -538,7 +538,7 @@
 		return (mv4[0] >= mv1[0] && mv3[0] <= mv2[0]);
 	}
 
-	/* now do y axi */
+	/* now do y axis */
 	if (ABS(v1[0] - v2[0]) < EPS &&
 	    ABS(v3[0] - v4[0]) < EPS &&
 	    ABS(v1[0] - v3[0]) < EPS)

Modified: trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c
===================================================================
--- trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/editors/uvedit/uvedit_unwrap_ops.c	2012-04-16 18:24:49 UTC (rev 45704)
@@ -288,7 +288,7 @@
 
 			BLI_addfilledge(&sf_ctx, firstv, v);
 
-			BLI_edgefill(&sf_ctx, TRUE);
+			BLI_edgefill_ex(&sf_ctx, TRUE, efa->no);
 			for (sefa = sf_ctx.fillfacebase.first; sefa; sefa = sefa->next) {
 				ls[0] = sefa->v1->tmp.p;
 				ls[1] = sefa->v2->tmp.p;

Modified: trunk/blender/source/blender/windowmanager/intern/wm_gesture.c
===================================================================
--- trunk/blender/source/blender/windowmanager/intern/wm_gesture.c	2012-04-16 16:49:37 UTC (rev 45703)
+++ trunk/blender/source/blender/windowmanager/intern/wm_gesture.c	2012-04-16 18:24:49 UTC (rev 45704)
@@ -253,8 +253,9 @@
 	
 	/* highly unlikely this will fail, but could crash if (gt->points == 0) */
 	if (firstv) {
+		float zvec[3] = {0.0f, 0.0f, 1.0f};
 		BLI_addfilledge(&sf_ctx, firstv, v);
-		BLI_edgefill(&sf_ctx, FALSE);
+		BLI_edgefill_ex(&sf_ctx, FALSE, zvec);
 	
 		glEnable(GL_BLEND);
 		glColor4f(1.0, 1.0, 1.0, 0.05);




More information about the Bf-blender-cvs mailing list