[Bf-blender-cvs] [6022ea47aa4] soc-2019-adaptive-cloth: Cloth: some code to better understand problems with pinning
ishbosamiya
noreply at git.blender.org
Mon Aug 26 05:50:35 CEST 2019
Commit: 6022ea47aa47c85ee1d5a3941b7a37c27e1c32ea
Author: ishbosamiya
Date: Mon Aug 19 21:11:59 2019 +0530
Branches: soc-2019-adaptive-cloth
https://developer.blender.org/rB6022ea47aa47c85ee1d5a3941b7a37c27e1c32ea
Cloth: some code to better understand problems with pinning
===================================================================
M source/blender/blenkernel/intern/cloth.c
M source/blender/blenkernel/intern/cloth_remeshing.cpp
===================================================================
diff --git a/source/blender/blenkernel/intern/cloth.c b/source/blender/blenkernel/intern/cloth.c
index 50b591949c0..04bffcc0fb4 100644
--- a/source/blender/blenkernel/intern/cloth.c
+++ b/source/blender/blenkernel/intern/cloth.c
@@ -364,7 +364,17 @@ static Mesh *do_step_cloth(
}
/* Support for dynamic vertex groups, changing from frame to frame */
+
+#if 0
+ if (clmd->mesh) {
+ cloth_apply_vgroup(clmd, clmd->mesh);
+ }
+ else {
+ cloth_apply_vgroup(clmd, result);
+ }
+#else
cloth_apply_vgroup(clmd, result);
+#endif
if ((clmd->sim_parms->flags & CLOTH_SIMSETTINGS_FLAG_DYNAMIC_BASEMESH) ||
(clmd->sim_parms->vgroup_shrink > 0) || (clmd->sim_parms->shrink_min > 0.0f)) {
@@ -389,6 +399,10 @@ static Mesh *do_step_cloth(
mesh_result = cloth_remeshing_step(depsgraph, ob, clmd, result);
}
+#if 0
+ BKE_id_copy_ex(NULL, (ID *)mesh_result, (ID **)&clmd->mesh, LIB_ID_COPY_LOCALIZE);
+#endif
+
if (!ret) {
return NULL;
}
@@ -834,6 +848,30 @@ int cloth_uses_vgroup(ClothModifierData *clmd)
*/
void cloth_apply_vgroup(ClothModifierData *clmd, Mesh *mesh)
{
+#if 0
+ {
+ printf("mesh in %s totvert: %d\n", __func__, mesh->totvert);
+ MDeformVert *dvert = NULL;
+ for (int i = 0; i < mesh->totvert; i++) {
+ dvert = (MDeformVert *)CustomData_get(&mesh->vdata, i, CD_MDEFORMVERT);
+ if (dvert) {
+ printf("v: %f %f %f weights: ",
+ mesh->mvert[i].co[0],
+ mesh->mvert[i].co[1],
+ mesh->mvert[i].co[2]);
+ for (int j = 0; j < dvert->totweight; j++) {
+ if (dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_mass - 1)) {
+ printf("%f ", pow4f(dvert->dw[j].weight));
+ if (dvert->dw[j].weight < 0.9999f) {
+ dvert->totweight = 0;
+ }
+ }
+ }
+ printf("\n");
+ }
+ }
+ }
+#endif
/* Can be optimized to do all groups in one loop. */
int i = 0;
int j = 0;
diff --git a/source/blender/blenkernel/intern/cloth_remeshing.cpp b/source/blender/blenkernel/intern/cloth_remeshing.cpp
index eeaac6a99be..35a067e8f1e 100644
--- a/source/blender/blenkernel/intern/cloth_remeshing.cpp
+++ b/source/blender/blenkernel/intern/cloth_remeshing.cpp
@@ -1970,6 +1970,7 @@ static bool cloth_remeshing_collapse_edges(ClothModifierData *clmd,
/* update active_faces */
cloth_remeshing_update_active_faces(active_faces, clmd->clothObject->bm, temp_vert);
+#if 0
/* run cloth_remeshing_fix_mesh on newly created faces by
* cloth_remeshing_try_edge_collapse */
vector<BMFace *> fix_active;
@@ -1982,6 +1983,7 @@ static bool cloth_remeshing_collapse_edges(ClothModifierData *clmd,
/* update active_faces */
cloth_remeshing_update_active_faces(active_faces, fix_active);
+#endif
count++;
return true;
@@ -2912,6 +2914,32 @@ static void cloth_remeshing_compute_vertex_sizing(ClothModifierData *clmd,
}
}
+static bool cloth_remeshing_find_in_mesh(Mesh *mesh, float a[3])
+{
+ for (int i = 0; i < mesh->totvert; i++) {
+ if (equals_v3v3(mesh->mvert[i].co, a, ALMOST_ZERO)) {
+ return true;
+ }
+ }
+ return false;
+}
+
+static void cloth_remeshing_reset_pin_weights(Mesh *old_mesh, Mesh *new_mesh)
+{
+ MDeformVert *dvert = NULL;
+ for (int i = 0; i < new_mesh->totvert; i++) {
+ dvert = (MDeformVert *)CustomData_get(&new_mesh->vdata, i, CD_MDEFORMVERT);
+ if (dvert) {
+ /* if vert is in old mesh, then leave it as is, otherwise
+ * set weight to 0 */
+ if (!cloth_remeshing_find_in_mesh(old_mesh, new_mesh->mvert[i].co)) {
+ print_v3("didn't find", new_mesh->mvert[i].co);
+ dvert->totweight = 0;
+ }
+ }
+ }
+}
+
Mesh *cloth_remeshing_step(Depsgraph *depsgraph, Object *ob, ClothModifierData *clmd, Mesh *mesh)
{
ClothVertMap cvm;
@@ -2941,6 +2969,28 @@ Mesh *cloth_remeshing_step(Depsgraph *depsgraph, Object *ob, ClothModifierData *
/* mesh_result->totedge, */
/* mesh_result->totpoly); */
+#if 0
+ MDeformVert *dvert = NULL;
+ cloth_remeshing_reset_pin_weights(mesh, mesh_result);
+ printf("mesh->totvert: %d\n", mesh->totvert);
+ printf("mesh_result->totvert: %d\n", mesh_result->totvert);
+ for (int i = 0; i < mesh_result->totvert; i++) {
+ dvert = (MDeformVert *)CustomData_get(&mesh_result->vdata, i, CD_MDEFORMVERT);
+ if (dvert) {
+ printf("v: %f %f %f weights: ",
+ mesh_result->mvert[i].co[0],
+ mesh_result->mvert[i].co[1],
+ mesh_result->mvert[i].co[2]);
+ for (int j = 0; j < dvert->totweight; j++) {
+ if (dvert->dw[j].def_nr == (clmd->sim_parms->vgroup_mass - 1)) {
+ printf("%f ", pow4f(dvert->dw[j].weight));
+ }
+ }
+ printf("\n");
+ }
+ }
+#endif
+
cvm.clear();
return mesh_result;
}
More information about the Bf-blender-cvs
mailing list