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. @@
_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to