GUI_3DScene.xsp 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216
  1. %module{Slic3r::XS};
  2. #include <xsinit.h>
  3. #include "slic3r/GUI/GLShader.hpp"
  4. #include "slic3r/GUI/3DScene.hpp"
  5. %name{Slic3r::GUI::_3DScene::GLShader} class GLShader {
  6. GLShader();
  7. ~GLShader();
  8. bool load(const char *fragment_shader, const char *vertex_shader);
  9. void release();
  10. int get_attrib_location(const char *name) const;
  11. int get_uniform_location(const char *name) const;
  12. bool set_uniform(const char *name, float value) const;
  13. void enable() const;
  14. void disable() const;
  15. std::string last_error() const
  16. %code%{ RETVAL = THIS->last_error; %};
  17. };
  18. %name{Slic3r::GUI::_3DScene::GLVolume} class GLVolume {
  19. GLVolume();
  20. ~GLVolume();
  21. std::vector<double> color()
  22. %code%{ RETVAL.reserve(4); RETVAL.push_back(THIS->color[0]); RETVAL.push_back(THIS->color[1]); RETVAL.push_back(THIS->color[2]); RETVAL.push_back(THIS->color[3]); %};
  23. int select_group_id()
  24. %code%{ RETVAL = THIS->select_group_id; %};
  25. int drag_group_id()
  26. %code%{ RETVAL = THIS->drag_group_id; %};
  27. int selected()
  28. %code%{ RETVAL = THIS->selected; %};
  29. void set_selected(int i)
  30. %code%{ THIS->selected = i; %};
  31. int hover()
  32. %code%{ RETVAL = THIS->hover; %};
  33. void set_hover(int i)
  34. %code%{ THIS->hover = i; %};
  35. int zoom_to_volumes()
  36. %code%{ RETVAL = THIS->zoom_to_volumes; %};
  37. int object_idx() const;
  38. int volume_idx() const;
  39. int instance_idx() const;
  40. Clone<Pointf3> origin() const
  41. %code%{ RETVAL = THIS->origin; %};
  42. void translate(double x, double y, double z)
  43. %code%{ THIS->origin.translate(x, y, z); %};
  44. Clone<BoundingBoxf3> bounding_box() const
  45. %code%{ RETVAL = THIS->bounding_box; %};
  46. Clone<BoundingBoxf3> transformed_bounding_box() const;
  47. bool empty() const;
  48. bool indexed() const;
  49. void render() const;
  50. bool has_layer_height_texture();
  51. int layer_height_texture_width();
  52. int layer_height_texture_height();
  53. int layer_height_texture_cells();
  54. void* layer_height_texture_data_ptr_level0();
  55. void* layer_height_texture_data_ptr_level1();
  56. double layer_height_texture_z_to_row_id() const;
  57. void generate_layer_height_texture(PrintObject *print_object, bool force);
  58. };
  59. %name{Slic3r::GUI::_3DScene::GLVolume::Collection} class GLVolumeCollection {
  60. GLVolumeCollection();
  61. ~GLVolumeCollection();
  62. std::vector<int> load_object(ModelObject *object, int obj_idx, std::vector<int> instance_idxs, std::string color_by, std::string select_by, std::string drag_by, bool use_VBOs);
  63. int load_wipe_tower_preview(int obj_idx, float pos_x, float pos_y, float width, float depth, float height, bool use_VBOs);
  64. void erase()
  65. %code{% THIS->clear(); %};
  66. int count()
  67. %code{% RETVAL = THIS->volumes.size(); %};
  68. void set_range(double low, double high);
  69. void render_VBOs() const;
  70. void render_legacy() const;
  71. void finalize_geometry(bool use_VBOs);
  72. void release_geometry();
  73. bool move_volume_up(int idx)
  74. %code%{
  75. if (idx > 0 && idx < int(THIS->volumes.size())) {
  76. std::swap(THIS->volumes[idx-1], THIS->volumes[idx]);
  77. std::swap(THIS->volumes[idx-1]->composite_id, THIS->volumes[idx]->composite_id);
  78. std::swap(THIS->volumes[idx-1]->select_group_id, THIS->volumes[idx]->select_group_id);
  79. std::swap(THIS->volumes[idx-1]->drag_group_id, THIS->volumes[idx]->drag_group_id);
  80. RETVAL = true;
  81. } else
  82. RETVAL = false;
  83. %};
  84. bool move_volume_down(int idx)
  85. %code%{
  86. if (idx >= 0 && idx + 1 < int(THIS->volumes.size())) {
  87. std::swap(THIS->volumes[idx+1], THIS->volumes[idx]);
  88. std::swap(THIS->volumes[idx+1]->composite_id, THIS->volumes[idx]->composite_id);
  89. std::swap(THIS->volumes[idx+1]->select_group_id, THIS->volumes[idx]->select_group_id);
  90. std::swap(THIS->volumes[idx+1]->drag_group_id, THIS->volumes[idx]->drag_group_id);
  91. RETVAL = true;
  92. } else
  93. RETVAL = false;
  94. %};
  95. %{
  96. SV*
  97. GLVolumeCollection::arrayref()
  98. CODE:
  99. AV* av = newAV();
  100. av_fill(av, THIS->volumes.size()-1);
  101. int i = 0;
  102. for (GLVolume *v : THIS->volumes) {
  103. av_store(av, i++, perl_to_SV_ref(*v));
  104. }
  105. RETVAL = newRV_noinc((SV*)av);
  106. OUTPUT:
  107. RETVAL
  108. %}
  109. };
  110. %package{Slic3r::GUI::_3DScene};
  111. %{
  112. void
  113. _glew_init()
  114. CODE:
  115. _3DScene::_glew_init();
  116. unsigned int
  117. finalize_legend_texture()
  118. CODE:
  119. RETVAL = _3DScene::finalize_legend_texture();
  120. OUTPUT:
  121. RETVAL
  122. unsigned int
  123. get_legend_texture_id()
  124. CODE:
  125. RETVAL = _3DScene::get_legend_texture_id();
  126. OUTPUT:
  127. RETVAL
  128. unsigned int
  129. get_legend_texture_width()
  130. CODE:
  131. RETVAL = _3DScene::get_legend_texture_width();
  132. OUTPUT:
  133. RETVAL
  134. unsigned int
  135. get_legend_texture_height()
  136. CODE:
  137. RETVAL = _3DScene::get_legend_texture_height();
  138. OUTPUT:
  139. RETVAL
  140. void
  141. reset_legend_texture()
  142. CODE:
  143. _3DScene::reset_legend_texture();
  144. void
  145. _load_print_toolpaths(print, volumes, tool_colors, use_VBOs)
  146. Print *print;
  147. GLVolumeCollection *volumes;
  148. std::vector<std::string> tool_colors;
  149. int use_VBOs;
  150. CODE:
  151. _3DScene::_load_print_toolpaths(print, volumes, tool_colors, use_VBOs != 0);
  152. void
  153. _load_print_object_toolpaths(print_object, volumes, tool_colors, use_VBOs)
  154. PrintObject *print_object;
  155. GLVolumeCollection *volumes;
  156. std::vector<std::string> tool_colors;
  157. int use_VBOs;
  158. CODE:
  159. _3DScene::_load_print_object_toolpaths(print_object, volumes, tool_colors, use_VBOs != 0);
  160. void
  161. _load_wipe_tower_toolpaths(print, volumes, tool_colors, use_VBOs)
  162. Print *print;
  163. GLVolumeCollection *volumes;
  164. std::vector<std::string> tool_colors;
  165. int use_VBOs;
  166. CODE:
  167. _3DScene::_load_wipe_tower_toolpaths(print, volumes, tool_colors, use_VBOs != 0);
  168. void
  169. load_gcode_preview(print, preview_data, volumes, str_tool_colors, use_VBOs)
  170. Print *print;
  171. GCodePreviewData *preview_data;
  172. GLVolumeCollection *volumes;
  173. std::vector<std::string> str_tool_colors;
  174. int use_VBOs;
  175. CODE:
  176. _3DScene::load_gcode_preview(print, preview_data, volumes, str_tool_colors, use_VBOs != 0);
  177. %}