[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