[Bf-blender-cvs] [28e19184f95] soc-2019-adaptive-cloth: Cloth: switch to cpp style while finding bad_edges
ishbosamiya
noreply at git.blender.org
Fri Jul 26 20:19:44 CEST 2019
Commit: 28e19184f956da984fb7c1aea751b28969ec05a1
Author: ishbosamiya
Date: Fri Jul 26 12:25:03 2019 +0530
Branches: soc-2019-adaptive-cloth
https://developer.blender.org/rB28e19184f956da984fb7c1aea751b28969ec05a1
Cloth: switch to cpp style while finding bad_edges
===================================================================
M source/blender/blenkernel/BKE_cloth.h
M source/blender/blenkernel/intern/cloth_remeshing.cpp
===================================================================
diff --git a/source/blender/blenkernel/BKE_cloth.h b/source/blender/blenkernel/BKE_cloth.h
index a581f7fc973..0768c49ee9a 100644
--- a/source/blender/blenkernel/BKE_cloth.h
+++ b/source/blender/blenkernel/BKE_cloth.h
@@ -70,11 +70,6 @@ typedef struct ClothSolverResult {
float max_error, min_error, avg_error;
} ClothSolverResult;
-typedef struct Edge_Pair {
- float size;
- struct BMEdge *edge;
-} Edge_Pair;
-
/**
* This structure describes a cloth object against which the
* simulation can run.
diff --git a/source/blender/blenkernel/intern/cloth_remeshing.cpp b/source/blender/blenkernel/intern/cloth_remeshing.cpp
index dba73008325..14b8b9667f6 100644
--- a/source/blender/blenkernel/intern/cloth_remeshing.cpp
+++ b/source/blender/blenkernel/intern/cloth_remeshing.cpp
@@ -588,22 +588,16 @@ static float cloth_remeshing_edge_size(BMesh *bm, BMEdge *edge, ClothVertMap &cv
#endif
}
-static int cloth_remeshing_edge_pair_compare(const void *a, const void *b)
+typedef pair<float, BMEdge *> SizeEdgePair;
+
+static bool cloth_remeshing_size_edge_pair_compare(const SizeEdgePair &l, const SizeEdgePair &r)
{
- Edge_Pair *ea = (Edge_Pair *)a;
- Edge_Pair *eb = (Edge_Pair *)b;
- if (ea->size < eb->size) {
- return 1;
- }
- if (ea->size > eb->size) {
- return -1;
- }
- return 0;
+ return l.first > r.first;
}
static void cloth_remeshing_find_bad_edges(BMesh *bm, ClothVertMap &cvm, vector<BMEdge *> &r_edges)
{
- Edge_Pair *edge_pairs = (Edge_Pair *)MEM_mallocN(sizeof(Edge_Pair) * bm->totedge, "Edge Pairs");
+ vector<SizeEdgePair> edge_pairs;
int tagged = 0;
BMEdge *e;
@@ -611,20 +605,19 @@ static void cloth_remeshing_find_bad_edges(BMesh *bm, ClothVertMap &cvm, vector<
BM_ITER_MESH (e, &eiter, bm, BM_EDGES_OF_MESH) {
float size = cloth_remeshing_edge_size(bm, e, cvm);
if (size > 1.0f) {
- edge_pairs[tagged].size = size;
- edge_pairs[tagged].edge = e;
+ edge_pairs.push_back(make_pair(size, e));
tagged++;
}
}
/* sort the list based on the size */
- qsort(edge_pairs, tagged, sizeof(Edge_Pair), cloth_remeshing_edge_pair_compare);
+ sort(edge_pairs.begin(), edge_pairs.end(), cloth_remeshing_size_edge_pair_compare);
- for (int i = 0; i < tagged; i++) {
- r_edges.push_back(edge_pairs[i].edge);
+ for (int i = 0; i < edge_pairs.size(); i++) {
+ r_edges.push_back(edge_pairs[i].second);
}
- MEM_freeN(edge_pairs);
+ edge_pairs.clear();
}
static BMVert *cloth_remeshing_split_edge_keep_triangles(BMesh *bm,
@@ -930,6 +923,7 @@ static bool cloth_remeshing_split_edges(ClothModifierData *clmd, ClothVertMap &c
cloth_remeshing_find_bad_edges(bm, cvm, bad_edges);
printf("split edges tagged: %d\n", (int)bad_edges.size());
if (prev_num_bad_edges == bad_edges.size()) {
+ bad_edges.clear();
return false;
}
prev_num_bad_edges = bad_edges.size();
@@ -960,7 +954,9 @@ static bool cloth_remeshing_split_edges(ClothModifierData *clmd, ClothVertMap &c
}
}
}
- return !bad_edges.empty();
+ bool r_value = !bad_edges.empty();
+ bad_edges.clear();
+ return r_value;
}
static void cloth_remeshing_uv_of_vert_in_face(BMesh *bm, BMFace *f, BMVert *v, float r_uv[2])
More information about the Bf-blender-cvs
mailing list