1818#include < deform/arap.h>
1919#include < deform/openmesh_adapter.h>
2020#include < deform/trajectory.h>
21+ #include < deform/deformation_util.h>
2122
2223#include " osg_viewer.h"
2324#include " example_config.h"
2930
3031
3132const std::vector<int > handles = { 4 ,5 ,7 ,11 ,14 ,15 ,16 ,17 ,18 ,19 ,26 ,27 ,38 ,39 ,45 ,46 ,48 ,49 ,50 ,51 ,52 ,53 ,54 ,55 ,56 ,76 ,77 ,131 ,132 ,201 ,202 ,203 ,204 ,205 ,206 ,207 ,208 ,209 ,210 ,211 ,212 ,213 ,214 ,215 ,216 ,217 ,218 ,219 ,220 ,221 ,222 ,223 ,224 ,225 ,226 ,227 ,228 ,229 ,230 ,231 ,232 ,233 ,234 ,235 ,240 ,241 ,257 ,307 ,308 ,324 ,325 ,327 ,328 ,329 ,330 ,331 ,332 ,333 ,334 ,354 ,355 };
32-
33-
3433const std::vector<int > anchors = {0 ,1 ,2 ,3 ,79 ,80 ,81 ,82 ,83 ,84 ,85 ,86 ,87 ,88 ,89 ,90 ,91 ,92 ,93 ,94 ,95 ,96 ,97 ,98 ,99 ,100 ,101 ,102 ,103 ,104 ,105 ,106 ,107 ,108 ,109 ,110 ,111 ,112 ,113 ,114 ,115 ,116 ,117 ,118 ,119 ,120 ,121 ,122 ,123 ,124 ,125 ,126 ,357 ,358 ,359 ,360 ,361 ,362 ,363 ,364 ,365 ,366 ,367 ,368 ,369 ,370 ,371 ,372 ,373 ,374 ,375 ,376 ,377 ,378 ,379 ,380 ,381 ,382 ,383 ,384 ,385 };
3534
3635
3736typedef OpenMesh::TriMesh_ArrayKernelT<> Mesh;
3837typedef deform::OpenMeshAdapter<> Adapter;
3938typedef deform::AsRigidAsPossibleDeformation<Adapter, double > ARAP;
4039typedef deform::TrajectorySE3<float > Trajectory;
41-
42-
43- void applyTransformationToHandles (const Eigen::Affine3f &delta, Mesh &mesh, ARAP &arap) {
44- for (auto h : handles) {
45- Mesh::VertexHandle vh = mesh.vertex_handle (h);
46- Eigen::Vector3f v = delta * deform::convert::toEigen (mesh.point (vh));
47- arap.setConstraint (vh.idx (), v);
48- }
49- }
40+ typedef deform::DeformationUtil<Adapter> DeformationUtil;
5041
5142
5243int main (int argc, char **argv) {
@@ -70,22 +61,14 @@ int main(int argc, char **argv) {
7061
7162 // Setup trajectory
7263 Trajectory trajectory;
73- /*
74- trajectory.addKeyPose(Trajectory::Transform::Identity());
75- trajectory.addKeyPose(Trajectory::Transform::Identity() * Eigen::Translation3f(1.f,0.f,0.f));
76- trajectory.addKeyPose(Trajectory::Transform::Identity() * Eigen::Translation3f(2.f, 0.f, 0.f));
77- trajectory.addKeyPose(Trajectory::Transform::Identity() * Eigen::AngleAxisf((float)M_PI / 2.f, Eigen::Vector3f::UnitZ()) * Eigen::AngleAxisf((float)M_PI / 4.f, Eigen::Vector3f::UnitX()) * Eigen::Translation3f(2.f, 0.f, 0.f));
78- */
7964
80- trajectory. addKeyPose ( Trajectory::Transform::Identity ()) ;
81- trajectory.addKeyPose (Eigen::AngleAxisf (( float ) 0 . 2f , Eigen::Vector3f::UnitY ()) * Trajectory::Transform::Identity ());
82- trajectory.addKeyPose (Eigen::AngleAxisf (( float ) 0 . 4f , Eigen::Vector3f::UnitY ()) * Trajectory::Transform::Identity ( ));
83- trajectory.addKeyPose (Eigen::AngleAxisf (( float ) 0 . 6f , Eigen::Vector3f::UnitY ()) * Trajectory::Transform::Identity ( ));
84- trajectory.addKeyPose (Eigen::AngleAxisf ((float )1 . 57f , Eigen::Vector3f::UnitY ()) * Trajectory::Transform::Identity ());
65+ Trajectory::Transform prev ;
66+ prev = trajectory.addKeyPose (Trajectory::Transform::Identity ());
67+ prev = trajectory.addKeyPose (prev * Eigen::Translation3f ( 1 . f , 0 . f , 0 . f ));
68+ prev = trajectory.addKeyPose (prev * Eigen::Translation3f ( 2 . f , 0 . f , 0 . f ));
69+ prev = trajectory.addKeyPose (prev * Eigen::AngleAxisf ((float )M_PI / 2 . f , Eigen::Vector3f::UnitX ()));
8570
86-
87-
88- Eigen::Affine3f prev = trajectory (0 .f );
71+ DeformationUtil dutil (ma, handles.begin (), handles.end (), trajectory (0.0 ));
8972
9073 // Create an OSG viewer to visualize incremental deformation.
9174 double duration = 10 .f ;
@@ -98,11 +81,9 @@ int main(int argc, char **argv) {
9881 if (t > 1 .f )
9982 return false ;
10083
101- Trajectory::Transform transform = trajectory ((float )t);
102- applyTransformationToHandles (transform * prev.inverse (Eigen::Isometry), mesh, arap);
103- prev = transform;
84+ dutil.updateConstraints (trajectory ((float )t), arap);
10485
105- arap.deform (40 );
86+ arap.deform (20 );
10687
10788 return true ;
10889 });
0 commit comments