mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-11 08:47:52 -06:00
Added editing of custom G-code
+ Code cleaning
This commit is contained in:
parent
74e4a743af
commit
8ec1465ea5
3 changed files with 60 additions and 182 deletions
|
@ -658,11 +658,8 @@ void Preview::create_double_slider()
|
||||||
|
|
||||||
|
|
||||||
Bind(wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) {
|
Bind(wxCUSTOMEVT_TICKSCHANGED, [this](wxEvent&) {
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// wxGetApp().preset_bundle->project_config.option<ConfigOptionFloats>("colorprint_heights")->values = m_slider->GetTicksValues();
|
|
||||||
|
|
||||||
Model& model = wxGetApp().plater()->model();
|
Model& model = wxGetApp().plater()->model();
|
||||||
model.custom_gcode_per_height = m_slider->GetTicksValues_();
|
model.custom_gcode_per_height = m_slider->GetTicksValues();
|
||||||
m_schedule_background_process();
|
m_schedule_background_process();
|
||||||
|
|
||||||
update_view_type(false);
|
update_view_type(false);
|
||||||
|
@ -761,9 +758,7 @@ void Preview::update_double_slider(const std::vector<double>& layers_z, bool kee
|
||||||
}
|
}
|
||||||
m_slider->SetSelectionSpan(idx_low, idx_high);
|
m_slider->SetSelectionSpan(idx_low, idx_high);
|
||||||
|
|
||||||
// #ys_FIXME_COLOR
|
m_slider->SetTicksValues(ticks_from_model);
|
||||||
// m_slider->SetTicksValues(ticks_from_config);
|
|
||||||
m_slider->SetTicksValues_(ticks_from_model);
|
|
||||||
|
|
||||||
bool color_print_enable = (wxGetApp().plater()->printer_technology() == ptFFF);
|
bool color_print_enable = (wxGetApp().plater()->printer_technology() == ptFFF);
|
||||||
// #ys_FIXME_COLOR
|
// #ys_FIXME_COLOR
|
||||||
|
|
|
@ -2524,29 +2524,8 @@ double DoubleSlider::get_double_value(const SelectedSlider& selection)
|
||||||
return m_values[selection == ssLower ? m_lower_value : m_higher_value];
|
return m_values[selection == ssLower ? m_lower_value : m_higher_value];
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<double> DoubleSlider::GetTicksValues() const
|
|
||||||
{
|
|
||||||
std::vector<double> values;
|
|
||||||
|
|
||||||
const int val_size = m_values.size();
|
|
||||||
if (!m_values.empty())
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// for (int tick : m_ticks) {
|
|
||||||
// if (tick > val_size)
|
|
||||||
// break;
|
|
||||||
// values.push_back(m_values[tick]);
|
|
||||||
// }
|
|
||||||
for (const TICK_CODE& tick : m_ticks_) {
|
|
||||||
if (tick.tick > val_size)
|
|
||||||
break;
|
|
||||||
values.push_back(m_values[tick.tick]);
|
|
||||||
}
|
|
||||||
|
|
||||||
return values;
|
|
||||||
}
|
|
||||||
|
|
||||||
using t_custom_code = Slic3r::Model::CustomGCode;
|
using t_custom_code = Slic3r::Model::CustomGCode;
|
||||||
std::vector<t_custom_code> DoubleSlider::GetTicksValues_() const
|
std::vector<t_custom_code> DoubleSlider::GetTicksValues() const
|
||||||
{
|
{
|
||||||
std::vector<t_custom_code> values;
|
std::vector<t_custom_code> values;
|
||||||
|
|
||||||
|
@ -2561,7 +2540,7 @@ std::vector<t_custom_code> DoubleSlider::GetTicksValues_() const
|
||||||
return values;
|
return values;
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleSlider::SetTicksValues_(const std::vector<t_custom_code>& heights)
|
void DoubleSlider::SetTicksValues(const std::vector<t_custom_code>& heights)
|
||||||
{
|
{
|
||||||
if (m_values.empty())
|
if (m_values.empty())
|
||||||
return;
|
return;
|
||||||
|
@ -2583,45 +2562,6 @@ void DoubleSlider::SetTicksValues_(const std::vector<t_custom_code>& heights)
|
||||||
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleSlider::SetTicksValues(const std::vector<double>& heights)
|
|
||||||
{
|
|
||||||
if (m_values.empty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// const bool was_empty = m_ticks.empty();
|
|
||||||
//
|
|
||||||
// m_ticks.clear();
|
|
||||||
// for (auto h : heights) {
|
|
||||||
// auto it = std::lower_bound(m_values.begin(), m_values.end(), h - epsilon());
|
|
||||||
//
|
|
||||||
// if (it == m_values.end())
|
|
||||||
// continue;
|
|
||||||
//
|
|
||||||
// m_ticks.insert(it-m_values.begin());
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// if (!was_empty && m_ticks.empty())
|
|
||||||
// // Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one
|
|
||||||
// wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
|
||||||
|
|
||||||
const bool was_empty = m_ticks_.empty();
|
|
||||||
|
|
||||||
m_ticks_.clear();
|
|
||||||
for (auto h : heights) {
|
|
||||||
auto it = std::lower_bound(m_values.begin(), m_values.end(), h - epsilon());
|
|
||||||
|
|
||||||
if (it == m_values.end())
|
|
||||||
continue;
|
|
||||||
|
|
||||||
m_ticks_.insert(it-m_values.begin());
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!was_empty && m_ticks_.empty())
|
|
||||||
// Switch to the "Feature type"/"Tool" from the very beginning of a new object slicing after deleting of the old one
|
|
||||||
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
|
||||||
}
|
|
||||||
|
|
||||||
void DoubleSlider::get_lower_and_higher_position(int& lower_pos, int& higher_pos)
|
void DoubleSlider::get_lower_and_higher_position(int& lower_pos, int& higher_pos)
|
||||||
{
|
{
|
||||||
const double step = get_scroll_step();
|
const double step = get_scroll_step();
|
||||||
|
@ -2695,9 +2635,6 @@ void DoubleSlider::draw_action_icon(wxDC& dc, const wxPoint pt_beg, const wxPoin
|
||||||
return;
|
return;
|
||||||
|
|
||||||
wxBitmap* icon = m_is_action_icon_focesed ? &m_bmp_add_tick_off.bmp() : &m_bmp_add_tick_on.bmp();
|
wxBitmap* icon = m_is_action_icon_focesed ? &m_bmp_add_tick_off.bmp() : &m_bmp_add_tick_on.bmp();
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// if (m_ticks.find(tick) != m_ticks.end())
|
|
||||||
// icon = m_is_action_icon_focesed ? &m_bmp_del_tick_off.bmp() : &m_bmp_del_tick_on.bmp();
|
|
||||||
if (m_ticks_.find(tick) != m_ticks_.end())
|
if (m_ticks_.find(tick) != m_ticks_.end())
|
||||||
icon = m_is_action_icon_focesed ? &m_bmp_del_tick_off.bmp() : &m_bmp_del_tick_on.bmp();
|
icon = m_is_action_icon_focesed ? &m_bmp_del_tick_off.bmp() : &m_bmp_del_tick_on.bmp();
|
||||||
|
|
||||||
|
@ -2841,12 +2778,8 @@ void DoubleSlider::draw_ticks(wxDC& dc)
|
||||||
int height, width;
|
int height, width;
|
||||||
get_size(&width, &height);
|
get_size(&width, &height);
|
||||||
const wxCoord mid = is_horizontal() ? 0.5*height : 0.5*width;
|
const wxCoord mid = is_horizontal() ? 0.5*height : 0.5*width;
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// for (auto tick : m_ticks)
|
|
||||||
for (auto tick : m_ticks_)
|
for (auto tick : m_ticks_)
|
||||||
{
|
{
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// const wxCoord pos = get_position_from_value(tick);
|
|
||||||
const wxCoord pos = get_position_from_value(tick.tick);
|
const wxCoord pos = get_position_from_value(tick.tick);
|
||||||
|
|
||||||
is_horizontal() ? dc.DrawLine(pos, mid-14, pos, mid-9) :
|
is_horizontal() ? dc.DrawLine(pos, mid-14, pos, mid-9) :
|
||||||
|
@ -2889,43 +2822,6 @@ void DoubleSlider::draw_colored_band(wxDC& dc)
|
||||||
main_band.SetBottom(height - SLIDER_MARGIN + 1);
|
main_band.SetBottom(height - SLIDER_MARGIN + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// if (m_ticks.empty()) {
|
|
||||||
/*if (m_ticks_.empty()) {
|
|
||||||
dc.SetPen(GetParent()->GetBackgroundColour());
|
|
||||||
dc.SetBrush(GetParent()->GetBackgroundColour());
|
|
||||||
dc.DrawRectangle(main_band);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
const std::vector<std::string>& colors = Slic3r::GCodePreviewData::ColorPrintColors();
|
|
||||||
const size_t colors_cnt = colors.size();
|
|
||||||
|
|
||||||
wxColour clr(colors[0]);
|
|
||||||
dc.SetPen(clr);
|
|
||||||
dc.SetBrush(clr);
|
|
||||||
dc.DrawRectangle(main_band);
|
|
||||||
|
|
||||||
size_t i = 1;
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// for (auto tick : m_ticks)
|
|
||||||
for (auto tick : m_ticks_)
|
|
||||||
{
|
|
||||||
if (i == colors_cnt)
|
|
||||||
i = 0;
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
//const wxCoord pos = get_position_from_value(tick);
|
|
||||||
const wxCoord pos = get_position_from_value(tick.tick);
|
|
||||||
is_horizontal() ? main_band.SetLeft(SLIDER_MARGIN + pos) :
|
|
||||||
main_band.SetBottom(pos-1);
|
|
||||||
|
|
||||||
clr = wxColour(colors[i]);
|
|
||||||
dc.SetPen(clr);
|
|
||||||
dc.SetBrush(clr);
|
|
||||||
dc.DrawRectangle(main_band);
|
|
||||||
i++;
|
|
||||||
}*/
|
|
||||||
|
|
||||||
auto draw_band = [](wxDC& dc, const wxColour& clr, const wxRect& band_rc) {
|
auto draw_band = [](wxDC& dc, const wxColour& clr, const wxRect& band_rc) {
|
||||||
dc.SetPen(clr);
|
dc.SetPen(clr);
|
||||||
dc.SetBrush(clr);
|
dc.SetBrush(clr);
|
||||||
|
@ -2979,8 +2875,6 @@ void DoubleSlider::draw_one_layer_icon(wxDC& dc)
|
||||||
|
|
||||||
void DoubleSlider::draw_revert_icon(wxDC& dc)
|
void DoubleSlider::draw_revert_icon(wxDC& dc)
|
||||||
{
|
{
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// if (m_ticks.empty() || !m_is_enabled_tick_manipulation)
|
|
||||||
if (m_ticks_.empty() || !m_is_enabled_tick_manipulation)
|
if (m_ticks_.empty() || !m_is_enabled_tick_manipulation)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -3051,23 +2945,15 @@ bool DoubleSlider::is_point_in_rect(const wxPoint& pt, const wxRect& rect)
|
||||||
|
|
||||||
int DoubleSlider::is_point_near_tick(const wxPoint& pt)
|
int DoubleSlider::is_point_near_tick(const wxPoint& pt)
|
||||||
{
|
{
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// for (auto tick : m_ticks) {
|
|
||||||
for (auto tick : m_ticks_) {
|
for (auto tick : m_ticks_) {
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// const wxCoord pos = get_position_from_value(tick);
|
|
||||||
const wxCoord pos = get_position_from_value(tick.tick);
|
const wxCoord pos = get_position_from_value(tick.tick);
|
||||||
|
|
||||||
if (is_horizontal()) {
|
if (is_horizontal()) {
|
||||||
if (pos - 4 <= pt.x && pt.x <= pos + 4)
|
if (pos - 4 <= pt.x && pt.x <= pos + 4)
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// return tick;
|
|
||||||
return tick.tick;
|
return tick.tick;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (pos - 4 <= pt.y && pt.y <= pos + 4)
|
if (pos - 4 <= pt.y && pt.y <= pos + 4)
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// return tick;
|
|
||||||
return tick.tick;
|
return tick.tick;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3120,8 +3006,6 @@ void DoubleSlider::OnLeftDown(wxMouseEvent& event)
|
||||||
m_selection == ssLower ? correct_lower_value() : correct_higher_value();
|
m_selection == ssLower ? correct_lower_value() : correct_higher_value();
|
||||||
if (!m_selection) m_selection = ssHigher;
|
if (!m_selection) m_selection = ssHigher;
|
||||||
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// m_ticks.clear();
|
|
||||||
m_ticks_.clear();
|
m_ticks_.clear();
|
||||||
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
||||||
}
|
}
|
||||||
|
@ -3202,12 +3086,14 @@ wxString DoubleSlider::get_tooltip(IconFocus icon_focus)
|
||||||
// tick_code_it->gcode == Slic3r::ColorChangeCode ? _(L("Delete color change")) :
|
// tick_code_it->gcode == Slic3r::ColorChangeCode ? _(L("Delete color change")) :
|
||||||
tick_code_it->gcode == Slic3r::ColorChangeCode ? ( m_state == msSingleExtruder ? //_(L("Delete color change")) :
|
tick_code_it->gcode == Slic3r::ColorChangeCode ? ( m_state == msSingleExtruder ? //_(L("Delete color change")) :
|
||||||
_(L("For Delete color change use left mouse button click\n"
|
_(L("For Delete color change use left mouse button click\n"
|
||||||
"For Delete color change or Edit color use right mouse button click")) :
|
"For Edit color use right mouse button click")) :
|
||||||
from_u8((boost::format(_utf8(L("Delete color change for Extruder %1%"))) % tick_code_it->extruder).str()) ):
|
from_u8((boost::format(_utf8(L("Delete color change for Extruder %1%"))) % tick_code_it->extruder).str()) ):
|
||||||
tick_code_it->gcode == Slic3r::PausePrintCode ? _(L("Delete pause")) :
|
tick_code_it->gcode == Slic3r::PausePrintCode ? _(L("Delete pause")) :
|
||||||
tick_code_it->gcode == Slic3r::ExtruderChangeCode ? //( m_state == msSingleExtruder ? _(L("Delete color change")) :
|
tick_code_it->gcode == Slic3r::ExtruderChangeCode ? //( m_state == msSingleExtruder ? _(L("Delete color change")) :
|
||||||
from_u8((boost::format(_utf8(L("Delete extruder change to \"%1%\""))) % tick_code_it->extruder).str()) /*) */:
|
from_u8((boost::format(_utf8(L("Delete extruder change to \"%1%\""))) % tick_code_it->extruder).str()) /*) */:
|
||||||
from_u8((boost::format(_utf8(L("Delete \"%1%\" code"))) % tick_code_it->gcode).str());
|
// from_u8((boost::format(_utf8(L("Delete \"%1%\" code"))) % tick_code_it->gcode).str());
|
||||||
|
from_u8((boost::format(_utf8(L("For Delete \"%1%\" code use left mouse button click\n"
|
||||||
|
"For Edit \"%1%\" code use right mouse button click"))) % tick_code_it->gcode ).str());
|
||||||
}
|
}
|
||||||
|
|
||||||
return tooltip;
|
return tooltip;
|
||||||
|
@ -3225,8 +3111,6 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
|
||||||
|
|
||||||
if (!m_is_left_down && !m_is_one_layer) {
|
if (!m_is_left_down && !m_is_one_layer) {
|
||||||
m_is_action_icon_focesed = is_point_in_rect(pos, m_rect_tick_action);
|
m_is_action_icon_focesed = is_point_in_rect(pos, m_rect_tick_action);
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// is_revert_icon_focused = !m_ticks.empty() && is_point_in_rect(pos, m_rect_revert_icon);
|
|
||||||
if (!m_ticks_.empty() && is_point_in_rect(pos, m_rect_revert_icon))
|
if (!m_ticks_.empty() && is_point_in_rect(pos, m_rect_revert_icon))
|
||||||
icon_focus = ifRevert;
|
icon_focus = ifRevert;
|
||||||
else if (is_point_in_rect(pos, m_rect_cog_icon))
|
else if (is_point_in_rect(pos, m_rect_cog_icon))
|
||||||
|
@ -3251,10 +3135,6 @@ void DoubleSlider::OnMotion(wxMouseEvent& event)
|
||||||
event.Skip();
|
event.Skip();
|
||||||
|
|
||||||
// Set tooltips with information for each icon
|
// Set tooltips with information for each icon
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// const wxString tooltip = m_is_one_layer_icon_focesed ? _(L("One layer mode")) :
|
|
||||||
// m_is_action_icon_focesed ? _(L("Add/Del color change")) :
|
|
||||||
// is_revert_icon_focused ? _(L("Discard all color changes")) : "";
|
|
||||||
this->SetToolTip(get_tooltip(icon_focus));
|
this->SetToolTip(get_tooltip(icon_focus));
|
||||||
|
|
||||||
if (action)
|
if (action)
|
||||||
|
@ -3371,22 +3251,6 @@ void DoubleSlider::action_tick(const TicksAction action)
|
||||||
|
|
||||||
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
||||||
|
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// if (action == taOnIcon) {
|
|
||||||
// if (!m_ticks.insert(tick).second)
|
|
||||||
// m_ticks.erase(tick);
|
|
||||||
// }
|
|
||||||
// else {
|
|
||||||
// const auto it = m_ticks.find(tick);
|
|
||||||
// if (it == m_ticks.end() && action == taAdd)
|
|
||||||
// m_ticks.insert(tick);
|
|
||||||
// else if (it != m_ticks.end() && action == taDel)
|
|
||||||
// m_ticks.erase(tick);
|
|
||||||
// }
|
|
||||||
// wxPostEvent(this->GetParent(), wxCommandEvent(wxCUSTOMEVT_TICKSCHANGED));
|
|
||||||
// Refresh();
|
|
||||||
// Update();
|
|
||||||
|
|
||||||
const auto it = m_ticks_.find(tick);
|
const auto it = m_ticks_.find(tick);
|
||||||
|
|
||||||
if (it != m_ticks_.end()) // erase this tick
|
if (it != m_ticks_.end()) // erase this tick
|
||||||
|
@ -3496,9 +3360,7 @@ void DoubleSlider::OnRightDown(wxMouseEvent& event)
|
||||||
if (is_point_in_rect(pos, m_rect_tick_action) && m_is_enabled_tick_manipulation)
|
if (is_point_in_rect(pos, m_rect_tick_action) && m_is_enabled_tick_manipulation)
|
||||||
{
|
{
|
||||||
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
||||||
// if on this Y doesn't exist tick
|
// if on this Z doesn't exist tick
|
||||||
// #ys_FIXME_COLOR
|
|
||||||
// if (m_ticks.find(tick) == m_ticks.end())
|
|
||||||
auto it = m_ticks_.find(tick);
|
auto it = m_ticks_.find(tick);
|
||||||
if (it == m_ticks_.end())
|
if (it == m_ticks_.end())
|
||||||
{
|
{
|
||||||
|
@ -3506,10 +3368,10 @@ void DoubleSlider::OnRightDown(wxMouseEvent& event)
|
||||||
m_show_context_menu = true;
|
m_show_context_menu = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (it->gcode == Slic3r::ColorChangeCode)
|
if (it->gcode != Slic3r::ExtruderChangeCode && it->gcode != Slic3r::PausePrintCode)
|
||||||
{
|
{
|
||||||
// show "Edit color" or "Delete color change" menu on OnRightUp()
|
// show "Edit" and "Delete" menu on OnRightUp()
|
||||||
m_show_edit_color_menu = true;
|
m_show_edit_menu = true;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -3601,18 +3463,21 @@ void DoubleSlider::OnRightUp(wxMouseEvent& event)
|
||||||
|
|
||||||
m_show_context_menu = false;
|
m_show_context_menu = false;
|
||||||
}
|
}
|
||||||
else if (m_show_edit_color_menu) {
|
else if (m_show_edit_menu) {
|
||||||
wxMenu menu;
|
wxMenu menu;
|
||||||
|
|
||||||
append_menu_item(&menu, wxID_ANY, _(L("Edit color")), "",
|
std::set<TICK_CODE>::iterator it = m_ticks_.find(m_selection == ssLower ? m_lower_value : m_higher_value);
|
||||||
[this](wxCommandEvent&) { edit_color(); }, "change_extruder", &menu);
|
const bool is_color_change = it->gcode == Slic3r::ColorChangeCode;
|
||||||
|
|
||||||
append_menu_item(&menu, wxID_ANY, _(L("Delete color change")), "",
|
append_menu_item(&menu, wxID_ANY, is_color_change ? _(L("Edit color")) : _(L("Edit custom G-code")), "",
|
||||||
|
[this](wxCommandEvent&) { edit_tick(); }, "change_extruder", &menu);
|
||||||
|
|
||||||
|
append_menu_item(&menu, wxID_ANY, it->gcode == Slic3r::ColorChangeCode ? _(L("Delete color change")) : _(L("Delete custom G-code")), "",
|
||||||
[this](wxCommandEvent&) { action_tick(taDel); }, "colorchange_delete_off.png", &menu);
|
[this](wxCommandEvent&) { action_tick(taDel); }, "colorchange_delete_off.png", &menu);
|
||||||
|
|
||||||
Slic3r::GUI::wxGetApp().plater()->PopupMenu(&menu);
|
Slic3r::GUI::wxGetApp().plater()->PopupMenu(&menu);
|
||||||
|
|
||||||
m_show_edit_color_menu = false;
|
m_show_edit_menu = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
Refresh();
|
Refresh();
|
||||||
|
@ -3637,6 +3502,20 @@ static std::string get_new_color(const std::string& color)
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static std::string get_custom_code(const std::string& code_in, double height)
|
||||||
|
{
|
||||||
|
wxString msg_text = from_u8(_utf8(L("Enter custom G-code used on current layer"))) + " :";
|
||||||
|
wxString msg_header = from_u8((boost::format(_utf8(L("Custom Gcode on current layer (%1% mm)."))) % height).str());
|
||||||
|
|
||||||
|
// get custom gcode
|
||||||
|
wxTextEntryDialog dlg(nullptr, msg_text, msg_header, code_in,
|
||||||
|
wxTextEntryDialogStyle | wxTE_MULTILINE);
|
||||||
|
if (dlg.ShowModal() != wxID_OK || dlg.GetValue().IsEmpty())
|
||||||
|
return "";
|
||||||
|
|
||||||
|
return dlg.GetValue().ToStdString();
|
||||||
|
}
|
||||||
|
|
||||||
void DoubleSlider::add_code(std::string code, int selected_extruder/* = -1*/)
|
void DoubleSlider::add_code(std::string code, int selected_extruder/* = -1*/)
|
||||||
{
|
{
|
||||||
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
||||||
|
@ -3671,17 +3550,7 @@ void DoubleSlider::add_code(std::string code, int selected_extruder/* = -1*/)
|
||||||
}
|
}
|
||||||
else if (code.empty())
|
else if (code.empty())
|
||||||
{
|
{
|
||||||
wxString msg_text = from_u8(_utf8(L("Enter custom G-code used on current layer"))) + " :";
|
m_custom_gcode = code = get_custom_code(m_custom_gcode, m_values[tick]);
|
||||||
wxString msg_header = from_u8((boost::format(_utf8(L("Custom Gcode on current layer (%1% mm)."))) % m_values[tick]).str());
|
|
||||||
|
|
||||||
// get custom gcode
|
|
||||||
wxTextEntryDialog dlg(nullptr, msg_text, msg_header, m_custom_gcode,
|
|
||||||
wxTextEntryDialogStyle | wxTE_MULTILINE);
|
|
||||||
if (dlg.ShowModal() != wxID_OK || dlg.GetValue().IsEmpty())
|
|
||||||
return;
|
|
||||||
|
|
||||||
m_custom_gcode = dlg.GetValue();
|
|
||||||
code = m_custom_gcode.c_str();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int extruder = 1;
|
int extruder = 1;
|
||||||
|
@ -3702,18 +3571,34 @@ void DoubleSlider::add_code(std::string code, int selected_extruder/* = -1*/)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DoubleSlider::edit_color()
|
void DoubleSlider::edit_tick()
|
||||||
{
|
{
|
||||||
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
const int tick = m_selection == ssLower ? m_lower_value : m_higher_value;
|
||||||
// if on this Z exists tick
|
// if on this Z exists tick
|
||||||
std::set<TICK_CODE>::iterator it = m_ticks_.find(tick);
|
std::set<TICK_CODE>::iterator it = m_ticks_.find(tick);
|
||||||
if (it != m_ticks_.end())
|
if (it != m_ticks_.end())
|
||||||
{
|
{
|
||||||
std::string color = get_new_color(it->color);
|
std::string edited_value;
|
||||||
if (color.empty())
|
if (it->gcode == Slic3r::ColorChangeCode)
|
||||||
|
edited_value = get_new_color(it->color);
|
||||||
|
else
|
||||||
|
edited_value = get_custom_code(it->gcode, m_values[it->tick]);
|
||||||
|
|
||||||
|
if (edited_value.empty())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
TICK_CODE changed_tick = *it;
|
TICK_CODE changed_tick = *it;
|
||||||
changed_tick.color = color;
|
if (it->gcode == Slic3r::ColorChangeCode) {
|
||||||
|
if (it->color == edited_value)
|
||||||
|
return;
|
||||||
|
changed_tick.color = edited_value;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (it->gcode == edited_value)
|
||||||
|
return;
|
||||||
|
changed_tick.gcode = edited_value;
|
||||||
|
}
|
||||||
|
|
||||||
m_ticks_.erase(it);
|
m_ticks_.erase(it);
|
||||||
m_ticks_.insert(changed_tick);
|
m_ticks_.insert(changed_tick);
|
||||||
|
|
||||||
|
|
|
@ -808,10 +808,8 @@ public:
|
||||||
m_values = values;
|
m_values = values;
|
||||||
}
|
}
|
||||||
void ChangeOneLayerLock();
|
void ChangeOneLayerLock();
|
||||||
std::vector<double> GetTicksValues() const;
|
std::vector<Slic3r::Model::CustomGCode> GetTicksValues() const;
|
||||||
std::vector<Slic3r::Model::CustomGCode> GetTicksValues_() const;
|
void SetTicksValues(const std::vector<Slic3r::Model::CustomGCode> &heights);
|
||||||
void SetTicksValues_(const std::vector<Slic3r::Model::CustomGCode> &heights);
|
|
||||||
void SetTicksValues(const std::vector<double>& heights);
|
|
||||||
void EnableTickManipulation(bool enable = true) {
|
void EnableTickManipulation(bool enable = true) {
|
||||||
m_is_enabled_tick_manipulation = enable;
|
m_is_enabled_tick_manipulation = enable;
|
||||||
}
|
}
|
||||||
|
@ -854,7 +852,7 @@ public:
|
||||||
int get_extruder_for_tick(int tick);
|
int get_extruder_for_tick(int tick);
|
||||||
void OnRightUp(wxMouseEvent& event);
|
void OnRightUp(wxMouseEvent& event);
|
||||||
void add_code(std::string code, int selected_extruder = -1);
|
void add_code(std::string code, int selected_extruder = -1);
|
||||||
void edit_color();
|
void edit_tick();
|
||||||
void change_extruder(int extruder);
|
void change_extruder(int extruder);
|
||||||
void edit_extruder_sequence();
|
void edit_extruder_sequence();
|
||||||
|
|
||||||
|
@ -924,11 +922,11 @@ private:
|
||||||
bool m_is_one_layer_icon_focesed = false;
|
bool m_is_one_layer_icon_focesed = false;
|
||||||
bool m_is_enabled_tick_manipulation = true;
|
bool m_is_enabled_tick_manipulation = true;
|
||||||
bool m_show_context_menu = false;
|
bool m_show_context_menu = false;
|
||||||
bool m_show_edit_color_menu = false;
|
bool m_show_edit_menu = false;
|
||||||
bool m_edit_extruder_sequence = false;
|
bool m_edit_extruder_sequence = false;
|
||||||
bool m_suppress_add_code = false;
|
bool m_suppress_add_code = false;
|
||||||
ManipulationState m_state = msSingleExtruder;
|
ManipulationState m_state = msSingleExtruder;
|
||||||
wxString m_custom_gcode = wxEmptyString;
|
std::string m_custom_gcode = "";
|
||||||
int m_current_extruder = -1;
|
int m_current_extruder = -1;
|
||||||
|
|
||||||
wxRect m_rect_lower_thumb;
|
wxRect m_rect_lower_thumb;
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue