[Bf-blender-cvs] [5bdf40dcdac] soc-2021-adaptive-cloth: adaptive_cloth: AdaptiveMesh: verts of new sewing edge as preserve
ishbosamiya
noreply at git.blender.org
Mon Sep 6 11:47:39 CEST 2021
Commit: 5bdf40dcdac652b69158549ababb0c9b028c0a55
Author: ishbosamiya
Date: Wed Sep 1 13:46:38 2021 +0530
Branches: soc-2021-adaptive-cloth
https://developer.blender.org/rB5bdf40dcdac652b69158549ababb0c9b028c0a55
adaptive_cloth: AdaptiveMesh: verts of new sewing edge as preserve
Newly created sewing edges's verts should also be marked as preserve.
===================================================================
M source/blender/blenkernel/intern/cloth_remesh.cc
===================================================================
diff --git a/source/blender/blenkernel/intern/cloth_remesh.cc b/source/blender/blenkernel/intern/cloth_remesh.cc
index f34f7c75719..91a84634572 100644
--- a/source/blender/blenkernel/intern/cloth_remesh.cc
+++ b/source/blender/blenkernel/intern/cloth_remesh.cc
@@ -419,21 +419,9 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
*/
void mark_verts_for_preserve(bool sewing_enabled)
{
- const auto set_vert_preserve = [](AdaptiveVert &vert) {
- auto &op_vert_data = vert.get_extra_data_mut();
- if (op_vert_data) {
- auto &vert_data = op_vert_data.value();
- vert_data.get_flag_mut() |= VERT_PRESERVE;
- }
- else {
- vert.set_extra_data(VertData());
- vert.get_extra_data_mut().value().get_flag_mut() |= VERT_PRESERVE;
- }
- };
-
for (auto &vert : this->get_verts_mut()) {
if (this->is_vert_on_seam_or_boundary(vert)) {
- set_vert_preserve(vert);
+ this->mark_vert_for_preserve(vert);
}
}
@@ -446,10 +434,10 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
if (edge.is_loose()) {
const auto [v1_index, v2_index] = edge.get_checked_verts();
auto &v1 = this->get_checked_vert(v1_index);
- set_vert_preserve(v1);
+ this->mark_vert_for_preserve(v1);
auto &v2 = this->get_checked_vert(v2_index);
- set_vert_preserve(v2);
+ this->mark_vert_for_preserve(v2);
}
}
}
@@ -785,8 +773,6 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
if (sewing_enabled) {
BLI_assert(mesh_diff.get_added_nodes().size() == 1);
- std::cout << "mesh_diff.get_added_verts().size(): " << mesh_diff.get_added_verts().size()
- << std::endl;
const auto sewing_mesh_diff = this->try_adding_sewing_edge(mesh_diff.get_added_verts()[0],
force_split_for_sewing);
@@ -835,6 +821,9 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
AdaptiveMeshDiff<END> try_adding_sewing_edge(const VertIndex &vert_index,
bool force_split_for_sewing)
{
+ /* TODO(ish): make it work over 3D edges, so need to get Node
+ * instead of Vert and then for each vert of the node, add the
+ * sewing edge if needed */
/* vert: is the vert that is being tested.
*
* e1: is an incident edge of `vert`.
@@ -937,9 +926,6 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
* splittable, then split it and create a new edge between the
* `new_vert` and `vert` */
- std::cout << "vert_index: " << vert_index << " opposite_edges: " << opposite_edges
- << std::endl;
-
AdaptiveMeshDiff<END> complete_mesh_diff;
for (const auto &opposite_edge_index : opposite_edges) {
/* It is possible that that splitting a previous `opposite_edge`
@@ -983,6 +969,11 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
dump_file(after_adding_loose_edge_filename, after_adding_loose_edge_msgpack);
#endif
+ /* Mark the new (loose) edge's verts as preserve */
+ auto [new_edge_v1, new_edge_v2] = this->get_checked_verts_of_edge(new_edge, false);
+ this->mark_vert_for_preserve(new_edge_v1);
+ this->mark_vert_for_preserve(new_edge_v2);
+
complete_mesh_diff.add_edge(new_edge.get_self_index());
}
@@ -1397,6 +1388,22 @@ class AdaptiveMesh : public Mesh<NodeData<END>, VertData, EdgeData, internal::Em
}
}
+ /**
+ * For the given vert, sets the `VERT_PRESERVE` flag.
+ */
+ void mark_vert_for_preserve(AdaptiveVert &vert)
+ {
+ auto &op_vert_data = vert.get_extra_data_mut();
+ if (op_vert_data) {
+ auto &vert_data = op_vert_data.value();
+ vert_data.get_flag_mut() |= VERT_PRESERVE;
+ }
+ else {
+ vert.set_extra_data(VertData());
+ vert.get_extra_data_mut().value().get_flag_mut() |= VERT_PRESERVE;
+ }
+ }
+
/**
* Marks all edges that are between two sewing edges that are
* connected by another edge as well.
More information about the Bf-blender-cvs
mailing list