mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-08-15 12:45:56 +08:00
Merge branch 'master_262' of https://github.com/Prusa-Development/PrusaSlicerPrivate into master_262
This commit is contained in:
commit
0f939409b8
@ -1,3 +1,13 @@
|
|||||||
|
#/|/ Copyright (c) Prusa Research 2017 - 2023 Tomáš Mészáros @tamasmeszaros, Vojtěch Bubník @bubnikv, Lukáš Matěna @lukasmatena, Filip Sykala @Jony01, Oleksandra Iushchenko @YuSanka, Lukáš Hejl @hejllukas, David Kocík @kocikdav, Enrico Turri @enricoturri1966, Vojtěch Král @vojtechkral
|
||||||
|
#/|/ Copyright (c) 2023 Ben Greiner
|
||||||
|
#/|/ Copyright (c) 2021 D-mo @dimitry-ishenko
|
||||||
|
#/|/ Copyright (c) 2020 Pascal de Bruijn @pmjdebruijn
|
||||||
|
#/|/ Copyright (c) 2019 Sam Segers
|
||||||
|
#/|/ Copyright (c) 2019 Colin Gilgenbach @hexane360
|
||||||
|
#/|/ Copyright (c) 2018 Dan Kortschak
|
||||||
|
#/|/
|
||||||
|
#/|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
||||||
|
#/|/
|
||||||
cmake_minimum_required(VERSION 3.13)
|
cmake_minimum_required(VERSION 3.13)
|
||||||
project(PrusaSlicer)
|
project(PrusaSlicer)
|
||||||
|
|
||||||
@ -59,7 +69,6 @@ if (APPLE)
|
|||||||
endif ()
|
endif ()
|
||||||
endif ()
|
endif ()
|
||||||
|
|
||||||
# Proposal for C++ unit tests and sandboxes
|
|
||||||
option(SLIC3R_BUILD_SANDBOXES "Build development sandboxes" OFF)
|
option(SLIC3R_BUILD_SANDBOXES "Build development sandboxes" OFF)
|
||||||
option(SLIC3R_BUILD_TESTS "Build unit tests" ON)
|
option(SLIC3R_BUILD_TESTS "Build unit tests" ON)
|
||||||
|
|
||||||
|
Binary file not shown.
@ -1589,7 +1589,7 @@ msgstr "Záchrana při neznámých hodnotách konfigurace"
|
|||||||
#: src/slic3r/GUI/ArrangeSettingsDialogImgui.cpp:100
|
#: src/slic3r/GUI/ArrangeSettingsDialogImgui.cpp:100
|
||||||
#: src/slic3r/GUI/Jobs/SLAImportDialog.hpp:118
|
#: src/slic3r/GUI/Jobs/SLAImportDialog.hpp:118
|
||||||
msgid "Balanced"
|
msgid "Balanced"
|
||||||
msgstr "Vyvážený"
|
msgstr "Vyvážené"
|
||||||
|
|
||||||
#: src/slic3r/GUI/MainFrame.cpp:710
|
#: src/slic3r/GUI/MainFrame.cpp:710
|
||||||
msgid "based on Slic3r"
|
msgid "based on Slic3r"
|
||||||
@ -5293,7 +5293,7 @@ msgstr "Ventilátor bude vypnutý."
|
|||||||
#: src/slic3r/GUI/ArrangeSettingsDialogImgui.cpp:98
|
#: src/slic3r/GUI/ArrangeSettingsDialogImgui.cpp:98
|
||||||
#: src/slic3r/GUI/Jobs/SLAImportDialog.hpp:119
|
#: src/slic3r/GUI/Jobs/SLAImportDialog.hpp:119
|
||||||
msgid "Fast"
|
msgid "Fast"
|
||||||
msgstr "Rychlý"
|
msgstr "Rychlé"
|
||||||
|
|
||||||
#: src/libslic3r/PrintConfig.cpp:3700
|
#: src/libslic3r/PrintConfig.cpp:3700
|
||||||
msgid "Fast tilt"
|
msgid "Fast tilt"
|
||||||
|
Binary file not shown.
@ -9125,7 +9125,7 @@ msgstr "mm (Null zum Deaktivieren)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "&Modus"
|
msgstr "Modus"
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
Binary file not shown.
@ -9072,7 +9072,7 @@ msgstr "mm (cero para deshabilitar)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "&Modo"
|
msgstr "Modo"
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
Binary file not shown.
@ -9143,7 +9143,7 @@ msgstr "mm (zéro pour désactiver)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "&Mode"
|
msgstr "Mode"
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
Binary file not shown.
@ -9056,7 +9056,7 @@ msgstr "mm (imposta a zero per disabilitare)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "&Modalità"
|
msgstr "Modalità"
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
Binary file not shown.
@ -8909,7 +8909,7 @@ msgstr "mm (0で無効化)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "モード (&M)"
|
msgstr "モード "
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
Binary file not shown.
@ -9040,7 +9040,7 @@ msgstr "mm (zero, aby wyłączyć)"
|
|||||||
|
|
||||||
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
#: src/slic3r/GUI/Gizmos/GLGizmoCut.cpp:517 src/slic3r/GUI/GUI_App.cpp:2472
|
||||||
msgid "Mode"
|
msgid "Mode"
|
||||||
msgstr "&Tryb"
|
msgstr "Tryb"
|
||||||
|
|
||||||
#: src/slic3r/GUI/wxExtensions.cpp:714
|
#: src/slic3r/GUI/wxExtensions.cpp:714
|
||||||
msgctxt "Mode"
|
msgctxt "Mode"
|
||||||
|
@ -1,4 +1,5 @@
|
|||||||
min_slic3r_version = 2.6.2-alpha0
|
min_slic3r_version = 2.6.2-alpha0
|
||||||
|
1.11.0-alpha1 Updated ramming parameters. Updated start-gcode for XL Multi-Tool. Updated output filename format.
|
||||||
1.11.0-alpha0 Binary g-code, arc fitting, QOI/PNG thumbnails, 90degree XL tower, XL specific filament variants.
|
1.11.0-alpha0 Binary g-code, arc fitting, QOI/PNG thumbnails, 90degree XL tower, XL specific filament variants.
|
||||||
min_slic3r_version = 2.6.0-beta2
|
min_slic3r_version = 2.6.0-beta2
|
||||||
1.9.8 FW version notification (MK2.5/3 family). Minor update of MK4IS profiles. Updated MK4IS thumbnail.
|
1.9.8 FW version notification (MK2.5/3 family). Minor update of MK4IS profiles. Updated MK4IS thumbnail.
|
||||||
|
File diff suppressed because one or more lines are too long
@ -333,12 +333,9 @@ void ConfigDef::finalize()
|
|||||||
if (def.type == coEnum) {
|
if (def.type == coEnum) {
|
||||||
assert(def.enum_def);
|
assert(def.enum_def);
|
||||||
assert(def.enum_def->is_valid_closed_enum());
|
assert(def.enum_def->is_valid_closed_enum());
|
||||||
assert(def.gui_type != ConfigOptionDef::GUIType::i_enum_open &&
|
assert(! def.is_gui_type_enum_open());
|
||||||
def.gui_type != ConfigOptionDef::GUIType::f_enum_open &&
|
|
||||||
def.gui_type != ConfigOptionDef::GUIType::select_open);
|
|
||||||
def.enum_def->finalize_closed_enum();
|
def.enum_def->finalize_closed_enum();
|
||||||
} else if (def.gui_type == ConfigOptionDef::GUIType::i_enum_open || def.gui_type == ConfigOptionDef::GUIType::f_enum_open ||
|
} else if (def.is_gui_type_enum_open()) {
|
||||||
def.gui_type == ConfigOptionDef::GUIType::select_open) {
|
|
||||||
assert(def.enum_def);
|
assert(def.enum_def);
|
||||||
assert(def.enum_def->is_valid_open_enum());
|
assert(def.enum_def->is_valid_open_enum());
|
||||||
assert(def.gui_type != ConfigOptionDef::GUIType::i_enum_open || def.type == coInt || def.type == coInts);
|
assert(def.gui_type != ConfigOptionDef::GUIType::i_enum_open || def.type == coInt || def.type == coInts);
|
||||||
@ -425,7 +422,7 @@ std::ostream& ConfigDef::print_cli_help(std::ostream& out, bool show_defaults, s
|
|||||||
descr += " (";
|
descr += " (";
|
||||||
if (!def.sidetext.empty()) {
|
if (!def.sidetext.empty()) {
|
||||||
descr += def.sidetext + ", ";
|
descr += def.sidetext + ", ";
|
||||||
} else if (def.enum_def->has_values()) {
|
} else if (def.enum_def && def.enum_def->has_values()) {
|
||||||
descr += boost::algorithm::join(def.enum_def->values(), ", ") + "; ";
|
descr += boost::algorithm::join(def.enum_def->values(), ", ") + "; ";
|
||||||
}
|
}
|
||||||
descr += "default: " + def.default_value->serialize() + ")";
|
descr += "default: " + def.default_value->serialize() + ")";
|
||||||
|
@ -1836,6 +1836,8 @@ public:
|
|||||||
// Close parameter, string value could be one of the list values.
|
// Close parameter, string value could be one of the list values.
|
||||||
select_close,
|
select_close,
|
||||||
};
|
};
|
||||||
|
static bool is_gui_type_enum_open(const GUIType gui_type)
|
||||||
|
{ return gui_type == ConfigOptionDef::GUIType::i_enum_open || gui_type == ConfigOptionDef::GUIType::f_enum_open || gui_type == ConfigOptionDef::GUIType::select_open; }
|
||||||
|
|
||||||
// Identifier of this option. It is stored here so that it is accessible through the by_serialization_key_ordinal map.
|
// Identifier of this option. It is stored here so that it is accessible through the by_serialization_key_ordinal map.
|
||||||
t_config_option_key opt_key;
|
t_config_option_key opt_key;
|
||||||
@ -1923,6 +1925,7 @@ public:
|
|||||||
// Special values - "i_enum_open", "f_enum_open" to provide combo box for int or float selection,
|
// Special values - "i_enum_open", "f_enum_open" to provide combo box for int or float selection,
|
||||||
// "select_open" - to open a selection dialog (currently only a serial port selection).
|
// "select_open" - to open a selection dialog (currently only a serial port selection).
|
||||||
GUIType gui_type { GUIType::undefined };
|
GUIType gui_type { GUIType::undefined };
|
||||||
|
bool is_gui_type_enum_open() const { return is_gui_type_enum_open(this->gui_type); }
|
||||||
// Usually empty. Otherwise "serialized" or "show_value"
|
// Usually empty. Otherwise "serialized" or "show_value"
|
||||||
// The flags may be combined.
|
// The flags may be combined.
|
||||||
// "serialized" - vector valued option is entered in a single edit field. Values are separated by a semicolon.
|
// "serialized" - vector valued option is entered in a single edit field. Values are separated by a semicolon.
|
||||||
|
@ -3877,7 +3877,8 @@ void GCodeProcessor::post_process()
|
|||||||
while (rev_it != m_lines.rend() && rev_it->time > time_threshold_i && curr_cmd != cmd && curr_cmd != "G28" && curr_cmd != "G29") {
|
while (rev_it != m_lines.rend() && rev_it->time > time_threshold_i && curr_cmd != cmd && curr_cmd != "G28" && curr_cmd != "G29") {
|
||||||
rev_it->line = line_replacer(rev_it->line);
|
rev_it->line = line_replacer(rev_it->line);
|
||||||
++rev_it;
|
++rev_it;
|
||||||
curr_cmd = GCodeReader::GCodeLine::extract_cmd(rev_it->line);
|
if (rev_it != m_lines.rend())
|
||||||
|
curr_cmd = GCodeReader::GCodeLine::extract_cmd(rev_it->line);
|
||||||
}
|
}
|
||||||
|
|
||||||
// we met the previous evenience of cmd, or a G28/G29 command. stop inserting lines
|
// we met the previous evenience of cmd, or a G28/G29 command. stop inserting lines
|
||||||
|
@ -293,25 +293,26 @@ struct CutConnector
|
|||||||
float height;
|
float height;
|
||||||
float radius_tolerance;// [0.f : 1.f]
|
float radius_tolerance;// [0.f : 1.f]
|
||||||
float height_tolerance;// [0.f : 1.f]
|
float height_tolerance;// [0.f : 1.f]
|
||||||
|
float z_angle {0.f};
|
||||||
CutConnectorAttributes attribs;
|
CutConnectorAttributes attribs;
|
||||||
|
|
||||||
CutConnector()
|
CutConnector()
|
||||||
: pos(Vec3d::Zero()), rotation_m(Transform3d::Identity()), radius(5.f), height(10.f), radius_tolerance(0.f), height_tolerance(0.1f)
|
: pos(Vec3d::Zero()), rotation_m(Transform3d::Identity()), radius(5.f), height(10.f), radius_tolerance(0.f), height_tolerance(0.1f), z_angle(0.f)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CutConnector(Vec3d p, Transform3d rot, float r, float h, float rt, float ht, CutConnectorAttributes attributes)
|
CutConnector(Vec3d p, Transform3d rot, float r, float h, float rt, float ht, float za, CutConnectorAttributes attributes)
|
||||||
: pos(p), rotation_m(rot), radius(r), height(h), radius_tolerance(rt), height_tolerance(ht), attribs(attributes)
|
: pos(p), rotation_m(rot), radius(r), height(h), radius_tolerance(rt), height_tolerance(ht), z_angle(za), attribs(attributes)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
CutConnector(const CutConnector& rhs) :
|
CutConnector(const CutConnector& rhs) :
|
||||||
CutConnector(rhs.pos, rhs.rotation_m, rhs.radius, rhs.height, rhs.radius_tolerance, rhs.height_tolerance, rhs.attribs) {}
|
CutConnector(rhs.pos, rhs.rotation_m, rhs.radius, rhs.height, rhs.radius_tolerance, rhs.height_tolerance, rhs.z_angle, rhs.attribs) {}
|
||||||
|
|
||||||
bool operator==(const CutConnector& other) const;
|
bool operator==(const CutConnector& other) const;
|
||||||
|
|
||||||
bool operator!=(const CutConnector& other) const { return !(other == (*this)); }
|
bool operator!=(const CutConnector& other) const { return !(other == (*this)); }
|
||||||
|
|
||||||
template<class Archive> inline void serialize(Archive& ar) {
|
template<class Archive> inline void serialize(Archive& ar) {
|
||||||
ar(pos, rotation_m, radius, height, radius_tolerance, height_tolerance, attribs);
|
ar(pos, rotation_m, radius, height, radius_tolerance, height_tolerance, z_angle, attribs);
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2,6 +2,12 @@
|
|||||||
///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill
|
///|/ Copyright (c) SuperSlicer 2023 Remi Durand @supermerill
|
||||||
///|/ Copyright (c) 2016 Sakari Kapanen @Flannelhead
|
///|/ Copyright (c) 2016 Sakari Kapanen @Flannelhead
|
||||||
///|/
|
///|/
|
||||||
|
///|/ ported from lib/Slic3r/Print/SupportMaterial.pm:
|
||||||
|
///|/ Copyright (c) Prusa Research 2016 - 2017 Vojtěch Bubník @bubnikv
|
||||||
|
///|/ Copyright (c) 2016 Joseph Lenox @lordofhyphens
|
||||||
|
///|/ Copyright (c) Slic3r 2013 - 2015 Alessandro Ranellucci @alranel
|
||||||
|
///|/ Copyright (c) 2013 Mark Hindess
|
||||||
|
///|/
|
||||||
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
///|/ PrusaSlicer is released under the terms of the AGPLv3 or higher
|
||||||
///|/
|
///|/
|
||||||
#include "../ClipperUtils.hpp"
|
#include "../ClipperUtils.hpp"
|
||||||
|
@ -231,6 +231,7 @@ GLGizmoCut3D::GLGizmoCut3D(GLCanvas3D& parent, const std::string& icon_filename,
|
|||||||
{"Shape" , _u8L("Shape")},
|
{"Shape" , _u8L("Shape")},
|
||||||
{"Depth" , _u8L("Depth")},
|
{"Depth" , _u8L("Depth")},
|
||||||
{"Size" , _u8L("Size")},
|
{"Size" , _u8L("Size")},
|
||||||
|
{"Rotation" , _u8L("Rotation")},
|
||||||
{"Groove" , _u8L("Groove")},
|
{"Groove" , _u8L("Groove")},
|
||||||
{"Width" , _u8L("Width")},
|
{"Width" , _u8L("Width")},
|
||||||
{"Flap Angle" , _u8L("Flap Angle")},
|
{"Flap Angle" , _u8L("Flap Angle")},
|
||||||
@ -2329,9 +2330,14 @@ void GLGizmoCut3D::render_connectors_input_window(CutConnectors &connectors)
|
|||||||
connectors[idx].radius_tolerance = 0.5f * m_connector_size_tolerance;
|
connectors[idx].radius_tolerance = 0.5f * m_connector_size_tolerance;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (render_angle_input(m_labels_map["Rotation"], m_connector_angle, 0.f, 0.f, 180.f))
|
||||||
|
apply_selected_connectors([this, &connectors](size_t idx) {
|
||||||
|
connectors[idx].z_angle = m_connector_angle;
|
||||||
|
});
|
||||||
|
|
||||||
if (m_connector_type == CutConnectorType::Snap) {
|
if (m_connector_type == CutConnectorType::Snap) {
|
||||||
render_snap_specific_input(_u8L("Bulge"), _u8L("Bulge proportion related to radius"), m_snap_bulge_proportion, 0.15f, 5.f, 100.f * m_snap_space_proportion);
|
render_snap_specific_input(_u8L("Bulge"), _L("Bulge proportion related to radius"), m_snap_bulge_proportion, 0.15f, 5.f, 100.f * m_snap_space_proportion);
|
||||||
render_snap_specific_input(_u8L("Space"), _u8L("Space proportion related to radius"), m_snap_space_proportion, 0.3f, 10.f, 50.f);
|
render_snap_specific_input(_u8L("Space"), _L("Space proportion related to radius"), m_snap_space_proportion, 0.3f, 10.f, 50.f);
|
||||||
}
|
}
|
||||||
|
|
||||||
ImGui::Separator();
|
ImGui::Separator();
|
||||||
@ -2538,7 +2544,7 @@ void GLGizmoCut3D::render_groove_float_input(const std::string& label, float& in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::render_groove_angle_input(const std::string& label, float& in_val, const float& init_val, float min_val, float max_val)
|
bool GLGizmoCut3D::render_angle_input(const std::string& label, float& in_val, const float& init_val, float min_val, float max_val)
|
||||||
{
|
{
|
||||||
bool is_changed{ false };
|
bool is_changed{ false };
|
||||||
|
|
||||||
@ -2551,14 +2557,15 @@ void GLGizmoCut3D::render_groove_angle_input(const std::string& label, float& in
|
|||||||
const float old_val = val;
|
const float old_val = val;
|
||||||
|
|
||||||
const std::string format = "%.0f " + _u8L("°");
|
const std::string format = "%.0f " + _u8L("°");
|
||||||
m_imgui->slider_float(("##groove_" + label).c_str(), &val, min_val, max_val, format.c_str(), 1.f, true, from_u8(label));
|
m_imgui->slider_float(("##angle_" + label).c_str(), &val, min_val, max_val, format.c_str(), 1.f, true, from_u8(label));
|
||||||
|
|
||||||
m_is_slider_editing_done |= m_imgui->get_last_slider_status().deactivated_after_edit;
|
m_is_slider_editing_done |= m_imgui->get_last_slider_status().deactivated_after_edit;
|
||||||
if (!is_approx(old_val, val)) {
|
if (!is_approx(old_val, val)) {
|
||||||
if (m_imgui->get_last_slider_status().can_take_snapshot) {
|
if (m_imgui->get_last_slider_status().can_take_snapshot) {
|
||||||
Plater::TakeSnapshot snapshot(wxGetApp().plater(), format_wxstr("%1%: %2%", _L("Groove change"), label), UndoRedo::SnapshotType::GizmoAction);
|
Plater::TakeSnapshot snapshot(wxGetApp().plater(), format_wxstr("%1%: %2%", _L("Edited"), label), UndoRedo::SnapshotType::GizmoAction);
|
||||||
m_imgui->get_last_slider_status().invalidate_snapshot();
|
m_imgui->get_last_slider_status().invalidate_snapshot();
|
||||||
m_groove_editing = true;
|
if (m_mode == size_t(CutMode::cutTongueAndGroove))
|
||||||
|
m_groove_editing = true;
|
||||||
}
|
}
|
||||||
in_val = deg2rad(val);
|
in_val = deg2rad(val);
|
||||||
is_changed = true;
|
is_changed = true;
|
||||||
@ -2568,14 +2575,19 @@ void GLGizmoCut3D::render_groove_angle_input(const std::string& label, float& in
|
|||||||
|
|
||||||
m_imgui->disabled_begin(is_approx(in_val, init_val));
|
m_imgui->disabled_begin(is_approx(in_val, init_val));
|
||||||
const std::string act_name = _u8L("Reset");
|
const std::string act_name = _u8L("Reset");
|
||||||
if (render_reset_button(("##groove_" + label + act_name).c_str(), act_name)) {
|
if (render_reset_button(("##angle_" + label + act_name).c_str(), act_name)) {
|
||||||
Plater::TakeSnapshot snapshot(wxGetApp().plater(), format_wxstr("%1%: %2%", act_name, label), UndoRedo::SnapshotType::GizmoAction);
|
Plater::TakeSnapshot snapshot(wxGetApp().plater(), format_wxstr("%1%: %2%", act_name, label), UndoRedo::SnapshotType::GizmoAction);
|
||||||
in_val = init_val;
|
in_val = init_val;
|
||||||
is_changed = true;
|
is_changed = true;
|
||||||
}
|
}
|
||||||
m_imgui->disabled_end();
|
m_imgui->disabled_end();
|
||||||
|
|
||||||
if (is_changed) {
|
return is_changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
void GLGizmoCut3D::render_groove_angle_input(const std::string& label, float& in_val, const float& init_val, float min_val, float max_val)
|
||||||
|
{
|
||||||
|
if (render_angle_input(label, in_val, init_val, min_val, max_val)) {
|
||||||
update_plane_model();
|
update_plane_model();
|
||||||
reset_cut_by_contours();
|
reset_cut_by_contours();
|
||||||
}
|
}
|
||||||
@ -2586,7 +2598,7 @@ void GLGizmoCut3D::render_groove_angle_input(const std::string& label, float& in
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoCut3D::render_snap_specific_input(const std::string& label, const std::string& tooltip, float& in_val, const float& init_val, const float min_val, const float max_val)
|
void GLGizmoCut3D::render_snap_specific_input(const std::string& label, const wxString& tooltip, float& in_val, const float& init_val, const float min_val, const float max_val)
|
||||||
{
|
{
|
||||||
ImGuiWrapper::text(label);
|
ImGuiWrapper::text(label);
|
||||||
|
|
||||||
@ -2793,6 +2805,8 @@ void GLGizmoCut3D::validate_connector_settings()
|
|||||||
m_connector_size = 2.5f;
|
m_connector_size = 2.5f;
|
||||||
if (m_connector_size_tolerance < 0.f)
|
if (m_connector_size_tolerance < 0.f)
|
||||||
m_connector_size_tolerance = 0.f;
|
m_connector_size_tolerance = 0.f;
|
||||||
|
if (m_connector_angle < 0.f || m_connector_angle > float(PI) )
|
||||||
|
m_connector_angle = 0.f;
|
||||||
|
|
||||||
if (m_connector_type == CutConnectorType::Undef)
|
if (m_connector_type == CutConnectorType::Undef)
|
||||||
m_connector_type = CutConnectorType::Plug;
|
m_connector_type = CutConnectorType::Plug;
|
||||||
@ -2812,6 +2826,7 @@ void GLGizmoCut3D::init_input_window_data(CutConnectors &connectors)
|
|||||||
float depth_ratio_tolerance { UndefFloat };
|
float depth_ratio_tolerance { UndefFloat };
|
||||||
float radius { UndefFloat };
|
float radius { UndefFloat };
|
||||||
float radius_tolerance { UndefFloat };
|
float radius_tolerance { UndefFloat };
|
||||||
|
float angle { UndefFloat };
|
||||||
CutConnectorType type { CutConnectorType::Undef };
|
CutConnectorType type { CutConnectorType::Undef };
|
||||||
CutConnectorStyle style { CutConnectorStyle::Undef };
|
CutConnectorStyle style { CutConnectorStyle::Undef };
|
||||||
CutConnectorShape shape { CutConnectorShape::Undef };
|
CutConnectorShape shape { CutConnectorShape::Undef };
|
||||||
@ -2825,6 +2840,7 @@ void GLGizmoCut3D::init_input_window_data(CutConnectors &connectors)
|
|||||||
depth_ratio_tolerance = connector.height_tolerance;
|
depth_ratio_tolerance = connector.height_tolerance;
|
||||||
radius = connector.radius;
|
radius = connector.radius;
|
||||||
radius_tolerance = connector.radius_tolerance;
|
radius_tolerance = connector.radius_tolerance;
|
||||||
|
angle = connector.z_angle;
|
||||||
type = connector.attribs.type;
|
type = connector.attribs.type;
|
||||||
style = connector.attribs.style;
|
style = connector.attribs.style;
|
||||||
shape = connector.attribs.shape;
|
shape = connector.attribs.shape;
|
||||||
@ -2842,6 +2858,8 @@ void GLGizmoCut3D::init_input_window_data(CutConnectors &connectors)
|
|||||||
radius = UndefFloat;
|
radius = UndefFloat;
|
||||||
if (!is_approx(radius_tolerance, connector.radius_tolerance))
|
if (!is_approx(radius_tolerance, connector.radius_tolerance))
|
||||||
radius_tolerance = UndefFloat;
|
radius_tolerance = UndefFloat;
|
||||||
|
if (!is_approx(angle, connector.z_angle))
|
||||||
|
angle = UndefFloat;
|
||||||
|
|
||||||
if (type != connector.attribs.type)
|
if (type != connector.attribs.type)
|
||||||
type = CutConnectorType::Undef;
|
type = CutConnectorType::Undef;
|
||||||
@ -2857,6 +2875,7 @@ void GLGizmoCut3D::init_input_window_data(CutConnectors &connectors)
|
|||||||
m_connector_size = 2.f * radius;
|
m_connector_size = 2.f * radius;
|
||||||
m_connector_size_tolerance = 2.f * radius_tolerance;
|
m_connector_size_tolerance = 2.f * radius_tolerance;
|
||||||
m_connector_type = type;
|
m_connector_type = type;
|
||||||
|
m_connector_angle = angle;
|
||||||
m_connector_style = int(style);
|
m_connector_style = int(style);
|
||||||
m_connector_shape_id = int(shape);
|
m_connector_shape_id = int(shape);
|
||||||
}
|
}
|
||||||
@ -3109,6 +3128,7 @@ void GLGizmoCut3D::render_connectors()
|
|||||||
pos += 0.05 * m_clp_normal;
|
pos += 0.05 * m_clp_normal;
|
||||||
|
|
||||||
const Transform3d view_model_matrix = camera.get_view_matrix() * translation_transform(pos) * m_rotation_m *
|
const Transform3d view_model_matrix = camera.get_view_matrix() * translation_transform(pos) * m_rotation_m *
|
||||||
|
rotation_transform(-connector.z_angle * Vec3d::UnitZ()) *
|
||||||
scale_transform(Vec3f(connector.radius, connector.radius, height).cast<double>());
|
scale_transform(Vec3f(connector.radius, connector.radius, height).cast<double>());
|
||||||
|
|
||||||
render_model(m_shapes[connector.attribs].model, render_color, view_model_matrix);
|
render_model(m_shapes[connector.attribs].model, render_color, view_model_matrix);
|
||||||
@ -3511,6 +3531,7 @@ bool GLGizmoCut3D::add_connector(CutConnectors& connectors, const Vec2d& mouse_p
|
|||||||
connectors.emplace_back(pos, m_rotation_m,
|
connectors.emplace_back(pos, m_rotation_m,
|
||||||
m_connector_size * 0.5f, m_connector_depth_ratio,
|
m_connector_size * 0.5f, m_connector_depth_ratio,
|
||||||
m_connector_size_tolerance * 0.5f, m_connector_depth_ratio_tolerance,
|
m_connector_size_tolerance * 0.5f, m_connector_depth_ratio_tolerance,
|
||||||
|
m_connector_angle,
|
||||||
CutConnectorAttributes( CutConnectorType(m_connector_type),
|
CutConnectorAttributes( CutConnectorType(m_connector_type),
|
||||||
CutConnectorStyle(m_connector_style),
|
CutConnectorStyle(m_connector_style),
|
||||||
CutConnectorShape(m_connector_shape_id)));
|
CutConnectorShape(m_connector_shape_id)));
|
||||||
@ -3735,6 +3756,7 @@ void GLGizmoCut3D::apply_cut_connectors(ModelObject* mo, const std::string& conn
|
|||||||
|
|
||||||
// Transform the new modifier to be aligned inside the instance
|
// Transform the new modifier to be aligned inside the instance
|
||||||
new_volume->set_transformation(translation_transform(connector.pos) * connector.rotation_m *
|
new_volume->set_transformation(translation_transform(connector.pos) * connector.rotation_m *
|
||||||
|
rotation_transform(-connector.z_angle * Vec3d::UnitZ()) *
|
||||||
scale_transform(Vec3f(connector.radius, connector.radius, connector.height).cast<double>()));
|
scale_transform(Vec3f(connector.radius, connector.radius, connector.height).cast<double>()));
|
||||||
|
|
||||||
new_volume->cut_info = { connector.attribs.type, connector.radius_tolerance, connector.height_tolerance };
|
new_volume->cut_info = { connector.attribs.type, connector.radius_tolerance, connector.height_tolerance };
|
||||||
|
@ -138,6 +138,7 @@ class GLGizmoCut3D : public GLGizmoBase
|
|||||||
|
|
||||||
float m_connector_depth_ratio{ 3.f };
|
float m_connector_depth_ratio{ 3.f };
|
||||||
float m_connector_size{ 2.5f };
|
float m_connector_size{ 2.5f };
|
||||||
|
float m_connector_angle{ 0.f };
|
||||||
|
|
||||||
float m_connector_depth_ratio_tolerance{ 0.1f };
|
float m_connector_depth_ratio_tolerance{ 0.1f };
|
||||||
float m_connector_size_tolerance{ 0.f };
|
float m_connector_size_tolerance{ 0.f };
|
||||||
@ -306,7 +307,8 @@ protected:
|
|||||||
void render_color_marker(float size, const ImU32& color);
|
void render_color_marker(float size, const ImU32& color);
|
||||||
void render_groove_float_input(const std::string &label, float &in_val, const float &init_val, float &in_tolerance);
|
void render_groove_float_input(const std::string &label, float &in_val, const float &init_val, float &in_tolerance);
|
||||||
void render_groove_angle_input(const std::string &label, float &in_val, const float &init_val, float min_val, float max_val);
|
void render_groove_angle_input(const std::string &label, float &in_val, const float &init_val, float min_val, float max_val);
|
||||||
void render_snap_specific_input(const std::string& label, const std::string& tooltip, float& in_val, const float& init_val, const float min_val, const float max_val);
|
bool render_angle_input(const std::string& label, float& in_val, const float& init_val, float min_val, float max_val);
|
||||||
|
void render_snap_specific_input(const std::string& label, const wxString& tooltip, float& in_val, const float& init_val, const float min_val, const float max_val);
|
||||||
void render_cut_plane_input_window(CutConnectors &connectors);
|
void render_cut_plane_input_window(CutConnectors &connectors);
|
||||||
void init_input_window_data(CutConnectors &connectors);
|
void init_input_window_data(CutConnectors &connectors);
|
||||||
void render_input_window_warning() const;
|
void render_input_window_warning() const;
|
||||||
|
@ -141,7 +141,8 @@ void GLGizmoSlaSupports::on_render()
|
|||||||
|
|
||||||
m_selection_rectangle.render(m_parent);
|
m_selection_rectangle.render(m_parent);
|
||||||
m_c->object_clipper()->render_cut();
|
m_c->object_clipper()->render_cut();
|
||||||
m_c->supports_clipper()->render_cut();
|
if (are_sla_supports_shown())
|
||||||
|
m_c->supports_clipper()->render_cut();
|
||||||
|
|
||||||
glsafe(::glDisable(GL_BLEND));
|
glsafe(::glDisable(GL_BLEND));
|
||||||
}
|
}
|
||||||
|
@ -4239,7 +4239,7 @@ void Tab::rename_preset()
|
|||||||
if (dlg.ShowModal() != wxID_OK)
|
if (dlg.ShowModal() != wxID_OK)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
const std::string new_name = into_u8(dlg.get_name());
|
const std::string new_name = dlg.get_name();
|
||||||
if (new_name.empty() || new_name == m_presets->get_selected_preset().name)
|
if (new_name.empty() || new_name == m_presets->get_selected_preset().name)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user