From 7375f6a6f588b7581286f50ad210204979c8960f Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 19 Feb 2018 11:28:56 +0100 Subject: [PATCH 1/2] Fixed camera shifting after generating gcode --- lib/Slic3r/GUI/3DScene.pm | 8 +++++++- xs/src/slic3r/GUI/3DScene.cpp | 5 +++++ xs/src/slic3r/GUI/3DScene.hpp | 3 +++ xs/xsp/GUI_3DScene.xsp | 2 ++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/lib/Slic3r/GUI/3DScene.pm b/lib/Slic3r/GUI/3DScene.pm index 4ca5b4188..b16f7db42 100644 --- a/lib/Slic3r/GUI/3DScene.pm +++ b/lib/Slic3r/GUI/3DScene.pm @@ -68,6 +68,7 @@ __PACKAGE__->mk_accessors( qw(_quat _dirty init _zoom _legend_enabled + _apply_zoom_to_volumes_filter ) ); @@ -142,6 +143,7 @@ sub new { $self->_zoom(1); $self->_legend_enabled(0); $self->use_plain_shader(0); + $self->_apply_zoom_to_volumes_filter(0); # Collection of GLVolume objects $self->volumes(Slic3r::GUI::_3DScene::GLVolume::Collection->new); @@ -704,14 +706,18 @@ sub zoom_to_volume { sub zoom_to_volumes { my ($self) = @_; + $self->_apply_zoom_to_volumes_filter(1); $self->zoom_to_bounding_box($self->volumes_bounding_box); + $self->_apply_zoom_to_volumes_filter(0); } sub volumes_bounding_box { my ($self) = @_; my $bb = Slic3r::Geometry::BoundingBoxf3->new; - $bb->merge($_->transformed_bounding_box) for @{$self->volumes}; + foreach my $v (@{$self->volumes}) { + $bb->merge($v->transformed_bounding_box) if (! $self->_apply_zoom_to_volumes_filter || $v->zoom_to_volumes); + } return $bb; } diff --git a/xs/src/slic3r/GUI/3DScene.cpp b/xs/src/slic3r/GUI/3DScene.cpp index 3deadd105..3a8aa5ca7 100644 --- a/xs/src/slic3r/GUI/3DScene.cpp +++ b/xs/src/slic3r/GUI/3DScene.cpp @@ -2211,26 +2211,31 @@ void _3DScene::_update_gcode_volumes_visibility(const GCodePreviewData& preview_ case GCodePreviewVolumeIndex::Travel: { volume->is_active = preview_data.travel.is_visible; + volume->zoom_to_volumes = false; break; } case GCodePreviewVolumeIndex::Retraction: { volume->is_active = preview_data.retraction.is_visible; + volume->zoom_to_volumes = false; break; } case GCodePreviewVolumeIndex::Unretraction: { volume->is_active = preview_data.unretraction.is_visible; + volume->zoom_to_volumes = false; break; } case GCodePreviewVolumeIndex::Shell: { volume->is_active = preview_data.shell.is_visible; + volume->zoom_to_volumes = false; break; } default: { volume->is_active = false; + volume->zoom_to_volumes = false; break; } } diff --git a/xs/src/slic3r/GUI/3DScene.hpp b/xs/src/slic3r/GUI/3DScene.hpp index 9cbcb6ebc..542be3ef6 100644 --- a/xs/src/slic3r/GUI/3DScene.hpp +++ b/xs/src/slic3r/GUI/3DScene.hpp @@ -215,6 +215,7 @@ public: drag_group_id(-1), selected(false), is_active(true), + zoom_to_volumes(true), hover(false), tverts_range(0, size_t(-1)), qverts_range(0, size_t(-1)) @@ -253,6 +254,8 @@ public: bool selected; // Whether or not this volume is active for rendering bool is_active; + // Whether or not to use this volume when applying zoom_to_volumes() + bool zoom_to_volumes; // Boolean: Is mouse over this object? bool hover; diff --git a/xs/xsp/GUI_3DScene.xsp b/xs/xsp/GUI_3DScene.xsp index 961c837d9..dbf171615 100644 --- a/xs/xsp/GUI_3DScene.xsp +++ b/xs/xsp/GUI_3DScene.xsp @@ -42,6 +42,8 @@ %code%{ RETVAL = THIS->hover; %}; void set_hover(int i) %code%{ THIS->hover = i; %}; + int zoom_to_volumes() + %code%{ RETVAL = THIS->zoom_to_volumes; %}; int object_idx() const; int volume_idx() const; From d4f1ed0036183153464df7b5eef66cf60c7c6433 Mon Sep 17 00:00:00 2001 From: Enrico Turri Date: Mon, 19 Feb 2018 13:46:36 +0100 Subject: [PATCH 2/2] Fixed crash while exporting MultiMaterial --- xs/src/libslic3r/GCode.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xs/src/libslic3r/GCode.cpp b/xs/src/libslic3r/GCode.cpp index 080b4769d..2c2df6ec3 100644 --- a/xs/src/libslic3r/GCode.cpp +++ b/xs/src/libslic3r/GCode.cpp @@ -1384,7 +1384,7 @@ void GCode::apply_print_config(const PrintConfig &print_config) void GCode::append_full_config(const Print& print, std::string& str) { - char buff[1024]; + char buff[4096]; const StaticPrintConfig *configs[] = { &print.config, &print.default_object_config, &print.default_region_config }; for (size_t i = 0; i < sizeof(configs) / sizeof(configs[0]); ++i) {