Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'extern/softbody/src/admmpd_embeddedmesh.cpp')
-rw-r--r--extern/softbody/src/admmpd_embeddedmesh.cpp22
1 files changed, 13 insertions, 9 deletions
diff --git a/extern/softbody/src/admmpd_embeddedmesh.cpp b/extern/softbody/src/admmpd_embeddedmesh.cpp
index 7e677b42455..e939114faeb 100644
--- a/extern/softbody/src/admmpd_embeddedmesh.cpp
+++ b/extern/softbody/src/admmpd_embeddedmesh.cpp
@@ -175,11 +175,10 @@ bool EmbeddedMesh::generate(
face_boxes[i].extend(V.row(F(i,2)).transpose());
}
- AABBTree<double,3> face_tree;
- face_tree.init(face_boxes);
+ emb_rest_tree.init(face_boxes);
Octree<double,3>::Node *root = octree.root().get();
- gather_octree_tets(root,&V,&F,&face_tree,data.verts,data.tets);
+ gather_octree_tets(root,&V,&F,&emb_rest_tree,data.verts,data.tets);
merge_close_vertices(&data);
int nv = data.verts.size();
@@ -198,6 +197,11 @@ bool EmbeddedMesh::generate(
}
}
+ // Now compute the baryweighting for embedded vertices
+ bool embed_success = compute_embedding();
+
+ if (!emb_rest_tree.root())
+ throw std::runtime_error("EmbeddedMesh::generate Error: Failed to create tree");
if (lat_rest_x.rows()==0)
throw std::runtime_error("EmbeddedMesh::generate Error: Failed to create verts");
if (lat_tets.rows()==0)
@@ -206,13 +210,12 @@ bool EmbeddedMesh::generate(
throw std::runtime_error("EmbeddedMesh::generate Error: Did not set faces");
if (emb_rest_x.rows()==0)
throw std::runtime_error("EmbeddedMesh::generate Error: Did not set verts");
-
- // Now compute the baryweighting for embedded vertices
- bool embed_success = compute_embedding();
+ if (!embed_success)
+ throw std::runtime_error("EmbeddedMesh::generate Error: Failed embedding");
// Export the mesh for funsies
- std::ofstream of("v_lattice.txt"); of << lat_rest_x; of.close();
- std::ofstream of2("t_lattice.txt"); of2 << lat_tets; of2.close();
+// std::ofstream of("v_lattice.txt"); of << lat_rest_x; of.close();
+// std::ofstream of2("t_lattice.txt"); of2 << lat_tets; of2.close();
return embed_success;
@@ -270,8 +273,9 @@ typedef struct FindTetThreadData {
static void parallel_point_in_tet(
void *__restrict userdata,
const int i,
- const TaskParallelTLS *__restrict UNUSED(tls))
+ const TaskParallelTLS *__restrict tls)
{
+ (void)(tls);
FindTetThreadData *td = (FindTetThreadData*)userdata;
Vector3d pt = td->emb_mesh->emb_rest_x.row(i);
PointInTetMeshTraverse<double> traverser(