|
@@ -12,23 +12,22 @@ int main(int argc, char * argv[])
|
|
|
{
|
|
|
using namespace std;
|
|
|
using namespace igl;
|
|
|
- Eigen::MatrixXi F,UF,LF,FF;
|
|
|
- Eigen::MatrixXd V,UV,LV,FV;
|
|
|
+ Eigen::MatrixXi OF,F;
|
|
|
+ Eigen::MatrixXd OV,V;
|
|
|
bool show_swept_volume = false;
|
|
|
read_triangle_mesh(
|
|
|
- TUTORIAL_SHARED_PATH "/decimated-knight.off",V,F);
|
|
|
+ TUTORIAL_SHARED_PATH "/decimated-knight.off",OV,OF);
|
|
|
+ V = OV;
|
|
|
+ F = OF;
|
|
|
cout<<R"(Usage:
|
|
|
-1 Original mesh
|
|
|
-2 In-plane upsampled mesh
|
|
|
-3 Loop subdivided mesh
|
|
|
-4 False barycentric subdivision
|
|
|
+1 Restore Original mesh
|
|
|
+2 Apply In-plane upsampled mesh
|
|
|
+3 Apply Loop subdivided mesh
|
|
|
+4 Apply False barycentric subdivision
|
|
|
)";
|
|
|
igl::viewer::Viewer viewer;
|
|
|
viewer.data.set_mesh(V,F);
|
|
|
viewer.data.set_face_based(true);
|
|
|
- igl::upsample(V,F,UV,UF);
|
|
|
- igl::loop(V,F,LV,LF);
|
|
|
- igl::false_barycentric_subdivision(V,F,FV,FF);
|
|
|
|
|
|
viewer.callback_key_down =
|
|
|
[&](igl::viewer::Viewer & viewer, unsigned char key, int mod)->bool
|
|
@@ -39,29 +38,29 @@ int main(int argc, char * argv[])
|
|
|
return false;
|
|
|
case '1':
|
|
|
{
|
|
|
- viewer.data.clear();
|
|
|
- viewer.data.set_mesh(V,F);
|
|
|
+ V = OV;
|
|
|
+ F = OF;
|
|
|
break;
|
|
|
}
|
|
|
case '2':
|
|
|
{
|
|
|
- viewer.data.clear();
|
|
|
- viewer.data.set_mesh(UV,UF);
|
|
|
+ igl::upsample( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
|
|
|
break;
|
|
|
}
|
|
|
case '3':
|
|
|
{
|
|
|
- viewer.data.clear();
|
|
|
- viewer.data.set_mesh(LV,LF);
|
|
|
+ igl::loop( Eigen::MatrixXd(V), Eigen::MatrixXi(F), V,F);
|
|
|
break;
|
|
|
}
|
|
|
case '4':
|
|
|
{
|
|
|
- viewer.data.clear();
|
|
|
- viewer.data.set_mesh(FV,FF);
|
|
|
+ igl::false_barycentric_subdivision(
|
|
|
+ Eigen::MatrixXd(V),Eigen::MatrixXi(F),V,F);
|
|
|
break;
|
|
|
}
|
|
|
}
|
|
|
+ viewer.data.clear();
|
|
|
+ viewer.data.set_mesh(V,F);
|
|
|
viewer.data.set_face_based(true);
|
|
|
return true;
|
|
|
};
|