diff --git a/resources/models/sl1_bed.stl b/resources/models/sl1_bed.stl index d7ac4ad88..b2cadde4b 100644 Binary files a/resources/models/sl1_bed.stl and b/resources/models/sl1_bed.stl differ diff --git a/src/libslic3r/Geometry.cpp b/src/libslic3r/Geometry.cpp index a9d3be539..8f3423a3d 100644 --- a/src/libslic3r/Geometry.cpp +++ b/src/libslic3r/Geometry.cpp @@ -1333,6 +1333,8 @@ void Transformation::set_rotation(const Vec3d& rotation) void Transformation::set_rotation(Axis axis, double rotation) { rotation = angle_to_0_2PI(rotation); + if (is_approx(std::abs(rotation), 2.0 * (double)PI)) + rotation = 0.0; if (m_rotation(axis) != rotation) { diff --git a/src/slic3r/GUI/3DScene.cpp b/src/slic3r/GUI/3DScene.cpp index 6b1df6ab3..595f6f6a8 100644 --- a/src/slic3r/GUI/3DScene.cpp +++ b/src/slic3r/GUI/3DScene.cpp @@ -2003,7 +2003,7 @@ bool GLBed::on_init_from_file(const std::string& filename, bool useVBOs) else m_volume.indexed_vertex_array.load_mesh_flat_shading(mesh); - float color[4] = { 0.235f, 0.235f, 0.235f, 1.0f }; + float color[4] = { 0.235f, 0.235f, 0.235f, 0.5f }; set_color(color, 4); m_volume.bounding_box = m_volume.indexed_vertex_array.bounding_box(); diff --git a/src/slic3r/GUI/Field.cpp b/src/slic3r/GUI/Field.cpp index 862f1b107..e575a919a 100644 --- a/src/slic3r/GUI/Field.cpp +++ b/src/slic3r/GUI/Field.cpp @@ -145,19 +145,24 @@ void Field::get_value_by_opt_type(wxString& str) double val; // Replace the first occurence of comma in decimal number. str.Replace(",", ".", false); - if(!str.ToCDouble(&val)) - { - show_error(m_parent, _(L("Invalid numeric input."))); - set_value(double_to_string(val), true); - } - if (m_opt.min > val || val > m_opt.max) - { - show_error(m_parent, _(L("Input value is out of range"))); - if (m_opt.min > val) val = m_opt.min; - if (val > m_opt.max) val = m_opt.max; - set_value(double_to_string(val), true); - } - m_value = val; + if (str == ".") + val = 0.0; + else + { + if (!str.ToCDouble(&val)) + { + show_error(m_parent, _(L("Invalid numeric input."))); + set_value(double_to_string(val), true); + } + if (m_opt.min > val || val > m_opt.max) + { + show_error(m_parent, _(L("Input value is out of range"))); + if (m_opt.min > val) val = m_opt.min; + if (val > m_opt.max) val = m_opt.max; + set_value(double_to_string(val), true); + } + } + m_value = val; break; } case coString: case coStrings: diff --git a/src/slic3r/GUI/GUI_ObjectManipulation.cpp b/src/slic3r/GUI/GUI_ObjectManipulation.cpp index dc725bf88..209a32374 100644 --- a/src/slic3r/GUI/GUI_ObjectManipulation.cpp +++ b/src/slic3r/GUI/GUI_ObjectManipulation.cpp @@ -73,14 +73,8 @@ ObjectManipulation::ObjectManipulation(wxWindow* parent) : def.default_value = new ConfigOptionFloat(0.0); def.width = 50; - if (option_name == "Rotation") - { - def.min = -360; - def.max = 360; - } - // Add "uniform scaling" button in front of "Scale" option - else if (option_name == "Scale") { + if (option_name == "Scale") { line.near_label_widget = [this](wxWindow* parent) { auto btn = new PrusaLockButton(parent, wxID_ANY); btn->Bind(wxEVT_BUTTON, [btn, this](wxCommandEvent &event){ @@ -293,13 +287,13 @@ void ObjectManipulation::update_if_dirty() deg_rotation(i) = Geometry::rad2deg(m_new_rotation(i)); } - if (m_cache.rotation(0) != m_new_rotation(0)) + if ((m_cache.rotation(0) != m_new_rotation(0)) || (m_new_rotation(0) == 0.0)) m_og->set_value("rotation_x", double_to_string(deg_rotation(0), 2)); - if (m_cache.rotation(1) != m_new_rotation(1)) + if ((m_cache.rotation(1) != m_new_rotation(1)) || (m_new_rotation(1) == 0.0)) m_og->set_value("rotation_y", double_to_string(deg_rotation(1), 2)); - if (m_cache.rotation(2) != m_new_rotation(2)) + if ((m_cache.rotation(2) != m_new_rotation(2)) || (m_new_rotation(2) == 0.0)) m_og->set_value("rotation_z", double_to_string(deg_rotation(2), 2)); m_cache.rotation = deg_rotation;