Commit: ef8be26944369942efff9b1828c6566e48ba7f22
Author: mattoverby
Date:   Wed Aug 19 13:28:27 2020 -0500
Branches: soc-2020-soft-body
https://developer.blender.org/rBef8be26944369942efff9b1828c6566e48ba7f22

printout in collision detection

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

M       extern/softbody/src/admmpd_collision.cpp
M       extern/softbody/src/admmpd_log.cpp
M       extern/softbody/src/admmpd_mesh.cpp
M       extern/softbody/src/admmpd_types.h

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

diff --git a/extern/softbody/src/admmpd_collision.cpp 
b/extern/softbody/src/admmpd_collision.cpp
index 54d3e402e2f..1c42a7b1b19 100644
--- a/extern/softbody/src/admmpd_collision.cpp
+++ b/extern/softbody/src/admmpd_collision.cpp
@@ -171,8 +171,9 @@ int EmbeddedMeshCollision::detect(
        // We store the results of the collisions in a per-vertex buffer.
        // This is a workaround so we can create them in threads.
        int nev = mesh->rest_facet_verts()->rows();
-       if ((int)per_vertex_pairs.size() != nev)
+       if ((int)per_vertex_pairs.size() != nev) {
                per_vertex_pairs.resize(nev, std::vector<VFCollisionPair>());
+       }
 
        //
        // Thread data for detection
@@ -215,6 +216,10 @@ int EmbeddedMeshCollision::detect(
                Vector3d pt_t0 = td->mesh->get_mapped_facet_vertex(td->x0,vi);
                Vector3d pt_t1 = td->mesh->get_mapped_facet_vertex(td->x1,vi);
 
+               if (td->options->log_level >= LOGLEVEL_DEBUG) {
+                       printf("\tDetecting collisions for emb vertex %d: %f %f 
%f\n", vi, pt_t1[0], pt_t1[1], pt_t1[2]);
+               }
+
                // Special case, check if we are below the floor
                if (pt_t1[2] < td->options->floor)
                {
@@ -304,6 +309,9 @@ int EmbeddedMeshCollision::detect(
        // all of the BVH traversals and the other threads do none.
        // I haven't actually profiled this, so maybe I'm wrong.
        int max_threads = std::max(1, std::min(nev, 
admmpd::get_max_threads(options)));
+       if (options->log_level >= LOGLEVEL_DEBUG) {
+               max_threads = 1;
+       }
        const auto & per_thread_function = 
[&per_embedded_vertex_detect,&max_threads,&nev]
                (DetectThreadData *td, int thread_idx)
        {
diff --git a/extern/softbody/src/admmpd_log.cpp 
b/extern/softbody/src/admmpd_log.cpp
index 28c196928a6..c979cbd8ef5 100644
--- a/extern/softbody/src/admmpd_log.cpp
+++ b/extern/softbody/src/admmpd_log.cpp
@@ -56,6 +56,7 @@ std::string Logger::state_string(int state)
        {
                default: break;
                case SOLVERSTATE_INIT: str="init"; break;
+               case SOLVERSTATE_MESHCREATE: str="mesh_init"; break;
                case SOLVERSTATE_SOLVE: str="solve"; break;
                case SOLVERSTATE_INIT_SOLVE: str="init_solve"; break;
                case SOLVERSTATE_LOCAL_STEP: str="local_step"; break;
diff --git a/extern/softbody/src/admmpd_mesh.cpp 
b/extern/softbody/src/admmpd_mesh.cpp
index 8b9f6158cf6..193ff6313f2 100644
--- a/extern/softbody/src/admmpd_mesh.cpp
+++ b/extern/softbody/src/admmpd_mesh.cpp
@@ -4,6 +4,7 @@
 #include "admmpd_mesh.h"
 #include "admmpd_geom.h"
 #include "admmpd_timer.h"
+#include "admmpd_log.h"
 #include <unordered_map>
 #include <set>
 #include <iostream>
@@ -70,12 +71,18 @@ bool EmbeddedMesh::create(
        const unsigned int *tets, // ignored
        int nt)
 {
-       (void)(options);
+       admmpd::Logger log(options->log_level);
+       log.start_state(SOLVERSTATE_MESHCREATE);
+
        P_updated = true;
-       if (nv<=0 || verts == nullptr)
+       if (nv<=0 || verts == nullptr) {
+               log.stop_state(SOLVERSTATE_MESHCREATE);
                return false;
-       if (nf<=0 || faces == nullptr)
+       }
+       if (nf<=0 || faces == nullptr) {
+               log.stop_state(SOLVERSTATE_MESHCREATE);
                return false;
+       }
        (void)(tets);
        (void)(nt);
 
@@ -185,6 +192,10 @@ bool EmbeddedMesh::create(
        if (emb_V0.rows()==0)
                throw_err("create","Did not set verts");
 
+       log.stop_state(SOLVERSTATE_MESHCREATE);
+       if (options->log_level >= LOGLEVEL_DEBUG) {
+               printf("%s\n",log.to_string().c_str());
+       }
        return true;
 }
 
@@ -289,11 +300,6 @@ bool EmbeddedMesh::compute_embedding(const admmpd::Options 
*options)
                FindTetThreadData *td = (FindTetThreadData*)userdata;
                const MatrixXd *emb_x0 = td->emb_mesh->rest_facet_verts();
                Vector3d pt = emb_x0->row(i);
-
-               if (td->opt->log_level >= LOGLEVEL_DEBUG) {
-                       printf("\tTesting vertex %d\n", i);
-               }
-
                PointInTetMeshTraverse<double> traverser(
                                pt,
                                td->lat_V0,
@@ -313,6 +319,15 @@ bool EmbeddedMesh::compute_embedding(const admmpd::Options 
*options)
                        td->emb_v_to_tet->operator[](i) = tet_idx;
                        Vector4d b = 
geom::point_tet_barys<double>(pt,t[0],t[1],t[2],t[3]);
                        td->emb_barys->row(i) = b;
+
+                       if (td->opt->log_level >= LOGLEVEL_DEBUG) {
+                               printf("\tFound embedding for %d: %f %f %f 
%f\n", i, b[0],b[1],b[2],b[3]);
+                       }
+               }
+               else {
+                       if (td->opt->log_level >= LOGLEVEL_DEBUG) {
+                               printf("\tDid NOT find embedding for %d!\n", i);
+                       }
                }
        }; // end parallel find tet
 
diff --git a/extern/softbody/src/admmpd_types.h 
b/extern/softbody/src/admmpd_types.h
index 48640268a99..5e512fb1dce 100644
--- a/extern/softbody/src/admmpd_types.h
+++ b/extern/softbody/src/admmpd_types.h
@@ -36,13 +36,14 @@ typedef Discregrid::CubicLagrangeDiscreteGrid SDFType;
 #define COLLISIONMODE_NUM 2
 
 #define SOLVERSTATE_INIT 0
-#define SOLVERSTATE_SOLVE 1
-#define SOLVERSTATE_INIT_SOLVE 2
-#define SOLVERSTATE_LOCAL_STEP 3
-#define SOLVERSTATE_GLOBAL_STEP 4
-#define SOLVERSTATE_COLLISION_UPDATE 5
-#define SOLVERSTATE_TEST_CONVERGED 6
-#define SOLVERSTATE_NUM 7
+#define SOLVERSTATE_MESHCREATE 1
+#define SOLVERSTATE_SOLVE 2
+#define SOLVERSTATE_INIT_SOLVE 3
+#define SOLVERSTATE_LOCAL_STEP 4
+#define SOLVERSTATE_GLOBAL_STEP 5
+#define SOLVERSTATE_COLLISION_UPDATE 6
+#define SOLVERSTATE_TEST_CONVERGED 7
+#define SOLVERSTATE_NUM 8
 
 #define LOGLEVEL_NONE 0
 #define LOGLEVEL_LOW 1

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
https://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to