From 38d54d779a1b5ca2d7bd992ec5920d6963f94420 Mon Sep 17 00:00:00 2001 From: tamasmeszaros Date: Sat, 18 May 2019 23:21:59 +0200 Subject: [PATCH] Mirror checkboxes added to the UI. Everything seems to work fine. --- src/libslic3r/PrintConfig.cpp | 14 ++++++++------ src/libslic3r/SLA/SLARaster.cpp | 14 ++++++++++++++ src/libslic3r/SLA/SLARaster.hpp | 23 +++++++++++++++++++---- src/libslic3r/SLAPrint.cpp | 2 ++ src/slic3r/GUI/Preset.cpp | 1 + src/slic3r/GUI/Tab.cpp | 4 ++++ 6 files changed, 48 insertions(+), 10 deletions(-) diff --git a/src/libslic3r/PrintConfig.cpp b/src/libslic3r/PrintConfig.cpp index d000c2c2c..89e21934a 100644 --- a/src/libslic3r/PrintConfig.cpp +++ b/src/libslic3r/PrintConfig.cpp @@ -2259,15 +2259,17 @@ void PrintConfigDef::init_sla_params() def->set_default_value(new ConfigOptionInt(1440)); def = this->add("display_mirror_x", coBool); - def->full_label = L("Display mirroring in X axis"); - def->label = L("Mirror X"); - def->tooltip = L("Enable mirroring of output images in the X axis"); + def->full_label = L("Display horizontal mirroring"); + def->label = L("Mirror horizontally"); + def->tooltip = L("Enable horizontal mirroring of output images"); + def->mode = comExpert; def->set_default_value(new ConfigOptionBool(true)); def = this->add("display_mirror_y", coBool); - def->full_label = L("Display mirroring in Y axis"); - def->label = L("Mirror Y"); - def->tooltip = L("Enable mirroring of output images in the Y axis"); + def->full_label = L("Display vertical mirroring"); + def->label = L("Mirror vertically"); + def->tooltip = L("Enable vertical mirroring of output images"); + def->mode = comExpert; def->set_default_value(new ConfigOptionBool(false)); def = this->add("display_orientation", coEnum); diff --git a/src/libslic3r/SLA/SLARaster.cpp b/src/libslic3r/SLA/SLARaster.cpp index fba1f46f3..f1b1c8c42 100644 --- a/src/libslic3r/SLA/SLARaster.cpp +++ b/src/libslic3r/SLA/SLARaster.cpp @@ -58,6 +58,7 @@ private: std::function m_gammafn; std::array m_mirror; + Format m_fmt = Format::PNG; inline void flipy(agg::path_storage& path) const { path.flip_y(0, m_resolution.height_px); @@ -101,6 +102,7 @@ public: case Format::PNG: m_mirror = {false, true}; break; case Format::RAW: m_mirror = {false, false}; break; } + m_fmt = fmt; } template void draw(const P &poly) { @@ -131,6 +133,8 @@ public: } inline TBuffer& buffer() { return m_buf; } + + inline Format format() const { return m_fmt; } inline const Raster::Resolution resolution() { return m_resolution; } @@ -258,6 +262,11 @@ void Raster::save(std::ostream& stream, Format fmt) } } +void Raster::save(std::ostream &stream) +{ + save(stream, m_impl->format()); +} + RawBytes Raster::save(Format fmt) { assert(m_impl); @@ -300,6 +309,11 @@ RawBytes Raster::save(Format fmt) return {std::move(data)}; } +RawBytes Raster::save() +{ + return save(m_impl->format()); +} + } } diff --git a/src/libslic3r/SLA/SLARaster.hpp b/src/libslic3r/SLA/SLARaster.hpp index 03fb06d6c..5051498c5 100644 --- a/src/libslic3r/SLA/SLARaster.hpp +++ b/src/libslic3r/SLA/SLARaster.hpp @@ -100,8 +100,17 @@ public: ~Raster(); /// Reallocated everything for the given resolution and pixel dimension. - void reset(const Resolution&, const PixelDim&, const std::array& mirror, double gamma = 1.0); - void reset(const Resolution& r, const PixelDim& pd, Format o, double gamma = 1.0); + /// The third parameter is either the X, Y mirroring or a supported format + /// for which the correct mirroring will be configured. + void reset(const Resolution&, + const PixelDim&, + const std::array& mirror, + double gamma = 1.0); + + void reset(const Resolution& r, + const PixelDim& pd, + Format o, + double gamma = 1.0); /** * Release the allocated resources. Drawing in this state ends in @@ -119,11 +128,17 @@ public: void draw(const ExPolygon& poly); void draw(const ClipperLib::Polygon& poly); + // Saving the raster: + // It is possible to override the format given in the constructor but + // be aware that the mirroring will not be modified. + /// Save the raster on the specified stream. - void save(std::ostream& stream, Format = Format::PNG); + void save(std::ostream& stream, Format); + void save(std::ostream& stream); /// Save into a continuous byte stream which is returned. - RawBytes save(Format fmt = Format::PNG); + RawBytes save(Format fmt); + RawBytes save(); }; } // sla diff --git a/src/libslic3r/SLAPrint.cpp b/src/libslic3r/SLAPrint.cpp index fba974822..13df2fa79 100644 --- a/src/libslic3r/SLAPrint.cpp +++ b/src/libslic3r/SLAPrint.cpp @@ -1461,6 +1461,8 @@ bool SLAPrint::invalidate_state_by_config_options(const std::vector& Preset::sla_printer_options() "printer_technology", "bed_shape", "max_print_height", "display_width", "display_height", "display_pixels_x", "display_pixels_y", + "display_mirror_x", "display_mirror_y", "display_orientation", "fast_tilt_time", "slow_tilt_time", "area_fill", "relative_correction", diff --git a/src/slic3r/GUI/Tab.cpp b/src/slic3r/GUI/Tab.cpp index b6bdb7a4b..8fa34e37a 100644 --- a/src/slic3r/GUI/Tab.cpp +++ b/src/slic3r/GUI/Tab.cpp @@ -2056,6 +2056,10 @@ void TabPrinter::build_sla() line.append_option(optgroup->get_option("display_pixels_y")); optgroup->append_line(line); optgroup->append_single_option_line("display_orientation"); + + // FIXME: This should be on one line in the UI + optgroup->append_single_option_line("display_mirror_x"); + optgroup->append_single_option_line("display_mirror_y"); optgroup = page->new_optgroup(_(L("Tilt"))); line = { _(L("Tilt time")), "" };