diff options
author | Enrico Turri <enricoturri@seznam.cz> | 2018-01-16 16:59:06 +0300 |
---|---|---|
committer | Enrico Turri <enricoturri@seznam.cz> | 2018-01-16 16:59:06 +0300 |
commit | c63e6b74fa15d69bb0ca9ab5b62f8cfd3129d616 (patch) | |
tree | 05481256f2d8642a49e26261fa44507ca412c05b /lib | |
parent | 9e0dd2a96a12bb187767a702145c776ab5ea9d19 (diff) |
GCode Preview - Added legend texture
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Slic3r/GUI/3DScene.pm | 119 | ||||
-rw-r--r-- | lib/Slic3r/GUI/Plater.pm | 13 |
2 files changed, 129 insertions, 3 deletions
diff --git a/lib/Slic3r/GUI/3DScene.pm b/lib/Slic3r/GUI/3DScene.pm index f97586073..ddd18f88d 100644 --- a/lib/Slic3r/GUI/3DScene.pm +++ b/lib/Slic3r/GUI/3DScene.pm @@ -30,6 +30,7 @@ use Slic3r::Geometry qw(PI); # _dirty: boolean flag indicating, that the screen has to be redrawn on EVT_IDLE. # volumes: reference to vector of Slic3r::GUI::3DScene::Volume. # _camera_type: 'perspective' or 'ortho' +# ===================== ENRICO_GCODE_PREVIEW ================================================== __PACKAGE__->mk_accessors( qw(_quat _dirty init enable_picking enable_moving @@ -66,7 +67,50 @@ __PACKAGE__->mk_accessors( qw(_quat _dirty init _camera_target _camera_distance _zoom + + _legend_enabled + ) ); + +#__PACKAGE__->mk_accessors( qw(_quat _dirty init +# enable_picking +# enable_moving +# use_plain_shader +# on_viewport_changed +# on_hover +# on_select +# on_double_click +# on_right_click +# on_move +# on_model_update +# volumes +# _sphi _stheta +# cutting_plane_z +# cut_lines_vertices +# bed_shape +# bed_triangles +# bed_grid_lines +# bed_polygon +# background +# origin +# _mouse_pos +# _hover_volume_idx +# +# _drag_volume_idx +# _drag_start_pos +# _drag_volume_center_offset +# _drag_start_xy +# _dragged +# +# _layer_height_edited +# +# _camera_type +# _camera_target +# _camera_distance +# _zoom +# +# ) ); +# ===================== ENRICO_GCODE_PREVIEW ================================================== use constant TRACKBALLSIZE => 0.8; use constant TURNTABLE_MODE => 1; @@ -137,6 +181,9 @@ sub new { $self->_stheta(45); $self->_sphi(45); $self->_zoom(1); +# ===================== ENRICO_GCODE_PREVIEW ================================================== + $self->_legend_enabled(0); +# ===================== ENRICO_GCODE_PREVIEW ================================================== $self->use_plain_shader(0); # Collection of GLVolume objects @@ -209,6 +256,13 @@ sub new { return $self; } +# ===================== ENRICO_GCODE_PREVIEW ================================================== +sub set_legend_enabled { + my ($self, $value) = @_; + $self->_legend_enabled($value); +} +# ===================== ENRICO_GCODE_PREVIEW ================================================== + sub Destroy { my ($self) = @_; $self->{layer_height_edit_timer}->Stop; @@ -1316,6 +1370,11 @@ sub Render { glDisable(GL_BLEND); } +# ===================== ENRICO_GCODE_PREVIEW ================================================== + # draw gcode preview legend + $self->draw_legend; +# ===================== ENRICO_GCODE_PREVIEW ================================================== + $self->draw_active_object_annotations; $self->SwapBuffers(); @@ -1449,12 +1508,38 @@ sub _variable_layer_thickness_load_reset_image { # Paint the tooltip. sub _render_image { my ($self, $image, $l, $r, $b, $t) = @_; +# ===================== ENRICO_GCODE_PREVIEW ================================================== + $self->_render_texture($image->{texture_id}, $l, $r, $b, $t); + +# glColor4f(1.,1.,1.,1.); +# glDisable(GL_LIGHTING); +# glEnable(GL_BLEND); +# glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); +# glEnable(GL_TEXTURE_2D); +# glBindTexture(GL_TEXTURE_2D, $image->{texture_id}); +# glBegin(GL_QUADS); +# glTexCoord2d(0.,1.); glVertex3f($l, $b, 0); +# glTexCoord2d(1.,1.); glVertex3f($r, $b, 0); +# glTexCoord2d(1.,0.); glVertex3f($r, $t, 0); +# glTexCoord2d(0.,0.); glVertex3f($l, $t, 0); +# glEnd(); +# glBindTexture(GL_TEXTURE_2D, 0); +# glDisable(GL_TEXTURE_2D); +# glDisable(GL_BLEND); +# glEnable(GL_LIGHTING); +# ===================== ENRICO_GCODE_PREVIEW ================================================== +} + +# ===================== ENRICO_GCODE_PREVIEW ================================================== +sub _render_texture { + my ($self, $tex_id, $l, $r, $b, $t) = @_; + glColor4f(1.,1.,1.,1.); glDisable(GL_LIGHTING); glEnable(GL_BLEND); glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable(GL_TEXTURE_2D); - glBindTexture(GL_TEXTURE_2D, $image->{texture_id}); + glBindTexture(GL_TEXTURE_2D, $tex_id); glBegin(GL_QUADS); glTexCoord2d(0.,1.); glVertex3f($l, $b, 0); glTexCoord2d(1.,1.); glVertex3f($r, $b, 0); @@ -1466,6 +1551,7 @@ sub _render_image { glDisable(GL_BLEND); glEnable(GL_LIGHTING); } +# ===================== ENRICO_GCODE_PREVIEW ================================================== sub draw_active_object_annotations { # $fakecolor is a boolean indicating, that the objects shall be rendered in a color coding the object index for picking. @@ -1579,6 +1665,37 @@ sub draw_active_object_annotations { glEnable(GL_DEPTH_TEST); } +# ===================== ENRICO_GCODE_PREVIEW ================================================== +sub draw_legend { + my ($self) = @_; + + if ($self->_legend_enabled) + { + my $tex_id = Slic3r::GUI::_3DScene::get_legend_texture_id; + if ($tex_id > 0) + { + glDisable(GL_DEPTH_TEST); + glPushMatrix(); + glLoadIdentity(); + + my $tex_w = Slic3r::GUI::_3DScene::get_legend_texture_width; + my $tex_h = Slic3r::GUI::_3DScene::get_legend_texture_height; + + my ($cw, $ch) = $self->GetSizeWH; + + my $l = (-0.5 * $cw) / $self->_zoom; + my $t = (0.5 * $ch) / $self->_zoom; + my $r = $l + $tex_w / $self->_zoom; + my $b = $t - $tex_h / $self->_zoom; + $self->_render_texture($tex_id, $l, $r, $b, $t); + + glPopMatrix(); + glEnable(GL_DEPTH_TEST); + } + } +} +# ===================== ENRICO_GCODE_PREVIEW ================================================== + sub opengl_info { my ($self, %params) = @_; diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm index 63e628f3e..d7afe0e30 100644 --- a/lib/Slic3r/GUI/Plater.pm +++ b/lib/Slic3r/GUI/Plater.pm @@ -153,8 +153,17 @@ sub new { EVT_NOTEBOOK_PAGE_CHANGED($self, $self->{preview_notebook}, sub { my $preview = $self->{preview_notebook}->GetCurrentPage; - $self->{preview3D}->load_print(1) if ($preview == $self->{preview3D}); - $preview->OnActivate if $preview->can('OnActivate'); +# ===================== ENRICO_GCODE_PREVIEW ================================================== + if ($preview == $self->{preview3D}) + { + $self->{preview3D}->canvas->set_legend_enabled(1); + $self->{preview3D}->load_print(1); + } else { + $self->{preview3D}->canvas->set_legend_enabled(0); + } +# $self->{preview3D}->load_print(1) if ($preview == $self->{preview3D}); +# ===================== ENRICO_GCODE_PREVIEW ================================================== + $preview->OnActivate if $preview->can('OnActivate'); }); # toolbar for object manipulation |