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/quadriflow/src/post-solver.hpp')
-rw-r--r--extern/quadriflow/src/post-solver.hpp64
1 files changed, 64 insertions, 0 deletions
diff --git a/extern/quadriflow/src/post-solver.hpp b/extern/quadriflow/src/post-solver.hpp
new file mode 100644
index 00000000000..546245d801e
--- /dev/null
+++ b/extern/quadriflow/src/post-solver.hpp
@@ -0,0 +1,64 @@
+//
+// post-solver.hpp
+// Parametrize
+//
+// Created by Jingwei on 2/5/18.
+//
+
+#ifndef post_solver_h
+#define post_solver_h
+
+#include <Eigen/Core>
+#include <vector>
+#include "disajoint-tree.hpp"
+
+namespace qflow {
+
+using namespace Eigen;
+
+/*
+ * TODO: Optimize O_quad, and possibly N_quad
+ * Input:
+ * O_quad[i]: initialized i-th vertex position of the quad mesh
+ * N_quad[i]: initialized i-th vertex normal of the quad mesh
+ * Q_quad[i]: initialized i-th vertex orientation of the quad mesh, guaranteed to be orthogonal to
+ * N_quad[i]
+ * F_quad[i]: 4 vertex index of the i-th quad face
+ *
+ * Concept: i-th directed edge is the (i%4)-th edge of the (i/4)-th face of the quad mesh
+ * V2E_quad[i]: one directed edge from i-th vertex of the quad mesh
+ * E2E_quad[i]: the reverse directed edge's index of the i-th directed edge of the quad mesh
+ *
+ * V.col(i): i-th vertex position of the triangle mesh
+ * N.col(i): i-th vertex normal of the triangle mesh
+ * Q.col(i): i-th vertex orientation of the triangle mesh, guaranteed to be orthogonal to N.col(i)
+ * O.col(i): "quad position" associated with the i-th vertex in the triangle mesh (see InstantMesh
+ * position field)
+ * F.col(i): i-th triangle of the triangle mesh
+ *
+ * V2E[i]: one directed edge from the i-th vertex of the triangle mesh
+ * E2E[i]: the reverse directed edge's index of the i-th directed edge of the triangle mesh
+ *
+ * j = disajoint_tree.Index(i)
+ * the j-th vertex of the quad mesh is corresponding to the i-th vertex of the triangle mesh
+ * the relation is one-to-multiple
+ * O_quad can be viewed as an average of corresponding O
+ * N_quad can be viewed as an average of corresponding N
+ * Q_quad can be viewed as aggregation of corresponding Q
+ * Method that aggregates qi to qj with weights wi and wj:
+ * value = compat_orientation_extrinsic_4(qj, nj, qi, ni)
+ * result = (value.first * wj + value.second * wi).normalized()
+ *
+ * Output:
+ * Optimized O_quad, (possibly N_quad)
+ */
+void optimize_quad_positions(std::vector<Vector3d>& O_quad, std::vector<Vector3d>& N_quad,
+ std::vector<Vector3d>& Q_quad, std::vector<Vector4i>& F_quad,
+ VectorXi& V2E_quad, std::vector<int>& E2E_quad, MatrixXd& V, MatrixXd& N,
+ MatrixXd& Q, MatrixXd& O, MatrixXi& F, VectorXi& V2E, VectorXi& E2E,
+ DisajointTree& disajoint_tree, double reference_length,
+ bool just_serialize = true);
+
+} // namespace qflow
+
+#endif /* post_solver_h */