ViewerPlugin.h 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179
  1. // This file is part of libigl, a simple c++ geometry processing library.
  2. //
  3. // Copyright (C) 2014 Daniele Panozzo <daniele.panozzo@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_OPENGL_GLFW_VIEWERPLUGIN_H
  9. #define IGL_OPENGL_GLFW_VIEWERPLUGIN_H
  10. // TODO:
  11. // * create plugins/skeleton.h
  12. // * pass time in draw function
  13. // * remove Preview3D from comments
  14. // * clean comments
  15. #include <string>
  16. #include <igl/igl_inline.h>
  17. #include <vector>
  18. namespace igl
  19. {
  20. namespace opengl
  21. {
  22. namespace glfw
  23. {
  24. // Abstract class for plugins
  25. // All plugins MUST have this class as their parent and may implement any/all
  26. // the callbacks marked `virtual` here.
  27. //
  28. // /////For an example of a basic plugins see plugins/skeleton.h
  29. //
  30. // Return value of callbacks: returning true to any of the callbacks tells
  31. // Viewer that the event has been handled and that it should not be passed to
  32. // other plugins or to other internal functions of Viewer
  33. // Forward declaration of the viewer
  34. class Viewer;
  35. class ViewerPlugin
  36. {
  37. public:
  38. IGL_INLINE ViewerPlugin()
  39. {plugin_name = "dummy";}
  40. virtual ~ViewerPlugin(){}
  41. // This function is called when the viewer is initialized (no mesh will be loaded at this stage)
  42. IGL_INLINE virtual void init(Viewer *_viewer)
  43. {
  44. viewer = _viewer;
  45. }
  46. // This function is called before shutdown
  47. IGL_INLINE virtual void shutdown()
  48. {
  49. }
  50. // This function is called before a mesh is loaded
  51. IGL_INLINE virtual bool load(std::string filename)
  52. {
  53. return false;
  54. }
  55. // This function is called before a mesh is saved
  56. IGL_INLINE virtual bool save(std::string filename)
  57. {
  58. return false;
  59. }
  60. // This function is called when the scene is serialized
  61. IGL_INLINE virtual bool serialize(std::vector<char>& buffer) const
  62. {
  63. return false;
  64. }
  65. // This function is called when the scene is deserialized
  66. IGL_INLINE virtual bool deserialize(const std::vector<char>& buffer)
  67. {
  68. return false;
  69. }
  70. // Runs immediately after a new mesh has been loaded.
  71. IGL_INLINE virtual bool post_load()
  72. {
  73. return false;
  74. }
  75. // This function is called before the draw procedure of Preview3D
  76. IGL_INLINE virtual bool pre_draw()
  77. {
  78. return false;
  79. }
  80. // This function is called after the draw procedure of Preview3D
  81. IGL_INLINE virtual bool post_draw()
  82. {
  83. return false;
  84. }
  85. // This function is called when the mouse button is pressed
  86. // - button can be GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON or GLUT_RIGHT_BUTTON
  87. // - modifiers is a bitfield that might one or more of the following bits Preview3D::NO_KEY, Preview3D::SHIFT, Preview3D::CTRL, Preview3D::ALT;
  88. IGL_INLINE virtual bool mouse_down(int button, int modifier)
  89. {
  90. return false;
  91. }
  92. // This function is called when the mouse button is released
  93. // - button can be GLUT_LEFT_BUTTON, GLUT_MIDDLE_BUTTON or GLUT_RIGHT_BUTTON
  94. // - modifiers is a bitfield that might one or more of the following bits Preview3D::NO_KEY, Preview3D::SHIFT, Preview3D::CTRL, Preview3D::ALT;
  95. IGL_INLINE virtual bool mouse_up(int button, int modifier)
  96. {
  97. return false;
  98. }
  99. // This function is called every time the mouse is moved
  100. // - mouse_x and mouse_y are the new coordinates of the mouse pointer in screen coordinates
  101. IGL_INLINE virtual bool mouse_move(int mouse_x, int mouse_y)
  102. {
  103. return false;
  104. }
  105. // This function is called every time the scroll wheel is moved
  106. // Note: this callback is not working with every glut implementation
  107. IGL_INLINE virtual bool mouse_scroll(float delta_y)
  108. {
  109. return false;
  110. }
  111. // This function is called when a keyboard key is pressed. Unlike key_down
  112. // this will reveal the actual character being sent (not just the physical
  113. // key)
  114. // - modifiers is a bitfield that might one or more of the following bits Preview3D::NO_KEY, Preview3D::SHIFT, Preview3D::CTRL, Preview3D::ALT;
  115. IGL_INLINE virtual bool key_pressed(unsigned int key, int modifiers)
  116. {
  117. return false;
  118. }
  119. // This function is called when a keyboard key is down
  120. // - modifiers is a bitfield that might one or more of the following bits Preview3D::NO_KEY, Preview3D::SHIFT, Preview3D::CTRL, Preview3D::ALT;
  121. IGL_INLINE virtual bool key_down(int key, int modifiers)
  122. {
  123. return false;
  124. }
  125. // This function is called when a keyboard key is release
  126. // - modifiers is a bitfield that might one or more of the following bits Preview3D::NO_KEY, Preview3D::SHIFT, Preview3D::CTRL, Preview3D::ALT;
  127. IGL_INLINE virtual bool key_up(int key, int modifiers)
  128. {
  129. return false;
  130. }
  131. std::string plugin_name;
  132. protected:
  133. // Pointer to the main Viewer class
  134. Viewer *viewer;
  135. };
  136. #ifdef ENABLE_SERIALIZATION
  137. namespace serialization
  138. {
  139. inline void serialize(const ViewerPlugin& obj,std::vector<char>& buffer)
  140. {
  141. obj.serialize(buffer);
  142. }
  143. inline void deserialize(ViewerPlugin& obj,const std::vector<char>& buffer)
  144. {
  145. obj.deserialize(buffer);
  146. }
  147. }
  148. #endif
  149. }
  150. }
  151. }
  152. #endif