[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44469] trunk/blender/source/blender/ modifiers/intern: modified fix for "Fix [#30351] Solidify Modifier High Quality Normals fails." from r44464.
Campbell Barton
ideasman42 at gmail.com
Sun Feb 26 19:12:02 CET 2012
Revision: 44469
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44469
Author: campbellbarton
Date: 2012-02-26 18:12:01 +0000 (Sun, 26 Feb 2012)
Log Message:
-----------
modified fix for "Fix [#30351] Solidify Modifier High Quality Normals fails." from r44464.
rather then recalc polygon normals - solidify is simple enough to just flip the normals of the copied faces, the rim faces normals are already re-calculated so copy them.
Revision Links:
--------------
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44464
Modified Paths:
--------------
trunk/blender/source/blender/modifiers/intern/MOD_explode.c
trunk/blender/source/blender/modifiers/intern/MOD_screw.c
trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
Modified: trunk/blender/source/blender/modifiers/intern/MOD_explode.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_explode.c 2012-02-26 17:24:04 UTC (rev 44468)
+++ trunk/blender/source/blender/modifiers/intern/MOD_explode.c 2012-02-26 18:12:01 UTC (rev 44469)
@@ -183,7 +183,7 @@
BLI_kdtree_free(tree);
}
-static int edgecut_get(EdgeHash *edgehash, int v1, int v2)
+static int edgecut_get(EdgeHash *edgehash, unsigned int v1, unsigned int v2)
{
return GET_INT_FROM_POINTER(BLI_edgehash_lookup(edgehash, v1, v2));
}
Modified: trunk/blender/source/blender/modifiers/intern/MOD_screw.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_screw.c 2012-02-26 17:24:04 UTC (rev 44468)
+++ trunk/blender/source/blender/modifiers/intern/MOD_screw.c 2012-02-26 18:12:01 UTC (rev 44469)
@@ -132,23 +132,6 @@
tltmd->iter= sltmd->iter;
}
-#if 0
-static int findEd(MEdge *medge_new, int toted, int v1, int v2)
-{
- int i;
-
- for (i = 0; i < toted; i++) {
- if ( (medge_new[i].v1 == v1 && medge_new[i].v2 == v2) ||
- (medge_new[i].v1 == v2 && medge_new[i].v2 == v1) )
- {
- return i;
- }
- }
-
- return -1;
-}
-#endif
-
static DerivedMesh *applyModifier(ModifierData *md, Object *ob,
DerivedMesh *derivedData,
int useRenderParams,
Modified: trunk/blender/source/blender/modifiers/intern/MOD_solidify.c
===================================================================
--- trunk/blender/source/blender/modifiers/intern/MOD_solidify.c 2012-02-26 17:24:04 UTC (rev 44468)
+++ trunk/blender/source/blender/modifiers/intern/MOD_solidify.c 2012-02-26 18:12:01 UTC (rev 44469)
@@ -235,6 +235,8 @@
float (*vert_nors)[3]= NULL;
+ float (*face_nors_result)[3] = NULL;
+
const float ofs_orig= - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
const float ofs_new= smd->offset - (((-smd->offset_fac + 1.0f) * 0.5f) * smd->offset);
const float offset_fac_vg= smd->offset_fac_vg;
@@ -354,7 +356,10 @@
DM_copy_poly_data(dm, result, 0, 0, numFaces);
DM_copy_poly_data(dm, result, 0, numFaces, numFaces);
-
+
+ /* if the original has it, get the result so we can update it */
+ face_nors_result = CustomData_get_layer(&result->polyData, CD_NORMAL);
+
/*flip normals*/
mp = mpoly + numFaces;
for (i=0; i<dm->numPolyData; i++, mp++) {
@@ -384,6 +389,10 @@
ml2[j].e += numEdges;
ml2[j].v += numVerts;
}
+
+ if (face_nors_result) {
+ negate_v3_v3(face_nors_result[numFaces + i], face_nors_result[i]);
+ }
}
for(i=0, ed=medge+numEdges; i<numEdges; i++, ed++) {
@@ -667,6 +676,10 @@
add_v3_v3(edge_vert_nos[ed->v1], nor);
add_v3_v3(edge_vert_nos[ed->v2], nor);
+
+ if (face_nors_result) {
+ copy_v3_v3(face_nors_result[(numFaces * 2) + i], nor);
+ }
#endif
}
@@ -702,8 +715,7 @@
MEM_freeN(old_vert_arr);
/* must recalculate normals with vgroups since they can displace unevenly [#26888] */
- /* Also needed in case of HQ normals [#30351] (don't really undestand why, though... --mont29). */
- if (dvert || smd->flag & MOD_SOLIDIFY_NORMAL_CALC) {
+ if (dvert) {
CDDM_calc_normals(result);
}
More information about the Bf-blender-cvs
mailing list