libigl v2.5.0
Loading...
Searching...
No Matches
shapeup.h
Go to the documentation of this file.
1// This file is part of libigl, a simple c++ geometry processing library.
2//
3// Copyright (C) 2017 Amir Vaxman <avaxman@gmail.com>
4//
5// This Source Code Form is subject to the terms of the Mozilla Public License
6// v. 2.0. If a copy of the MPL was not distributed with this file, You can
7// obtain one at http://mozilla.org/MPL/2.0/.
8#ifndef IGL_SHAPEUP_H
9#define IGL_SHAPEUP_H
10
11#include "min_quad_with_fixed.h"
12#include "igl_inline.h"
13#include "setdiff.h"
14#include "cat.h"
15#include <Eigen/Core>
16#include <vector>
17#include "PI.h"
18
19
20//This file implements the following algorithm:
21
22//Bouaziz et al.
23//Shape-Up: Shaping Discrete Geometry with Projections
24//Computer Graphics Forum (Proc. SGP) 31(5), 2012
25
26namespace igl
27{
32 //input data
33 Eigen::MatrixXd P;
34 Eigen::VectorXi SC;
35 Eigen::MatrixXi S;
36 Eigen::VectorXi b;
37 int maxIterations; //referring to number of local-global pairs.
38 double pTolerance; //algorithm stops when max(|P_k-P_{k-1}|)<pTolerance.
40 //Internally-used matrices
41 Eigen::SparseMatrix<double> DShape, DClose, DSmooth, Q, A, At, W;
44 maxIterations(50),
45 pTolerance(10e-6),
46 shapeCoeff(1.0),
47 closeCoeff(100.0),
48 smoothCoeff(0.0){}
49 };
50
51 // Alec: I'm not sure why these are using PlainObjectBase but then not
52 // templating.
53
67 //typedef std::function<
68 // bool(
69 // const Eigen::PlainObjectBase<Eigen::MatrixXd>&,
70 // const Eigen::PlainObjectBase<Eigen::VectorXi>&,
71 // const Eigen::PlainObjectBase<Eigen::MatrixXi>&,
72 // Eigen::PlainObjectBase<Eigen::MatrixXd>&)>
73 // shapeup_projection_function;
74 using
76 =
77 std::function<
78 bool(
79 const Eigen::PlainObjectBase<Eigen::MatrixXd>&,
80 const Eigen::PlainObjectBase<Eigen::VectorXi>&,
81 const Eigen::PlainObjectBase<Eigen::MatrixXi>&,
82 Eigen::PlainObjectBase<Eigen::MatrixXd>&)> ;
97 const Eigen::PlainObjectBase<Eigen::MatrixXd>& P,
98 const Eigen::PlainObjectBase<Eigen::VectorXi>& SC,
99 const Eigen::PlainObjectBase<Eigen::MatrixXi>& S,
100 Eigen::PlainObjectBase<Eigen::MatrixXd>& projP);
101
116 const Eigen::PlainObjectBase<Eigen::MatrixXd>& P,
117 const Eigen::PlainObjectBase<Eigen::VectorXi>& SC,
118 const Eigen::PlainObjectBase<Eigen::MatrixXi>& S,
119 Eigen::PlainObjectBase<Eigen::MatrixXd>& projP);
138 template <
139 typename DerivedP,
140 typename DerivedSC,
141 typename DerivedS,
142 typename Derivedw>
144 const Eigen::PlainObjectBase<DerivedP>& P,
145 const Eigen::PlainObjectBase<DerivedSC>& SC,
146 const Eigen::PlainObjectBase<DerivedS>& S,
147 const Eigen::PlainObjectBase<DerivedS>& E,
148 const Eigen::PlainObjectBase<DerivedSC>& b,
149 const Eigen::PlainObjectBase<Derivedw>& wShape,
150 const Eigen::PlainObjectBase<Derivedw>& wSmooth,
151 ShapeupData & sudata);
166 template <
167 typename DerivedP,
168 typename DerivedSC,
169 typename DerivedS>
171 const Eigen::PlainObjectBase<DerivedP>& bc,
172 const std::function<bool(const Eigen::PlainObjectBase<DerivedP>&, const Eigen::PlainObjectBase<DerivedSC>&, const Eigen::PlainObjectBase<DerivedS>&, Eigen::PlainObjectBase<DerivedP>&)>& local_projection,
173 const Eigen::PlainObjectBase<DerivedP>& P0,
174 const ShapeupData & sudata,
175 const bool quietIterations,
176 Eigen::PlainObjectBase<DerivedP>& P);
177
178}
179
180#ifndef IGL_STATIC_LIBRARY
181#include "shapeup.cpp"
182#endif
183
184#endif
#define IGL_INLINE
Definition igl_inline.h:15
Definition AABB.h:17
bool shapeup_identity_projection(const Eigen::PlainObjectBase< Eigen::MatrixXd > &P, const Eigen::PlainObjectBase< Eigen::VectorXi > &SC, const Eigen::PlainObjectBase< Eigen::MatrixXi > &S, Eigen::PlainObjectBase< Eigen::MatrixXd > &projP)
This projection does nothing but render points into projP.
bool shapeup_solve(const Eigen::PlainObjectBase< DerivedP > &bc, const std::function< bool(const Eigen::PlainObjectBase< DerivedP > &, const Eigen::PlainObjectBase< DerivedSC > &, const Eigen::PlainObjectBase< DerivedS > &, Eigen::PlainObjectBase< DerivedP > &)> &local_projection, const Eigen::PlainObjectBase< DerivedP > &P0, const ShapeupData &sudata, const bool quietIterations, Eigen::PlainObjectBase< DerivedP > &P)
This function solve the shapeup project optimization.
bool shapeup_regular_face_projection(const Eigen::PlainObjectBase< Eigen::MatrixXd > &P, const Eigen::PlainObjectBase< Eigen::VectorXi > &SC, const Eigen::PlainObjectBase< Eigen::MatrixXi > &S, Eigen::PlainObjectBase< Eigen::MatrixXd > &projP)
the projection assumes that the sets are vertices of polygons in cyclic order
bool shapeup_precomputation(const Eigen::PlainObjectBase< DerivedP > &P, const Eigen::PlainObjectBase< DerivedSC > &SC, const Eigen::PlainObjectBase< DerivedS > &S, const Eigen::PlainObjectBase< DerivedS > &E, const Eigen::PlainObjectBase< DerivedSC > &b, const Eigen::PlainObjectBase< Derivedw > &wShape, const Eigen::PlainObjectBase< Derivedw > &wSmooth, ShapeupData &sudata)
This function precomputation the necessary matrices for the ShapeUp process, and prefactorizes them.
std::function< bool(const Eigen::PlainObjectBase< Eigen::MatrixXd > &, const Eigen::PlainObjectBase< Eigen::VectorXi > &, const Eigen::PlainObjectBase< Eigen::MatrixXi > &, Eigen::PlainObjectBase< Eigen::MatrixXd > &)> shapeup_projection_function
Every function here defines a local projection for ShapeUp, and must have the following structure to ...
Definition shapeup.h:82
Parameters and precomputed data for ShapeUp.
Definition shapeup.h:31
Eigen::SparseMatrix< double > At
Definition shapeup.h:41
Eigen::SparseMatrix< double > Q
Definition shapeup.h:41
double closeCoeff
Definition shapeup.h:39
Eigen::SparseMatrix< double > DSmooth
Definition shapeup.h:41
Eigen::MatrixXd P
Definition shapeup.h:33
min_quad_with_fixed_data< double > solver_data
Definition shapeup.h:42
Eigen::SparseMatrix< double > DShape
Definition shapeup.h:41
Eigen::SparseMatrix< double > DClose
Definition shapeup.h:41
double shapeCoeff
Definition shapeup.h:39
Eigen::VectorXi b
Definition shapeup.h:36
ShapeupData()
Definition shapeup.h:43
double pTolerance
Definition shapeup.h:38
int maxIterations
Definition shapeup.h:37
Eigen::SparseMatrix< double > A
Definition shapeup.h:41
Eigen::VectorXi SC
Definition shapeup.h:34
Eigen::SparseMatrix< double > W
Definition shapeup.h:41
double smoothCoeff
Definition shapeup.h:39
Eigen::MatrixXi S
Definition shapeup.h:35
Parameters and precomputed values for min_quad_with_fixed.
Definition min_quad_with_fixed.h:166