Skip to content

Commit

Permalink
Merge branch 'dev' into alpha
Browse files Browse the repository at this point in the history
  • Loading branch information
larc committed Nov 19, 2023
2 parents 94e4828 + 083210a commit 5dbdfd9
Show file tree
Hide file tree
Showing 4 changed files with 297 additions and 90 deletions.
143 changes: 143 additions & 0 deletions include/gproshan/viewer/glfw_keys.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
#ifndef GLFW_KEYS_H
#define GLFW_KEYS_H


#include <gproshan/viewer/include_opengl.h>

#include <unordered_map>


// geometry processing and shape analysis framework
namespace gproshan {


const std::unordered_map<int, const char *> glfw_key_name = {
{GLFW_KEY_UNKNOWN, ""},//-1
{GLFW_KEY_SPACE, "SPACE"},//32
{GLFW_KEY_APOSTROPHE, "'"},//39 /* ' */
{GLFW_KEY_COMMA, ","},//44 /* , */
{GLFW_KEY_MINUS, "-"},//45 /* - */
{GLFW_KEY_PERIOD, "."},//46 /* . */
{GLFW_KEY_SLASH, "/"},//47 /* / */
{GLFW_KEY_0, "0"},//48
{GLFW_KEY_1, "1"},//49
{GLFW_KEY_2, "2"},//50
{GLFW_KEY_3, "3"},//51
{GLFW_KEY_4, "4"},//52
{GLFW_KEY_5, "5"},//53
{GLFW_KEY_6, "6"},//54
{GLFW_KEY_7, "7"},//55
{GLFW_KEY_8, "8"},//56
{GLFW_KEY_9, "9"},//57
{GLFW_KEY_SEMICOLON, ";"},//59 /* ; */
{GLFW_KEY_EQUAL, "="},//61 /* = */
{GLFW_KEY_A, "A"},//65
{GLFW_KEY_B, "B"},//66
{GLFW_KEY_C, "C"},//67
{GLFW_KEY_D, "D"},//68
{GLFW_KEY_E, "E"},//69
{GLFW_KEY_F, "F"},//70
{GLFW_KEY_G, "G"},//71
{GLFW_KEY_H, "H"},//72
{GLFW_KEY_I, "I"},//73
{GLFW_KEY_J, "J"},//74
{GLFW_KEY_K, "K"},//75
{GLFW_KEY_L, "L"},//76
{GLFW_KEY_M, "M"},//77
{GLFW_KEY_N, "N"},//78
{GLFW_KEY_O, "O"},//79
{GLFW_KEY_P, "P"},//80
{GLFW_KEY_Q, "Q"},//81
{GLFW_KEY_R, "R"},//82
{GLFW_KEY_S, "S"},//83
{GLFW_KEY_T, "T"},//84
{GLFW_KEY_U, "U"},//85
{GLFW_KEY_V, "V"},//86
{GLFW_KEY_W, "W"},//87
{GLFW_KEY_X, "X"},//88
{GLFW_KEY_Y, "Y"},//89
{GLFW_KEY_Z, "Z"},//90
{GLFW_KEY_LEFT_BRACKET, "["},//91 /* [ */
{GLFW_KEY_BACKSLASH, "\\"},//92 /* \ */
{GLFW_KEY_RIGHT_BRACKET, "]"},//93 /* ] */
{GLFW_KEY_GRAVE_ACCENT, "`"},//96 /* ` */
{GLFW_KEY_WORLD_1, ""},//161 /* non-US #1 */
{GLFW_KEY_WORLD_2, ""},//162 /* non-US #2 */
{GLFW_KEY_ESCAPE, "ESCAPE"},//256
{GLFW_KEY_ENTER, "ENTER"},//257
{GLFW_KEY_TAB, "TAB"},//258
{GLFW_KEY_BACKSPACE, "BACKSPACE"},//259
{GLFW_KEY_INSERT, "INSERT"},//260
{GLFW_KEY_DELETE, "DELETE"},//261
{GLFW_KEY_RIGHT, "RIGHT"},//262
{GLFW_KEY_LEFT, "LEFT"},//263
{GLFW_KEY_DOWN, "DOWN"},//264
{GLFW_KEY_UP, "UP"},//265
{GLFW_KEY_PAGE_UP, ""},//266
{GLFW_KEY_PAGE_DOWN, ""},//267
{GLFW_KEY_HOME, ""},//268
{GLFW_KEY_END, ""},//269
{GLFW_KEY_CAPS_LOCK, ""},//280
{GLFW_KEY_SCROLL_LOCK, ""},//281
{GLFW_KEY_NUM_LOCK, ""},//282
{GLFW_KEY_PRINT_SCREEN, ""},//283
{GLFW_KEY_PAUSE, ""},//284
{GLFW_KEY_F1, "F1"},//290
{GLFW_KEY_F2, "F2"},//291
{GLFW_KEY_F3, "F3"},//292
{GLFW_KEY_F4, "F4"},//293
{GLFW_KEY_F5, "F5"},//294
{GLFW_KEY_F6, "F6"},//295
{GLFW_KEY_F7, "F7"},//296
{GLFW_KEY_F8, "F8"},//297
{GLFW_KEY_F9, "F9"},//298
{GLFW_KEY_F10, "F10"},//299
{GLFW_KEY_F11, "F11"},//300
{GLFW_KEY_F12, "F12"},//301
{GLFW_KEY_F13, ""},//302
{GLFW_KEY_F14, ""},//303
{GLFW_KEY_F15, ""},//304
{GLFW_KEY_F16, ""},//305
{GLFW_KEY_F17, ""},//306
{GLFW_KEY_F18, ""},//307
{GLFW_KEY_F19, ""},//308
{GLFW_KEY_F20, ""},//309
{GLFW_KEY_F21, ""},//310
{GLFW_KEY_F22, ""},//311
{GLFW_KEY_F23, ""},//312
{GLFW_KEY_F24, ""},//313
{GLFW_KEY_F25, ""},//314
{GLFW_KEY_KP_0, ""},//320
{GLFW_KEY_KP_1, ""},//321
{GLFW_KEY_KP_2, ""},//322
{GLFW_KEY_KP_3, ""},//323
{GLFW_KEY_KP_4, ""},//324
{GLFW_KEY_KP_5, ""},//325
{GLFW_KEY_KP_6, ""},//326
{GLFW_KEY_KP_7, ""},//327
{GLFW_KEY_KP_8, ""},//328
{GLFW_KEY_KP_9, ""},//329
{GLFW_KEY_KP_DECIMAL, ""},//330
{GLFW_KEY_KP_DIVIDE, ""},//331
{GLFW_KEY_KP_MULTIPLY, ""},//332
{GLFW_KEY_KP_SUBTRACT, ""},//333
{GLFW_KEY_KP_ADD, ""},//334
{GLFW_KEY_KP_ENTER, ""},//335
{GLFW_KEY_KP_EQUAL, ""},//336
{GLFW_KEY_LEFT_SHIFT, ""},//340
{GLFW_KEY_LEFT_CONTROL, ""},//341
{GLFW_KEY_LEFT_ALT, ""},//342
{GLFW_KEY_LEFT_SUPER, ""},//343
{GLFW_KEY_RIGHT_SHIFT, ""},//344
{GLFW_KEY_RIGHT_CONTROL, ""},//345
{GLFW_KEY_RIGHT_ALT, ""},//346
{GLFW_KEY_RIGHT_SUPER, ""},//347
{GLFW_KEY_MENU, ""},//348
{GLFW_KEY_LAST, ""},//GLFW_KEY_MENU
};


} // namespace gproshan

#endif // GLFW_KEYS_H

26 changes: 15 additions & 11 deletions include/gproshan/viewer/viewer.h
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,6 @@
// geometry processing and shape analysis framework
namespace gproshan {

const size_t max_nframes = 1000;

class viewer
{
Expand All @@ -41,21 +40,21 @@ class viewer

struct process_t
{
std::string key;
std::string name;
function_t function;
index_t sub_menu;
const char * key = nullptr;
const char * name = nullptr;
function_t function = nullptr;
index_t sub_menu = NIL;
bool selected = false;

process_t() = default;
process_t(const std::string & k, const std::string & n, function_t f, const index_t & sm = NIL): key(k), name(n), function(f), sub_menu(sm) {};
};

static const std::vector<ivec2> m_window_split;
static const size_t max_meshes;
static const std::vector<std::string> colormap;
static const size_t max_meshes;
static const size_t max_nframes = 1000;

static che_sphere sphere_data;


bool apply_all_meshes = false;


Expand Down Expand Up @@ -91,7 +90,7 @@ class viewer

float bgc = 0;

std::map<int, process_t> processes;
std::unordered_map<int, process_t> processes;

che_viewer * sphere = nullptr;
shader shader_sphere;
Expand All @@ -107,8 +106,11 @@ class viewer
virtual ~viewer();

che_viewer & selected_mesh();
void add_process(const int & key, const std::string & skey, const std::string & name, const function_t & f);
void add_process(const char * name, const function_t & f, const int & key = -1);
bool add_mesh(che * p_mesh, const bool & reset_normals = true);
bool remove_mesh(const index_t & idx);
bool pop_mesh();
void update_viewport_meshes();
void update_status_message(const char * format, ...);

protected:
Expand Down Expand Up @@ -143,6 +145,8 @@ class viewer
static bool m_save_load_view(viewer * view);
static bool m_reset_mesh(viewer * view);
static bool m_save_mesh(viewer * view);
static bool m_remove_mesh(viewer * view);
static bool m_pop_mesh(viewer * view);
static bool m_normalize_mesh(viewer * view);
static bool m_zoom_in(viewer * view);
static bool m_zoom_out(viewer * view);
Expand Down
68 changes: 34 additions & 34 deletions src/gproshan/app_viewer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -43,56 +43,56 @@ int app_viewer::main(int nargs, const char ** args)
void app_viewer::init()
{
sub_menus.push_back("Point Cloud");
add_process(1001, "", "KNN", process_knn);
add_process(1002, "", "Compute Normals", process_compute_normals);
add_process("KNN", process_knn);
add_process("Compute Normals", process_compute_normals);

sub_menus.push_back("Scenes");
add_process(1003, "", "Scan Scene", process_simulate_scanner);
add_process("Scan Scene", process_simulate_scanner);

sub_menus.push_back("Geometry");
add_process(1004, "", "Sampling 4points", process_sampling_4points);
add_process(GLFW_KEY_H, "H", "2D Convex Hull", process_convex_hull);
add_process(GLFW_KEY_O, "O", "Connected Components", process_connected_components);
add_process(GLFW_KEY_K, "K", "Gaussian curvature", process_gaussian_curvature);
add_process(GLFW_KEY_Q, "Q", "Edge Collapse", process_edge_collapse);
add_process(GLFW_KEY_M, "M", "Multiplicate", process_multiplicate_vertices);
add_process(GLFW_KEY_DELETE, "DELETE", "Delete vertices", process_delete_vertices);
add_process(GLFW_KEY_MINUS, "MINUS", "Delete non-manifold vertices", process_delete_non_manifold_vertices);
add_process("Sampling 4points", process_sampling_4points);
add_process("2D Convex Hull", process_convex_hull, GLFW_KEY_H);
add_process("Connected Components", process_connected_components, GLFW_KEY_O);
add_process("Gaussian curvature", process_gaussian_curvature, GLFW_KEY_K);
add_process("Edge Collapse", process_edge_collapse, GLFW_KEY_Q);
add_process("Multiplicate", process_multiplicate_vertices, GLFW_KEY_M);
add_process("Delete vertices", process_delete_vertices, GLFW_KEY_SLASH);
add_process("Delete non-manifold vertices", process_delete_non_manifold_vertices, GLFW_KEY_MINUS);

sub_menus.push_back("Fairing");
add_process(GLFW_KEY_F, "F", "Fairing Taubin", process_fairing_taubin);
add_process(GLFW_KEY_E, "E", "Fairing Spectral", process_fairing_spectral);
add_process("Fairing Taubin", process_fairing_taubin, GLFW_KEY_F);
add_process("Fairing Spectral", process_fairing_spectral, GLFW_KEY_E);

sub_menus.push_back("Geodesics");
add_process(GLFW_KEY_G, "G", "Geodesics", process_geodesics);
add_process(GLFW_KEY_S, "S", "Geodesic Farthest Point Sampling", process_farthest_point_sampling);
add_process(GLFW_KEY_V, "V", "Geodesic Voronoi", process_voronoi);
add_process(GLFW_KEY_T, "T", "Toplesets", process_compute_toplesets);
add_process("Geodesics", process_geodesics, GLFW_KEY_G);
add_process("Geodesic Farthest Point Sampling", process_farthest_point_sampling, GLFW_KEY_S);
add_process("Geodesic Voronoi", process_voronoi, GLFW_KEY_V);
add_process("Toplesets", process_compute_toplesets, GLFW_KEY_T);

sub_menus.push_back("Sparse Coding");
add_process(GLFW_KEY_U, "U", "Mesh Sparse Coding", process_msparse_coding);
add_process(GLFW_KEY_J, "J", "MDICT Patch", process_mdict_patch);
add_process(GLFW_KEY_D, "D", "MDICT Mask", process_mask);
add_process(GLFW_KEY_L, "L", "PC reconstruction", process_pc_reconstruction);
add_process("Mesh Sparse Coding", process_msparse_coding, GLFW_KEY_U);
add_process("MDICT Patch", process_mdict_patch, GLFW_KEY_J);
add_process("MDICT Mask", process_mask, GLFW_KEY_D);
add_process("PC reconstruction", process_pc_reconstruction, GLFW_KEY_L);

sub_menus.push_back("Features");
add_process(GLFW_KEY_2, "2", "Eigenfunctions", process_eigenfuntions);
add_process(GLFW_KEY_3, "3", "Descriptors", process_descriptor_heatmap);
add_process(GLFW_KEY_4, "4", "Key Points", process_key_points);
add_process(GLFW_KEY_5, "5", "Key Components", process_key_components);
add_process("Eigenfunctions", process_eigenfuntions, GLFW_KEY_2);
add_process("Descriptors", process_descriptor_heatmap, GLFW_KEY_3);
add_process("Key Points", process_key_points, GLFW_KEY_4);
add_process("Key Components", process_key_components, GLFW_KEY_5);

sub_menus.push_back("Hole Filling");
add_process(GLFW_KEY_X, "X", "Poisson: Membrane surface", process_poisson_laplacian_1);
add_process(GLFW_KEY_Y, "Y", "Poisson: Thin-plate surface", process_poisson_laplacian_2);
add_process(GLFW_KEY_Z, "Z", "Poisson: Minimum variation surface", process_poisson_laplacian_3);
add_process(GLFW_KEY_6, "6", "Fill hole: planar mesh", process_fill_holes);
add_process(GLFW_KEY_7, "7", "Fill hole: biharmonic splines", process_fill_holes_biharmonic_splines);
add_process("Poisson: Membrane surface", process_poisson_laplacian_1, GLFW_KEY_X);
add_process("Poisson: Thin-plate surface", process_poisson_laplacian_2, GLFW_KEY_Y);
add_process("Poisson: Minimum variation surface", process_poisson_laplacian_3, GLFW_KEY_Z);
add_process("Fill hole: planar mesh", process_fill_holes, GLFW_KEY_6);
add_process("Fill hole: biharmonic splines", process_fill_holes_biharmonic_splines, GLFW_KEY_7);

sub_menus.push_back("Others");
add_process(GLFW_KEY_SEMICOLON, "SEMICOLON", "Select multiple vertices", process_select_multiple);
add_process(GLFW_KEY_SLASH, "SLASH", "Threshold", process_threshold);
add_process(GLFW_KEY_N, "N", "Noise", process_noise);
add_process(GLFW_KEY_P, "P", "Black noise", process_black_noise);
add_process("Select multiple vertices", process_select_multiple, GLFW_KEY_SEMICOLON);
add_process("Threshold", process_threshold, GLFW_KEY_BACKSLASH);
add_process("Noise", process_noise, GLFW_KEY_N);
add_process("Black noise", process_black_noise, GLFW_KEY_P);
}


Expand Down
Loading

0 comments on commit 5dbdfd9

Please sign in to comment.