client.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. #!/usr/bin/python
  2. # Ping a peer
  3. from pydrk import Api, exc, ErrorCode, HostApi, SceneNodeType, PropertyType, vertex, face, serial
  4. import gui
  5. import sys, zmq
  6. def clear_layer(layer_path):
  7. layer_id = api.lookup_node_id("/window/layer2")
  8. if layer_id is None:
  9. return
  10. win_id = api.lookup_node_id("/window")
  11. api.unlink_node(layer_id, win_id)
  12. for (_, child_id, child_type) in api.get_children(layer_id):
  13. api.unlink_node(child_id, layer_id)
  14. if child_type == SceneNodeType.RENDER_OBJECT:
  15. remove_node_recursive(child_id)
  16. api.remove_node(layer_id)
  17. def recalc_areas():
  18. print("recalc areas")
  19. w = get_property("/window", "width")
  20. h = get_property("/window", "height")
  21. set_property("/window/layer2", "rect_w", int(w))
  22. set_property("/window/layer2", "rect_h", int(h))
  23. gui.print_tree()
  24. #api = Api()
  25. #host = HostApi(api)
  26. #print(api.hello())
  27. #
  28. #garbage_collect()
  29. #clear_layer("/window/layer2")
  30. #
  31. #print("Generating scene...")
  32. #subsock = make_sub_socket()
  33. #
  34. #register_slot("/window", "resize", b"resize")
  35. #register_slot("/window/input/mouse", "button_down", b"click")
  36. #register_slot("/window/input/mouse", "wheel", b"wheel")
  37. ##register_slot("/window/input/mouse", "move", b"mouse")
  38. #
  39. #layer_id = api.add_node("layer2", SceneNodeType.RENDER_LAYER)
  40. #api.add_property(layer_id, "rect_x", PropertyType.UINT32)
  41. #api.add_property(layer_id, "rect_y", PropertyType.UINT32)
  42. #api.add_property(layer_id, "rect_w", PropertyType.UINT32)
  43. #api.add_property(layer_id, "rect_h", PropertyType.UINT32)
  44. #api.add_property(layer_id, "is_visible", PropertyType.BOOL)
  45. #api.set_property_bool(layer_id, "is_visible", True)
  46. #win_id = api.lookup_node_id("/window")
  47. #api.link_node(layer_id, win_id)
  48. #
  49. #if True:
  50. # layer_id = api.lookup_node_id("/window/layer2")
  51. #
  52. # obj_id = api.add_node("obj1", SceneNodeType.RENDER_OBJECT)
  53. # api.add_property(obj_id, "x", PropertyType.FLOAT32)
  54. # api.add_property(obj_id, "y", PropertyType.FLOAT32)
  55. # api.add_property(obj_id, "scale", PropertyType.FLOAT32)
  56. # api.set_property_f32(obj_id, "scale", 1.0)
  57. #
  58. # mesh_id = api.add_node("mesh", SceneNodeType.RENDER_MESH)
  59. # api.add_property(mesh_id, "verts", PropertyType.BUFFER)
  60. # api.add_property(mesh_id, "faces", PropertyType.BUFFER)
  61. #
  62. # texture_id = host.load_texture("da_king", "king.png")
  63. # api.link_node(texture_id, obj_id)
  64. # # To preserve the ratio, we should do this when resize happens too
  65. # texture_w = api.get_property(texture_id, "width")
  66. # texture_h = api.get_property(texture_id, "width")
  67. # texture_ratio = texture_w / texture_h
  68. # screen_w = get_property("/window", "width")
  69. # screen_h = get_property("/window", "height")
  70. # screen_ratio = screen_w / screen_h
  71. # aspect_ratio = texture_ratio / screen_ratio
  72. #
  73. # #api.set_property_bool("/window/layer2", "is_visible", False)
  74. # # Lets add a poly - must be counterclockwise
  75. # x, y = 0.25, 0.25
  76. # w, h = 0.5 * aspect_ratio, 0.5
  77. # vert1 = vertex(x, y, 1, 1, 1, 1, 0, 0)
  78. # vert2 = vertex(x + w, y, 1, 1, 1, 1, 1, 0)
  79. # vert3 = vertex(x, y + h, 1, 1, 1, 1, 0, 1)
  80. # vert4 = vertex(x + w, y + h, 1, 1, 1, 1, 1, 1)
  81. # api.set_property_buffer(mesh_id, "verts", vert1 + vert2 + vert3 + vert4)
  82. # api.set_property_buffer(mesh_id, "faces", face(0, 2, 1) + face(1, 2, 3))
  83. #
  84. # api.link_node(mesh_id, obj_id)
  85. # api.link_node(obj_id, layer_id)
  86. #
  87. #if True:
  88. # layer_id = api.lookup_node_id("/window/layer2")
  89. # obj_id = api.add_node("obj", SceneNodeType.RENDER_OBJECT)
  90. # api.add_property(obj_id, "x", PropertyType.FLOAT32)
  91. # api.add_property(obj_id, "y", PropertyType.FLOAT32)
  92. # api.add_property(obj_id, "scale", PropertyType.FLOAT32)
  93. # api.set_property_f32(obj_id, "scale", 1.0)
  94. #
  95. # # Call method
  96. # text_id = host.create_text(
  97. # "/font/inter-regular", "mytxt2", "hello world", 34
  98. # )
  99. # if text_id is None:
  100. # sys.exit(-1)
  101. # print("create text node id:", text_id)
  102. #
  103. # api.set_property_f32(obj_id, "x", 0.5)
  104. # api.set_property_f32(text_id, "r", 1.0)
  105. # api.set_property_f32(text_id, "g", 1.0)
  106. # api.set_property_f32(text_id, "b", 1.0)
  107. # api.set_property_f32(text_id, "a", 1.0)
  108. #
  109. # api.link_node(text_id, obj_id)
  110. # api.link_node(obj_id, layer_id)
  111. #
  112. ## Screen init
  113. #recalc_areas()
  114. #
  115. #gui.print_tree()
  116. #print()
  117. #print("Scene created.")
  118. #
  119. #while True:
  120. # data = subsock.recv()
  121. # match data:
  122. # case b"resize":
  123. # recalc_areas()
  124. # case b"click":
  125. # x = get_property("/window/input/mouse", "x")
  126. # y = get_property("/window/input/mouse", "y")
  127. # print(f"mouse clicked ({x}, {y})")
  128. # case b"wheel":
  129. # print("mouse wheely")
  130. #
  131. gui.main()