mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-15 02:37:51 -06:00
Merge branch 'master' of https://github.com/prusa3d/Slic3r into opengl_to_cpp
This commit is contained in:
commit
55e7a1af46
4 changed files with 43 additions and 17 deletions
|
@ -1681,7 +1681,7 @@ sub print_info_box_show {
|
||||||
my ($self, $show) = @_;
|
my ($self, $show) = @_;
|
||||||
my $scrolled_window_panel = $self->{scrolled_window_panel};
|
my $scrolled_window_panel = $self->{scrolled_window_panel};
|
||||||
my $scrolled_window_sizer = $self->{scrolled_window_sizer};
|
my $scrolled_window_sizer = $self->{scrolled_window_sizer};
|
||||||
return if $scrolled_window_sizer->IsShown(2) == $show;
|
return if (!$show && ($scrolled_window_sizer->IsShown(2) == $show));
|
||||||
|
|
||||||
if ($show) {
|
if ($show) {
|
||||||
my $print_info_sizer = $self->{print_info_sizer};
|
my $print_info_sizer = $self->{print_info_sizer};
|
||||||
|
@ -1917,6 +1917,8 @@ sub update {
|
||||||
$self->resume_background_process;
|
$self->resume_background_process;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$self->print_info_box_show(0);
|
||||||
|
|
||||||
# $self->{canvas}->reload_scene if $self->{canvas};
|
# $self->{canvas}->reload_scene if $self->{canvas};
|
||||||
my $selections = $self->collect_selections;
|
my $selections = $self->collect_selections;
|
||||||
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
||||||
|
|
|
@ -1109,9 +1109,23 @@ void ModelObject::scale(const Pointf3 &versor)
|
||||||
|
|
||||||
void ModelObject::rotate(float angle, const Axis &axis)
|
void ModelObject::rotate(float angle, const Axis &axis)
|
||||||
{
|
{
|
||||||
|
float min_z = FLT_MAX;
|
||||||
for (ModelVolume *v : this->volumes)
|
for (ModelVolume *v : this->volumes)
|
||||||
|
{
|
||||||
v->mesh.rotate(angle, axis);
|
v->mesh.rotate(angle, axis);
|
||||||
this->origin_translation = Pointf3(0,0,0);
|
min_z = std::min(min_z, v->mesh.stl.stats.min.z);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (min_z != 0.0f)
|
||||||
|
{
|
||||||
|
// translate the object so that its minimum z lays on the bed
|
||||||
|
for (ModelVolume *v : this->volumes)
|
||||||
|
{
|
||||||
|
v->mesh.translate(0.0f, 0.0f, -min_z);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
this->origin_translation = Pointf3(0, 0, 0);
|
||||||
this->invalidate_bounding_box();
|
this->invalidate_bounding_box();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
#include "Model.hpp"
|
#include "Model.hpp"
|
||||||
#include "boost/nowide/iostream.hpp"
|
#include "boost/nowide/iostream.hpp"
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
|
||||||
namespace Slic3r {
|
namespace Slic3r {
|
||||||
namespace GUI {
|
namespace GUI {
|
||||||
|
|
||||||
|
@ -146,21 +148,18 @@ void BedShapePanel::set_shape(ConfigOptionPoints* points)
|
||||||
if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) {
|
if (lines[0].parallel_to(lines[2]) && lines[1].parallel_to(lines[3])) {
|
||||||
// okay, it's a rectangle
|
// okay, it's a rectangle
|
||||||
// find origin
|
// find origin
|
||||||
// the || 0 hack prevents "-0" which might confuse the user
|
coordf_t x_min, x_max, y_min, y_max;
|
||||||
int x_min, x_max, y_min, y_max;
|
x_max = x_min = points->values[0].x;
|
||||||
x_max = x_min = points->values[0].x;
|
|
||||||
y_max = y_min = points->values[0].y;
|
y_max = y_min = points->values[0].y;
|
||||||
for (auto pt : points->values){
|
for (auto pt : points->values)
|
||||||
if (x_min > pt.x) x_min = pt.x;
|
{
|
||||||
if (x_max < pt.x) x_max = pt.x;
|
x_min = std::min(x_min, pt.x);
|
||||||
if (y_min > pt.y) y_min = pt.y;
|
x_max = std::max(x_max, pt.x);
|
||||||
if (y_max < pt.y) y_max = pt.y;
|
y_min = std::min(y_min, pt.y);
|
||||||
}
|
y_max = std::max(y_max, pt.y);
|
||||||
if (x_min < 0) x_min = 0;
|
}
|
||||||
if (x_max < 0) x_max = 0;
|
|
||||||
if (y_min < 0) y_min = 0;
|
auto origin = new ConfigOptionPoints{ Pointf(-x_min, -y_min) };
|
||||||
if (y_max < 0) y_max = 0;
|
|
||||||
auto origin = new ConfigOptionPoints{ Pointf(-x_min, -y_min) };
|
|
||||||
|
|
||||||
m_shape_options_book->SetSelection(SHAPE_RECTANGULAR);
|
m_shape_options_book->SetSelection(SHAPE_RECTANGULAR);
|
||||||
auto optgroup = m_optgroups[SHAPE_RECTANGULAR];
|
auto optgroup = m_optgroups[SHAPE_RECTANGULAR];
|
||||||
|
|
|
@ -1952,12 +1952,23 @@ void GLCanvas3D::set_model(Model* model)
|
||||||
|
|
||||||
void GLCanvas3D::set_bed_shape(const Pointfs& shape)
|
void GLCanvas3D::set_bed_shape(const Pointfs& shape)
|
||||||
{
|
{
|
||||||
m_bed.set_shape(shape);
|
bool new_shape = (shape != m_bed.get_shape());
|
||||||
|
if (new_shape)
|
||||||
|
m_bed.set_shape(shape);
|
||||||
|
|
||||||
// Set the origin and size for painting of the coordinate system axes.
|
// Set the origin and size for painting of the coordinate system axes.
|
||||||
m_axes.origin = Pointf3(0.0, 0.0, (coordf_t)GROUND_Z);
|
m_axes.origin = Pointf3(0.0, 0.0, (coordf_t)GROUND_Z);
|
||||||
set_axes_length(0.3f * (float)m_bed.get_bounding_box().max_size());
|
set_axes_length(0.3f * (float)m_bed.get_bounding_box().max_size());
|
||||||
|
|
||||||
|
if (new_shape)
|
||||||
|
{
|
||||||
|
// forces the selection of the proper camera target
|
||||||
|
if (m_volumes.volumes.empty())
|
||||||
|
zoom_to_bed();
|
||||||
|
else
|
||||||
|
zoom_to_volumes();
|
||||||
|
}
|
||||||
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue