Re: [Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46422] trunk/blender/source/blender: optimize ngon angle calculation in solidify modifier (was doing prev/ next vector subtract a

2012-05-08 Thread Johnny Matthews
This has very little to do with this commit, but it made me think of it,  I
wonder if those smarter than me think that a way to select all 'non flat'
ngons would be useful.

Johnny Matthews (guitargeek)
johnny.matth...@gmail.com
http://pedalboardplanner.com


On Tue, May 8, 2012 at 9:58 AM, Campbell Barton ideasma...@gmail.comwrote:

 Revision: 46422

 http://projects.blender.org/scm/viewvc.php?view=revroot=bf-blenderrevision=46422
 Author:   campbellbarton
 Date: 2012-05-08 14:58:38 + (Tue, 08 May 2012)
 Log Message:
 ---
 optimize ngon angle calculation in solidify modifier (was doing prev/next
 vector subtract and normalize for every vertex). now store the previous
 normalized vector for re-use.

 also add BKE_mesh_poly_calc_angles() which is mostly a reference for now.

 Modified Paths:
 --
trunk/blender/source/blender/blenkernel/BKE_mesh.h
trunk/blender/source/blender/blenkernel/intern/mesh.c
trunk/blender/source/blender/modifiers/intern/MOD_solidify.c

 Modified: trunk/blender/source/blender/blenkernel/BKE_mesh.h
 ===
 --- trunk/blender/source/blender/blenkernel/BKE_mesh.h  2012-05-08
 13:01:16 UTC (rev 46421)
 +++ trunk/blender/source/blender/blenkernel/BKE_mesh.h  2012-05-08
 14:58:38 UTC (rev 46422)
 @@ -304,6 +304,9 @@
  const int polyindex, const int mf_len,
  const int numTex, const int numCol,
 const int hasPCol, const int hasOrigSpace);

 +void BKE_mesh_poly_calc_angles(struct MVert *mvert, struct MLoop *mloop,
 +   struct MPoly *mp, float angles[]);
 +
  #ifdef __cplusplus
  }
  #endif

 Modified: trunk/blender/source/blender/blenkernel/intern/mesh.c
 ===
 --- trunk/blender/source/blender/blenkernel/intern/mesh.c   2012-05-08
 13:01:16 UTC (rev 46421)
 +++ trunk/blender/source/blender/blenkernel/intern/mesh.c   2012-05-08
 14:58:38 UTC (rev 46422)
 @@ -3103,3 +3103,51 @@
  {
mesh_tessface_clear_intern(mesh, TRUE);
  }
 +
 +#if 0 /* slow version of the function below */
 +void BKE_mesh_poly_calc_angles(MVert *mvert, MLoop *mloop,
 + MPoly *mp, float angles[])
 +{
 +   MLoop *ml;
 +
 +   int j;
 +   for (j = 0, ml = mloop + mp-loopstart; j  mp-totloop; j++,
 ml++) {
 +   MLoop *ml_prev = ME_POLY_LOOP_PREV(mloop, mp, j);
 +   MLoop *ml_next = ME_POLY_LOOP_NEXT(mloop, mp, j);
 +
 +   float e1[3], e2[3];
 +
 +   sub_v3_v3v3(e1, mvert[ml_next-v].co, mvert[ml-v].co);
 +   sub_v3_v3v3(e2, mvert[ml_prev-v].co, mvert[ml-v].co);
 +
 +   angles[j] = (float)M_PI - angle_v3v3(e1, e2);
 +   }
 +}
 +
 +#else /* equivalent the function above but avoid multiple subtractions +
 normalize */
 +
 +void BKE_mesh_poly_calc_angles(MVert *mvert, MLoop *mloop,
 + MPoly *mp, float angles[])
 +{
 +   MLoop *ml = mloop + mp-loopstart;
 +   float nor_prev[3];
 +   float nor_next[3];
 +
 +   int i_this = mp-totloop - 1;
 +   int i_next = 0;
 +
 +   sub_v3_v3v3(nor_prev, mvert[ml[i_this - 1].v].co,
 mvert[ml[i_this].v].co);
 +   normalize_v3(nor_prev);
 +
 +   while (i_next  mp-totloop) {
 +   sub_v3_v3v3(nor_next, mvert[ml[i_this].v].co,
 mvert[ml[i_next].v].co);
 +   normalize_v3(nor_next);
 +   angles[i_this] = angle_normalized_v3v3(nor_prev, nor_next);
 +
 +   /* step */
 +   copy_v3_v3(nor_prev, nor_next);
 +   i_this = i_next;
 +   i_next++;
 +   }
 +}
 +#endif

 Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
 ===
 --- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
  2012-05-08 13:01:16 UTC (rev 46421)
 +++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
  2012-05-08 14:58:38 UTC (rev 46422)
 @@ -451,7 +451,7 @@
/* same as EM_solidify() in editmesh_lib.c */
float *vert_angles = MEM_callocN(sizeof(float) * numVerts *
 2, mod_solid_pair); /* 2 in 1 */
float *vert_accum = vert_angles + numVerts;
 -   int j, vidx;
 +   int vidx;

face_nors = CustomData_get_layer(dm-polyData, CD_NORMAL);
if (!face_nors) {
 @@ -467,30 +467,44 @@
}

for (i = 0, mp = mpoly; i  numFaces; i++, mp++) {
 +   /* #BKE_mesh_poly_calc_angles logic is inlined
 here */
 +   float nor_prev[3];
 +   float nor_next[3];
 +
 +   int i_this = mp-totloop - 1;
 +   int i_next = 0;
 +
 +   ml = mloop[mp-loopstart];
 +
 +   /* --- 

Re: [Bf-committers] [Bf-blender-cvs] SVN commit: /data/svn/bf-blender [46422] trunk/blender/source/blender: optimize ngon angle calculation in solidify modifier (was doing prev/ next vector subtract a

2012-05-08 Thread Knapp
On Tue, May 8, 2012 at 5:11 PM, Johnny Matthews
johnny.matth...@gmail.com wrote:
 This has very little to do with this commit, but it made me think of it,  I
 wonder if those smarter than me think that a way to select all 'non flat'
 ngons would be useful.

 Johnny Matthews (guitargeek)
 johnny.matth...@gmail.com
 http://pedalboardplanner.com

I don't claim to be smarter but I could see it as useful when you
needed to clean up a model for animation and you wanted to find places
that don't bend well.


-- 
Douglas E Knapp

Creative Commons Film Group, Helping people make open source movies
with open source software!
http://douglas.bespin.org/CommonsFilmGroup/phpBB3/index.php

Massage in Gelsenkirchen-Buer:
http://douglas.bespin.org/tcm/ztab1.htm
Please link to me and trade links with me!

Open Source Sci-Fi mmoRPG Game project.
http://sf-journey-creations.wikispot.org/Front_Page
http://code.google.com/p/perspectiveproject/
___
Bf-committers mailing list
Bf-committers@blender.org
http://lists.blender.org/mailman/listinfo/bf-committers