[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [57152] trunk/blender/source/blender: improve edgering subdivide curvature calculations ( calculate length projected onto the normal plane).
Campbell Barton
ideasman42 at gmail.com
Fri May 31 08:28:12 CEST 2013
Revision: 57152
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=57152
Author: campbellbarton
Date: 2013-05-31 06:28:11 +0000 (Fri, 31 May 2013)
Log Message:
-----------
improve edgering subdivide curvature calculations (calculate length projected onto the normal plane).
also correct recely added asserts.
Modified Paths:
--------------
trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c
Modified: trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2013-05-31 00:19:38 UTC (rev 57151)
+++ trunk/blender/source/blender/blenkernel/intern/DerivedMesh.c 2013-05-31 06:28:11 UTC (rev 57152)
@@ -873,7 +873,7 @@
ModifierApplyFlag flag)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+ BLI_assert(!dm || CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
@@ -887,7 +887,7 @@
float (*vertexCos)[3], int numVerts)
{
ModifierTypeInfo *mti = modifierType_getInfo(md->type);
- BLI_assert(CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
+ BLI_assert(!dm || CustomData_has_layer(&dm->polyData, CD_NORMAL) == false);
if (dm && mti->dependsOnNormals && mti->dependsOnNormals(md)) {
DM_ensure_normals(dm);
Modified: trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c
===================================================================
--- trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c 2013-05-31 00:19:38 UTC (rev 57151)
+++ trunk/blender/source/blender/bmesh/operators/bmo_subdivide_edgering.c 2013-05-31 06:28:11 UTC (rev 57152)
@@ -86,6 +86,7 @@
const float dot = dot_v3v3(no_a, no_b);
/* gives closest approx at a circle with 2 parallel handles */
float fac = 1.333333f;
+ float len;
if (dot < 0.0f) {
/* scale down to 0.666 if we point directly at each other rough but ok */
/* TODO, current blend from dot may not be optimal but its also a detail */
@@ -93,7 +94,25 @@
fac = (fac * t) + (0.75f * (1.0f - t));
}
- return (len_v3v3(co_a, co_b) * 0.5f) * fac;
+#if 0
+ len = len_v3v3(co_a, co_b);
+#else
+ /* 2d length projected on plane of normals */
+ {
+ float co_a_ofs[3];
+ cross_v3_v3v3(co_a_ofs, no_a, no_b);
+ if (len_squared_v3(co_a_ofs) > FLT_EPSILON) {
+ add_v3_v3(co_a_ofs, co_a);
+ closest_to_line_v3(co_a_ofs, co_b, co_a, co_a_ofs);
+ }
+ else {
+ copy_v3_v3(co_a_ofs, co_a);
+ }
+ len = len_v3v3(co_a_ofs, co_b);
+ }
+#endif
+
+ return (len * 0.5f) * fac;
}
static void bm_edgeloop_vert_tag(struct BMEdgeLoopStore *el_store, const bool tag)
More information about the Bf-blender-cvs
mailing list