[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [43552] trunk/blender/source/blender: misc changes from bmesh, syncing across to trunk, no functional changes

Campbell Barton ideasman42 at gmail.com
Fri Jan 20 03:24:05 CET 2012


Revision: 43552
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=43552
Author:   campbellbarton
Date:     2012-01-20 02:24:01 +0000 (Fri, 20 Jan 2012)
Log Message:
-----------
misc changes from bmesh, syncing across to trunk, no functional changes

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/mesh.c
    trunk/blender/source/blender/blenlib/BLI_math_geom.h
    trunk/blender/source/blender/blenlib/BLI_math_vector.h
    trunk/blender/source/blender/blenlib/intern/BLI_ghash.c
    trunk/blender/source/blender/blenlib/intern/math_geom.c
    trunk/blender/source/blender/blenlib/intern/math_vector.c
    trunk/blender/source/blender/blenlib/intern/math_vector_inline.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/editors/mesh/mesh_ops.c
    trunk/blender/source/blender/modifiers/intern/MOD_build.c

Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenkernel/intern/mesh.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -42,12 +42,12 @@
 #include "DNA_meshdata_types.h"
 #include "DNA_ipo_types.h"
 
+#include "BLI_utildefines.h"
 #include "BLI_blenlib.h"
 #include "BLI_bpath.h"
 #include "BLI_editVert.h"
 #include "BLI_math.h"
 #include "BLI_edgehash.h"
-#include "BLI_utildefines.h"
 
 #include "BKE_animsys.h"
 #include "BKE_main.h"
@@ -1295,7 +1295,7 @@
 	
 	if (numVerts_r) *numVerts_r = numVerts;
 	for (i=0; i<numVerts; i++)
-		VECCOPY(cos[i], me->mvert[i].co);
+		copy_v3_v3(cos[i], me->mvert[i].co);
 	
 	return cos;
 }

Modified: trunk/blender/source/blender/blenlib/BLI_math_geom.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_geom.h	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/BLI_math_geom.h	2012-01-20 02:24:01 UTC (rev 43552)
@@ -54,6 +54,8 @@
 float area_quad_v3(const float a[3], const float b[3], const float c[3], const float d[3]);
 float area_poly_v3(int nr, float verts[][3], const float normal[3]);
 
+int is_quad_convex_v3(const float *v1, const float *v2, const float *v3, const float *v4);
+
 /********************************* Distance **********************************/
 
 float dist_to_line_v2(const float p[2], const float l1[2], const float l2[2]);
@@ -221,6 +223,9 @@
 	float n4[3], const float f_no[3], const float co1[3], const float co2[3],
 	const float co3[3], const float co4[3]);
 
+void accumulate_vertex_normals_poly(float **vertnos, float polyno[3],
+	float **vertcos, float vdiffs[][3], int nverts);
+
 /********************************* Tangents **********************************/
 
 typedef struct VertexTangent {

Modified: trunk/blender/source/blender/blenlib/BLI_math_vector.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_math_vector.h	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/BLI_math_vector.h	2012-01-20 02:24:01 UTC (rev 43552)
@@ -171,6 +171,7 @@
 float angle_normalized_v3v3(const float v1[3], const float v2[3]);
 void angle_tri_v3(float angles[3], const float v1[3], const float v2[3], const float v3[3]);
 void angle_quad_v3(float angles[4], const float v1[3], const float v2[3], const float v3[3], const float v4[3]);
+void angle_poly_v3(float* angles, const float* verts[3], int len);
 
 /********************************* Geometry **********************************/
 

Modified: trunk/blender/source/blender/blenlib/intern/BLI_ghash.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/BLI_ghash.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/intern/BLI_ghash.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -40,8 +40,8 @@
 
 // #include "BLI_blenlib.h"
 
+#include "BLI_utildefines.h"
 #include "BLI_mempool.h"
-#include "BLI_utildefines.h"
 #include "BLI_ghash.h"
 
 #include "BLO_sys_types.h" // for intptr_t support

Modified: trunk/blender/source/blender/blenlib/intern/math_geom.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_geom.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/intern/math_geom.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -2382,6 +2382,38 @@
 	}
 }
 
+/* Add weighted face normal component into normals of the face vertices.
+   Caller must pass pre-allocated vdiffs of nverts length. */
+void accumulate_vertex_normals_poly(float **vertnos, float polyno[3],
+	float **vertcos, float vdiffs[][3], int nverts)
+{
+	int i;
+
+	/* calculate normalized edge directions for each edge in the poly */
+	for (i = 0; i < nverts; i++) {
+		sub_v3_v3v3(vdiffs[i], vertcos[(i+1) % nverts], vertcos[i]);
+		normalize_v3(vdiffs[i]);
+	}
+
+	/* accumulate angle weighted face normal */
+	{
+		const float *prev_edge = vdiffs[nverts-1];
+		int i;
+
+		for(i=0; i<nverts; i++) {
+			const float *cur_edge = vdiffs[i];
+			
+			/* calculate angle between the two poly edges incident on
+			   this vertex */
+			const float fac= saacos(-dot_v3v3(cur_edge, prev_edge));
+
+			/* accumulate */
+			madd_v3_v3fl(vertnos[i], polyno, fac);
+			prev_edge = cur_edge;
+		}
+	}
+}
+
 /********************************* Tangents **********************************/
 
 /* For normal map tangents we need to detect uv boundaries, and only average
@@ -3038,3 +3070,26 @@
 
 	return contrib;
 }
+
+/* evaluate if entire quad is a proper convex quad */
+ int is_quad_convex_v3(const float *v1, const float *v2, const float *v3, const float *v4)
+ {
+	float nor[3], nor1[3], nor2[3], vec[4][2];
+	int axis_a, axis_b;
+	
+	/* define projection, do both trias apart, quad is undefined! */
+	normal_tri_v3(nor1, v1, v2, v3);
+	normal_tri_v3(nor2, v1, v3, v4);
+	add_v3_v3v3(nor, nor1, nor2);
+
+	axis_dominant_v3(&axis_a, &axis_b, nor);
+
+	vec[0][0]= v1[axis_a]; vec[0][1]= v1[axis_b];
+	vec[1][0]= v2[axis_a]; vec[1][1]= v2[axis_b];
+
+	vec[2][0]= v3[axis_a]; vec[2][1]= v3[axis_b];
+	vec[3][0]= v4[axis_a]; vec[3][1]= v4[axis_b];
+	
+	/* linetests, the 2 diagonals have to instersect to be convex */
+	return (isect_line_line_v2(vec[0], vec[2], vec[1], vec[3]) > 0) ? 1 : 0;
+}

Modified: trunk/blender/source/blender/blenlib/intern/math_vector.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_vector.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/intern/math_vector.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -239,6 +239,20 @@
 	angles[3]= (float)M_PI - angle_normalized_v3v3(ed4, ed1);
 }
 
+void angle_poly_v3(float *angles, const float *verts[3], int len)
+{
+	int i;
+	float vec[3][3];
+
+	sub_v3_v3v3(vec[2], verts[len-1], verts[0]);
+	normalize_v3(vec[2]);
+	for (i = 0; i < len; i++) {
+		sub_v3_v3v3(vec[i%3], verts[i%len], verts[(i+1)%len]);
+		normalize_v3(vec[i%3]);
+		angles[i] = (float)M_PI - angle_normalized_v3v3(vec[(i+2)%3], vec[i%3]);
+	}
+}
+
 /********************************* Geometry **********************************/
 
 /* Project v1 on v2 */

Modified: trunk/blender/source/blender/blenlib/intern/math_vector_inline.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/math_vector_inline.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenlib/intern/math_vector_inline.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -515,6 +515,29 @@
 	return d;
 }
 
+MINLINE double normalize_v3_d(double n[3])
+{
+	double d= n[0]*n[0] + n[1]*n[1] + n[2]*n[2];
+
+	/* a larger value causes normalize errors in a
+	   scaled down models with camera xtreme close */
+	if(d > 1.0e-35) {
+		double mul;
+
+		d= sqrt(d);
+		mul = 1.0 / d;
+
+		n[0] *= mul;
+		n[1] *= mul;
+		n[2] *= mul;
+	} else {
+		n[0] = n[1] = n[2] = 0;
+		d= 0.0;
+	}
+
+	return d;
+}
+
 MINLINE float normalize_v3(float n[3])
 {
 	return normalize_v3_v3(n, n);

Modified: trunk/blender/source/blender/blenloader/intern/readfile.c
===================================================================
--- trunk/blender/source/blender/blenloader/intern/readfile.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/blenloader/intern/readfile.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -97,9 +97,9 @@
 
 #include "MEM_guardedalloc.h"
 
+#include "BLI_utildefines.h"
 #include "BLI_blenlib.h"
 #include "BLI_math.h"
-#include "BLI_utildefines.h"
 
 #include "BKE_anim.h"
 #include "BKE_action.h"

Modified: trunk/blender/source/blender/editors/mesh/mesh_ops.c
===================================================================
--- trunk/blender/source/blender/editors/mesh/mesh_ops.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/editors/mesh/mesh_ops.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -300,6 +300,7 @@
 	
 	WM_keymap_add_item(keymap, "MESH_OT_fill", FKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_beautify_fill", FKEY, KM_PRESS, KM_SHIFT|KM_ALT, 0);
+
 	WM_keymap_add_item(keymap, "MESH_OT_quads_convert_to_tris", TKEY, KM_PRESS, KM_CTRL, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_tris_convert_to_quads", JKEY, KM_PRESS, KM_ALT, 0);
 	WM_keymap_add_item(keymap, "MESH_OT_edge_flip", FKEY, KM_PRESS, KM_SHIFT|KM_CTRL, 0);

Modified: trunk/blender/source/blender/modifiers/intern/MOD_build.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_build.c	2012-01-20 02:10:09 UTC (rev 43551)
+++ trunk/blender/source/blender/modifiers/intern/MOD_build.c	2012-01-20 02:24:01 UTC (rev 43552)
@@ -76,135 +76,150 @@
 }
 
 static DerivedMesh *applyModifier(ModifierData *md, Object *UNUSED(ob),
-						DerivedMesh *derivedData,
-						int UNUSED(useRenderParams),
-						int UNUSED(isFinalCalc))
+                                  DerivedMesh *derivedData,
+                                  int UNUSED(useRenderParams),
+                                  int UNUSED(isFinalCalc))
 {
 	DerivedMesh *dm = derivedData;
 	DerivedMesh *result;
 	BuildModifierData *bmd = (BuildModifierData*) md;
 	int i;
-	int numFaces, numEdges;
+	int numFaces_dst, numEdges_dst;
 	int *vertMap, *edgeMap, *faceMap;
 	float frac;
 	GHashIterator *hashIter;
 	/* maps vert indices in old mesh to indices in new mesh */
 	GHash *vertHash = BLI_ghash_new(BLI_ghashutil_inthash,
-					BLI_ghashutil_intcmp, "build ve apply gh");
+	                                BLI_ghashutil_intcmp, "build ve apply gh");
 	/* maps edge indices in new mesh to indices in old mesh */
 	GHash *edgeHash = BLI_ghash_new(BLI_ghashutil_inthash,
-					BLI_ghashutil_intcmp, "build ed apply gh");
+	                                BLI_ghashutil_intcmp, "build ed apply gh");
 
-	const int maxVerts= dm->getNumVerts(dm);
-	const int maxEdges= dm->getNumEdges(dm);
-	const int maxFaces= dm->getNumFaces(dm);
+	const int numVert_src= dm->getNumVerts(dm);
+	const int numEdge_src= dm->getNumEdges(dm);
+	const int numFace_src= dm->getNumFaces(dm);
 
-	vertMap = MEM_callocN(sizeof(*vertMap) * maxVerts, "build modifier vertMap");
-	for(i = 0; i < maxVerts; ++i) vertMap[i] = i;

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list