[Bf-blender-cvs] [de67514b45d] rigid_deform: ignore weights <= 0

Jacques Lucke noreply at git.blender.org
Thu Jan 31 19:55:57 CET 2019


Commit: de67514b45d2e8f8a54c36bb8b955ad4cad19b25
Author: Jacques Lucke
Date:   Tue Jan 29 11:37:04 2019 +0100
Branches: rigid_deform
https://developer.blender.org/rBde67514b45d2e8f8a54c36bb8b955ad4cad19b25

ignore weights <= 0

===================================================================

M	source/blender/modifiers/intern/MOD_rigiddeform_system.cc

===================================================================

diff --git a/source/blender/modifiers/intern/MOD_rigiddeform_system.cc b/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
index 704b2ec1174..3ac90a63991 100644
--- a/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
+++ b/source/blender/modifiers/intern/MOD_rigiddeform_system.cc
@@ -77,7 +77,6 @@ static std::vector<WeightedEdge> calculate_cotan_weights(
 	const std::vector<std::array<uint, 3>> &triangles)
 {
 	std::vector<WeightedEdge> edges;
-	edges.reserve(triangles.size() * 3);
 
 	for (auto verts : triangles) {
 		std::array<double, 3> angles = triangle_angles(
@@ -86,10 +85,13 @@ static std::vector<WeightedEdge> calculate_cotan_weights(
 			positions[verts[2]]);
 
 #define cotan(x) std::cos((x))/std::sin((x))
-		edges.push_back(WeightedEdge(verts[1], verts[2], cotan(angles[0]) / 2.0));
-		edges.push_back(WeightedEdge(verts[0], verts[2], cotan(angles[1]) / 2.0));
-		edges.push_back(WeightedEdge(verts[0], verts[1], cotan(angles[2]) / 2.0));
+		double w1 = cotan(angles[0]) / 2.0;
+		double w2 = cotan(angles[1]) / 2.0;
+		double w3 = cotan(angles[2]) / 2.0;
 #undef cotan
+		if (w1 > 0) edges.push_back(WeightedEdge(verts[1], verts[2], w1));
+		if (w2 > 0) edges.push_back(WeightedEdge(verts[0], verts[2], w2));
+		if (w3 > 0) edges.push_back(WeightedEdge(verts[0], verts[1], w3));
 	}
 
 	return edges;



More information about the Bf-blender-cvs mailing list