106_ViewerMenu.py 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. # Add the igl library to the modules search path
  2. import sys, os
  3. sys.path.insert(0, os.getcwd() + "/../")
  4. import pyigl as igl
  5. import nanogui
  6. V1 = igl.eigen.MatrixXd()
  7. F1 = igl.eigen.MatrixXi()
  8. V2 = igl.eigen.MatrixXd()
  9. F2 = igl.eigen.MatrixXi()
  10. float_variable = 0.1
  11. bool_variable = True
  12. dir = 0
  13. def make_accessors(name):
  14. def setter(value):
  15. globals()[name] = value
  16. def getter():
  17. return globals()[name]
  18. return setter, getter
  19. def viewer_init(viewer):
  20. # add new group
  21. viewer.ngui.addGroup("New Group")
  22. # Expose the using general callback
  23. viewer.ngui.addDoubleVariable("double", *make_accessors("float_variable"))
  24. def setter(val):
  25. global bool_variable
  26. bool_variable = val
  27. def getter():
  28. global bool_variable
  29. return bool_variable
  30. # ... or using a custom callback
  31. viewer.ngui.addBoolVariable("bool", setter, getter)
  32. viewer.ngui.addEnumVariable("Direction", *make_accessors("dir")) \
  33. .setItems(["Up", "Down", "Left", "Right"])
  34. # Add a button
  35. def cb():
  36. print("Hello")
  37. viewer.ngui.addButton("Print Hello", cb)
  38. #Add an additional menu window
  39. viewer.ngui.addWindow(nanogui.Vector2i(220, 10), "New Window")
  40. # add accessor
  41. viewer.ngui.addDoubleVariable("double", *make_accessors("float_variable"))
  42. #Generate menu
  43. viewer.screen.performLayout()
  44. return False
  45. def main():
  46. # Load a mesh in OFF format
  47. igl.readOFF("../../tutorial/shared/bunny.off", V1, F1)
  48. # Init the viewer
  49. viewer = igl.viewer.Viewer()
  50. # Extend viewer menu
  51. viewer.callback_init = viewer_init
  52. # Plot the mesh
  53. viewer.data.set_mesh(V1, F1)
  54. viewer.launch()
  55. if __name__ == "__main__":
  56. main()