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/optimizer.hpp')
-rw-r--r--extern/quadriflow/src/optimizer.hpp56
1 files changed, 56 insertions, 0 deletions
diff --git a/extern/quadriflow/src/optimizer.hpp b/extern/quadriflow/src/optimizer.hpp
new file mode 100644
index 00000000000..ad6fa720a6e
--- /dev/null
+++ b/extern/quadriflow/src/optimizer.hpp
@@ -0,0 +1,56 @@
+#ifndef OPTIMIZER_H_
+#define OPTIMIZER_H_
+#include "config.hpp"
+#include "field-math.hpp"
+#include "hierarchy.hpp"
+
+namespace qflow {
+
+class Optimizer {
+ public:
+ Optimizer();
+ static void optimize_orientations(Hierarchy& mRes);
+ static void optimize_scale(Hierarchy& mRes, VectorXd& rho, int adaptive);
+ static void optimize_positions(Hierarchy& mRes, int with_scale = 0);
+ static void optimize_integer_constraints(Hierarchy& mRes, std::map<int, int>& singularities,
+ bool use_minimum_cost_flow);
+ static void optimize_positions_fixed(
+ Hierarchy& mRes, std::vector<DEdge>& edge_values, std::vector<Vector2i>& edge_diff,
+ std::set<int>& sharp_vertices,
+ std::map<int, std::pair<Vector3d, Vector3d>>& sharp_constraints, int with_scale = 0);
+ static void optimize_positions_sharp(
+ Hierarchy& mRes, std::vector<DEdge>& edge_values, std::vector<Vector2i>& edge_diff,
+ std::vector<int>& sharp_edges, std::set<int>& sharp_vertices,
+ std::map<int, std::pair<Vector3d, Vector3d>>& sharp_constraints, int with_scale = 0);
+ static void optimize_positions_dynamic(
+ MatrixXi& F, MatrixXd& V, MatrixXd& N, MatrixXd& Q, std::vector<std::vector<int>>& Vset,
+ std::vector<Vector3d>& O_compact, std::vector<Vector4i>& F_compact,
+ std::vector<int>& V2E_compact, std::vector<int>& E2E_compact, double mScale,
+ std::vector<Vector3d>& diffs, std::vector<int>& diff_count,
+ std::map<std::pair<int, int>, int>& o2e, std::vector<int>& sharp_o,
+ std::map<int, std::pair<Vector3d, Vector3d>>& compact_sharp_constraints, int with_scale);
+#ifdef WITH_CUDA
+ static void optimize_orientations_cuda(Hierarchy& mRes);
+ static void optimize_positions_cuda(Hierarchy& mRes);
+#endif
+};
+
+#ifdef WITH_CUDA
+extern void UpdateOrientation(int* phase, int num_phases, glm::dvec3* N, glm::dvec3* Q, Link* adj,
+ int* adjOffset, int num_adj);
+extern void PropagateOrientationUpper(glm::dvec3* srcField, int num_orientation,
+ glm::ivec2* toUpper, glm::dvec3* N, glm::dvec3* destField);
+extern void PropagateOrientationLower(glm::ivec2* toUpper, glm::dvec3* Q, glm::dvec3* N,
+ glm::dvec3* Q_next, glm::dvec3* N_next, int num_toUpper);
+
+extern void UpdatePosition(int* phase, int num_phases, glm::dvec3* N, glm::dvec3* Q, Link* adj,
+ int* adjOffset, int num_adj, glm::dvec3* V, glm::dvec3* O,
+ double scale);
+extern void PropagatePositionUpper(glm::dvec3* srcField, int num_position, glm::ivec2* toUpper,
+ glm::dvec3* N, glm::dvec3* V, glm::dvec3* destField);
+
+#endif
+
+} // namespace qflow
+
+#endif