mirror of
https://github.com/OrcaSlicer/OrcaSlicer.git
synced 2026-10-04 14:20:58 +00:00
Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8b7779708b | ||
|
|
5efb3bef45 | ||
|
|
90ac58d3cd |
@@ -177,7 +177,6 @@ src/slic3r/GUI/PresetHints.cpp
|
||||
src/slic3r/GUI/ProgressStatusBar.cpp
|
||||
src/slic3r/GUI/PlateSettingsDialog.cpp
|
||||
src/slic3r/GUI/PrivacyUpdateDialog.cpp
|
||||
src/slic3r/GUI/PublishDialog.cpp
|
||||
src/slic3r/GUI/PublishSettingsDialog.cpp
|
||||
src/slic3r/GUI/SavePresetDialog.cpp
|
||||
src/slic3r/GUI/SceneBenchmark.cpp
|
||||
|
||||
@@ -1,4 +0,0 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<path d="M5.97222 3H4C2.89543 3 2 3.89543 2 5V14C2 15.1046 2.89543 16 4 16H14.4444C15.549 16 16.4444 15.1046 16.4444 14V5C16.4444 3.89543 15.549 3 14.4444 3H12.8333" stroke="white" stroke-linecap="round"/>
|
||||
<path d="M9.93711 2.64645C9.74185 2.45118 9.42527 2.45118 9.23 2.64645L6.04802 5.82843C5.85276 6.02369 5.85276 6.34027 6.04802 6.53553C6.24329 6.7308 6.55987 6.7308 6.75513 6.53553L9.58356 3.70711L12.412 6.53553C12.6072 6.7308 12.9238 6.7308 13.1191 6.53553C13.3144 6.34027 13.3144 6.02369 13.1191 5.82843L9.93711 2.64645ZM9.08356 11.3056C9.08356 11.5817 9.30741 11.8056 9.58356 11.8056C9.8597 11.8056 10.0836 11.5817 10.0836 11.3056H9.08356ZM9.08356 3V11.3056H10.0836V3H9.08356Z" fill="white"/>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 805 B |
@@ -1,10 +0,0 @@
|
||||
<svg width="18" height="18" viewBox="0 0 18 18" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||||
<g clip-path="url(#clip0_1_12)">
|
||||
<path d="M18 0H0V18H18V0Z" fill="#262E2F"/>
|
||||
</g>
|
||||
<defs>
|
||||
<clipPath id="clip0_1_12">
|
||||
<rect width="18" height="18" fill="white"/>
|
||||
</clipPath>
|
||||
</defs>
|
||||
</svg>
|
||||
|
Before Width: | Height: | Size: 283 B |
@@ -4414,11 +4414,6 @@ struct PrecomputedLayer
|
||||
};
|
||||
} // namespace
|
||||
|
||||
template<typename BoolsOption> static bool any_enabled(const BoolsOption &option)
|
||||
{
|
||||
return std::any_of(option.values.begin(), option.values.end(), [](unsigned char enabled) { return enabled != 0; });
|
||||
}
|
||||
|
||||
// Whether process_layer() prepares the overhang estimator for `layer`.
|
||||
template<typename OverhangSpeed>
|
||||
static bool prepares_overhang_estimator(const Layer &layer, bool overhang_fan, OverhangSpeed overhang_speed)
|
||||
|
||||
@@ -789,6 +789,12 @@ class StaticPrintConfig;
|
||||
// Minimum object distance for arrangement, based on printer technology.
|
||||
double min_object_distance(const ConfigBase &cfg);
|
||||
|
||||
// Whether any value is set, a nil value included.
|
||||
template<bool NULLABLE> bool any_enabled(const ConfigOptionBoolsTempl<NULLABLE> &option)
|
||||
{
|
||||
return std::any_of(option.values.begin(), option.values.end(), [](unsigned char enabled) { return enabled != 0; });
|
||||
}
|
||||
|
||||
// One (extruder type x nozzle volume type) parameter variant a filament prints through, plus a
|
||||
// representative physical extruder observed using it. Ordering (and set-dedup identity) covers
|
||||
// the variant pair only, so the same variant reached through two extruders keeps one config slot.
|
||||
|
||||
@@ -1025,10 +1025,13 @@ void PrintObject::generate_support_material()
|
||||
void PrintObject::estimate_curled_extrusions()
|
||||
{
|
||||
if (this->set_started(posEstimateCurledExtrusions)) {
|
||||
if ( std::any_of(this->print()->m_print_regions.begin(), this->print()->m_print_regions.end(), [](const PrintRegion* region) {
|
||||
const auto& cfg = region->config().enable_overhang_speed.values;
|
||||
return std::any_of(cfg.begin(), cfg.end(), [](const unsigned char v) { return (bool) v; });
|
||||
})) {
|
||||
const auto any_region_enables = [this](ConfigOptionBoolsNullable PrintRegionConfig::*option) {
|
||||
return std::any_of(this->print()->m_print_regions.begin(), this->print()->m_print_regions.end(),
|
||||
[option](const PrintRegion* region) { return any_enabled(region->config().*option); });
|
||||
};
|
||||
// Only the slowdown for curled perimeters reads the curled lines, and they stay empty unless some region has overhang speed on.
|
||||
if (any_region_enables(&PrintRegionConfig::enable_overhang_speed) &&
|
||||
any_region_enables(&PrintRegionConfig::slowdown_for_curled_perimeters)) {
|
||||
|
||||
// Estimate curling of support material and add it to the malformaition lines of each layer
|
||||
float support_flow_width = support_material_flow(this, this->config().layer_height).width();
|
||||
@@ -1038,6 +1041,9 @@ void PrintObject::estimate_curled_extrusions()
|
||||
float(this->config().brim_width.getFloat())};
|
||||
SupportSpotsGenerator::estimate_malformations(this->layers(), params);
|
||||
m_print->throw_if_canceled();
|
||||
} else {
|
||||
for (Layer *layer : m_layers)
|
||||
layer->curled_lines.clear();
|
||||
}
|
||||
//this->set_done(posEstimateCurledExtrusions);
|
||||
}
|
||||
|
||||
@@ -483,8 +483,6 @@ set(SLIC3R_GUI_SOURCES
|
||||
GUI/ProjectDirtyStateManager.cpp
|
||||
GUI/ProjectDirtyStateManager.hpp
|
||||
GUI/Project.hpp
|
||||
GUI/PublishDialog.cpp
|
||||
GUI/PublishDialog.hpp
|
||||
GUI/PublishSettingsDialog.cpp
|
||||
GUI/PublishSettingsDialog.hpp
|
||||
GUI/PurgeModeDialog.cpp
|
||||
|
||||
@@ -46,7 +46,6 @@ enum CUSTOM_ID
|
||||
ID_TOP_DROPDOWN_MENU,
|
||||
ID_TITLE,
|
||||
ID_MODEL_STORE,
|
||||
ID_PUBLISH,
|
||||
ID_CALIB,
|
||||
ID_TOOL_BAR = 3200,
|
||||
ID_AMS_NOTEBOOK,
|
||||
@@ -339,10 +338,6 @@ void BBLTopbar::Init(wxFrame* parent)
|
||||
this->AddSpacer(FromDIP(25));
|
||||
//this->AddStretchSpacer(1);
|
||||
|
||||
//m_publish_bitmap = create_scaled_bitmap("topbar_publish", nullptr, TOPBAR_ICON_SIZE);
|
||||
//m_publish_item = this->AddTool(ID_PUBLISH, "", m_publish_bitmap);
|
||||
//m_publish_disable_bitmap = create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE);
|
||||
//m_publish_item->SetDisabledBitmap(m_publish_disable_bitmap);
|
||||
//this->EnableTool(m_publish_item->GetId(), false);
|
||||
//this->AddSpacer(FromDIP(4));
|
||||
|
||||
@@ -403,7 +398,6 @@ void BBLTopbar::Init(wxFrame* parent)
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnRedo, this, wxID_REDO);
|
||||
this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnUndo, this, wxID_UNDO);
|
||||
//this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnModelStoreClicked, this, ID_MODEL_STORE);
|
||||
//this->Bind(wxEVT_AUITOOLBAR_TOOL_DROPDOWN, &BBLTopbar::OnPublishClicked, this, ID_PUBLISH);
|
||||
}
|
||||
|
||||
BBLTopbar::~BBLTopbar()
|
||||
@@ -420,12 +414,6 @@ void BBLTopbar::OnOpenProject(wxAuiToolBarEvent& event)
|
||||
plater->load_project();
|
||||
}
|
||||
|
||||
//void BBLTopbar::show_publish_button(bool show)
|
||||
//{
|
||||
// this->EnableTool(m_publish_item->GetId(), show);
|
||||
// Refresh();
|
||||
//}
|
||||
|
||||
void BBLTopbar::OnSaveProject(wxAuiToolBarEvent& event)
|
||||
{
|
||||
MainFrame* main_frame = dynamic_cast<MainFrame*>(m_frame);
|
||||
@@ -482,22 +470,6 @@ void BBLTopbar::OnModelStoreClicked(wxAuiToolBarEvent& event)
|
||||
//GUI::wxGetApp().load_url(wxString(wxGetApp().app_config->get_web_host_url() + MODEL_STORE_URL));
|
||||
}
|
||||
|
||||
void BBLTopbar::OnPublishClicked(wxAuiToolBarEvent& event)
|
||||
{
|
||||
if (!wxGetApp().getAgent()) {
|
||||
BOOST_LOG_TRIVIAL(info) << "publish: no agent";
|
||||
return;
|
||||
}
|
||||
|
||||
//no more check
|
||||
//if (GUI::wxGetApp().plater()->model().objects.empty()) return;
|
||||
|
||||
#ifdef ENABLE_PUBLISHING
|
||||
wxGetApp().plater()->show_publish_dialog();
|
||||
#endif
|
||||
wxGetApp().open_publish_page_dialog();
|
||||
}
|
||||
|
||||
void BBLTopbar::SetFileMenu(wxMenu* file_menu)
|
||||
{
|
||||
m_file_menu = file_menu;
|
||||
@@ -579,10 +551,6 @@ void BBLTopbar::Rescale() {
|
||||
if (m_title_ctrl)
|
||||
m_title_ctrl->SetTitle(m_titleText);
|
||||
|
||||
/*item = this->FindTool(ID_PUBLISH);
|
||||
item->SetBitmap(create_scaled_bitmap("topbar_publish", this, TOPBAR_ICON_SIZE));
|
||||
item->SetDisabledBitmap(create_scaled_bitmap("topbar_publish_disable", nullptr, TOPBAR_ICON_SIZE));*/
|
||||
|
||||
/*item = this->FindTool(ID_MODEL_STORE);
|
||||
item->SetBitmap(create_scaled_bitmap("topbar_store", this, TOPBAR_ICON_SIZE));
|
||||
*/
|
||||
|
||||
@@ -52,12 +52,10 @@ public:
|
||||
void OnMouseCaptureLost(wxMouseCaptureLostEvent& event);
|
||||
void OnMenuClose(wxMenuEvent& event);
|
||||
void OnOpenProject(wxAuiToolBarEvent& event);
|
||||
//void show_publish_button(bool show);
|
||||
void OnSaveProject(wxAuiToolBarEvent& event);
|
||||
void OnUndo(wxAuiToolBarEvent& event);
|
||||
void OnRedo(wxAuiToolBarEvent& event);
|
||||
void OnModelStoreClicked(wxAuiToolBarEvent& event);
|
||||
void OnPublishClicked(wxAuiToolBarEvent &event);
|
||||
|
||||
wxAuiToolBarItem* FindToolByCurrentPosition();
|
||||
|
||||
@@ -97,14 +95,11 @@ private:
|
||||
wxString m_titleText;
|
||||
|
||||
|
||||
//wxAuiToolBarItem *m_publish_item;
|
||||
wxAuiToolBarItem* m_undo_item;
|
||||
wxAuiToolBarItem* m_redo_item;
|
||||
wxAuiToolBarItem* m_calib_item;
|
||||
wxAuiToolBarItem* maximize_btn;
|
||||
|
||||
wxBitmap m_publish_bitmap;
|
||||
wxBitmap m_publish_disable_bitmap;
|
||||
|
||||
wxBitmap maximize_bitmap;
|
||||
wxBitmap window_bitmap;
|
||||
|
||||
@@ -276,8 +276,9 @@ void DailyTipsPanel::set_position(const ImVec2& pos)
|
||||
void DailyTipsPanel::set_size(const ImVec2& size)
|
||||
{
|
||||
m_width = size.x;
|
||||
m_height = size.y;
|
||||
m_content_height = m_height - m_footer_height;
|
||||
//Orca: Keep the requested content height so expanding a collapsed panel restores its full size.
|
||||
m_content_height = size.y - m_footer_height;
|
||||
m_height = m_can_expand && !m_is_expanded ? m_footer_height : size.y;
|
||||
}
|
||||
|
||||
void DailyTipsPanel::set_can_expand(bool can_expand)
|
||||
@@ -647,4 +648,4 @@ void DailyTipsWindow::on_change_color_mode(bool is_dark)
|
||||
m_panel->on_change_color_mode(is_dark);
|
||||
}
|
||||
|
||||
}}
|
||||
}}
|
||||
|
||||
@@ -2880,17 +2880,24 @@ void NotificationManager::update_slicing_notif_dailytips(bool need_change)
|
||||
// Slicing progress notification was not found - init it thru plater so correct cancel callback function is appended
|
||||
wxGetApp().plater()->init_notification_manager();
|
||||
}
|
||||
// Orca: Ensures the slicing-progress controller exists before applying the first slicing transition.
|
||||
void NotificationManager::set_slicing_progress_began()
|
||||
{
|
||||
for (std::unique_ptr<PopNotification> & notification : m_pop_notifications) {
|
||||
if (notification->get_type() == NotificationType::SlicingProgress) {
|
||||
SlicingProgressNotification* spn = dynamic_cast<SlicingProgressNotification*>(notification.get());
|
||||
spn->set_progress_state(SlicingProgressNotification::SlicingProgressState::SP_BEGAN);
|
||||
return;
|
||||
auto find_slicing_progress = [this]() -> SlicingProgressNotification* {
|
||||
for (std::unique_ptr<PopNotification>& notification : m_pop_notifications) {
|
||||
if (notification->get_type() == NotificationType::SlicingProgress)
|
||||
return dynamic_cast<SlicingProgressNotification*>(notification.get());
|
||||
}
|
||||
return nullptr;
|
||||
};
|
||||
|
||||
SlicingProgressNotification* notification = find_slicing_progress();
|
||||
if (notification == nullptr) {
|
||||
wxGetApp().plater()->init_notification_manager();
|
||||
notification = find_slicing_progress();
|
||||
}
|
||||
// Slicing progress notification was not found - init it thru plater so correct cancel callback function is appended
|
||||
wxGetApp().plater()->init_notification_manager();
|
||||
if (notification != nullptr)
|
||||
notification->set_progress_state(SlicingProgressNotification::SlicingProgressState::SP_BEGAN);
|
||||
}
|
||||
void NotificationManager::set_slicing_progress_percentage(const std::string& text, float percentage)
|
||||
{
|
||||
|
||||
+1
-117
@@ -226,7 +226,6 @@
|
||||
#include "SelectMachine.hpp"
|
||||
#include "SendMultiMachinePage.hpp"
|
||||
#include "SendToPrinter.hpp"
|
||||
#include "PublishDialog.hpp"
|
||||
#include "ConfigWizard.hpp"
|
||||
#include "SyncAmsInfoDialog.hpp"
|
||||
#include "../Utils/ASCIIFolding.hpp"
|
||||
@@ -331,7 +330,6 @@ wxDEFINE_EVENT(EVT_EXPORT_BEGAN, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_EXPORT_FINISHED, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_IMPORT_MODEL_ID, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_DOWNLOAD_PROJECT, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_PUBLISH, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_OPEN_PLATESETTINGSDIALOG, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG, wxCommandEvent);
|
||||
// BBS: backup & restore
|
||||
@@ -339,7 +337,6 @@ wxDEFINE_EVENT(EVT_RESTORE_PROJECT, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_PRINT_FINISHED, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_SEND_CALIBRATION_FINISHED, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_SEND_FINISHED, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_PUBLISH_FINISHED, wxCommandEvent);
|
||||
//BBS: repair model
|
||||
wxDEFINE_EVENT(EVT_REPAIR_MODEL, wxCommandEvent);
|
||||
wxDEFINE_EVENT(EVT_FILAMENT_COLOR_CHANGED, wxCommandEvent);
|
||||
@@ -7146,7 +7143,6 @@ struct Plater::priv
|
||||
SelectMachineDialog* m_select_machine_dlg = nullptr;
|
||||
SendMultiMachinePage* m_send_multi_dlg = nullptr;
|
||||
SendToPrinterDialog* m_send_to_sdcard_dlg = nullptr;
|
||||
PublishDialog *m_publish_dlg = nullptr;
|
||||
|
||||
// Session-level stash of the last published selection. Written on publish and on
|
||||
// loading a published 3MF; read when the Publish dialog is opened.
|
||||
@@ -7200,7 +7196,6 @@ struct Plater::priv
|
||||
std::string m_broken_shown_sig;
|
||||
bool auto_reslice_pending {false};
|
||||
bool auto_reslice_after_cancel {false};
|
||||
bool m_is_publishing {false};
|
||||
int m_is_RightClickInLeftUI{-1};
|
||||
int m_cur_slice_plate;
|
||||
//BBS: m_slice_all in .gcode.3mf file case, set true when slice all
|
||||
@@ -7604,7 +7599,6 @@ struct Plater::priv
|
||||
void on_action_open_project(SimpleEvent&);
|
||||
void on_action_slice_plate(SimpleEvent&);
|
||||
void on_action_slice_all(SimpleEvent&);
|
||||
void on_action_publish(wxCommandEvent &evt);
|
||||
void on_action_print_plate(SimpleEvent&);
|
||||
void open_machine_select_dialog(int plate_idx, PrintFromType print_type = PrintFromType::FROM_NORMAL);
|
||||
void on_action_print_all(SimpleEvent&);
|
||||
@@ -7622,8 +7616,6 @@ struct Plater::priv
|
||||
void on_3dcanvas_mouse_dragging_finished(SimpleEvent&);
|
||||
|
||||
//void show_action_buttons(const bool is_ready_to_slice) const;
|
||||
bool show_publish_dlg(bool show = true);
|
||||
void update_publish_dialog_status(wxString &msg, int percent = -1);
|
||||
void on_action_print_plate_from_sdcard(SimpleEvent&);
|
||||
|
||||
void on_tab_selection_changing(wxBookCtrlEvent&);
|
||||
@@ -7873,7 +7865,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
background_process.set_export_began_event(EVT_EXPORT_BEGAN);
|
||||
background_process.set_export_finished_event(EVT_EXPORT_FINISHED);
|
||||
this->q->Bind(EVT_SLICING_UPDATE, &priv::on_slicing_update, this);
|
||||
this->q->Bind(EVT_PUBLISH, &priv::on_action_publish, this);
|
||||
this->q->Bind(EVT_REPAIR_MODEL, &priv::on_repair_model, this);
|
||||
this->q->Bind(EVT_FILAMENT_COLOR_CHANGED, &priv::on_filament_color_changed, this);
|
||||
this->q->Bind(EVT_INSTALL_PLUGIN_NETWORKING, &priv::install_network_plugin, this);
|
||||
@@ -8226,7 +8217,6 @@ Plater::priv::priv(Plater *q, MainFrame *main_frame)
|
||||
q->Bind(EVT_PRINT_FINISHED, [q](wxCommandEvent& evt) { q->print_job_finished(evt); });
|
||||
q->Bind(EVT_SEND_CALIBRATION_FINISHED, [q](wxCommandEvent& evt) { q->send_calibration_job_finished(evt); });
|
||||
q->Bind(EVT_SEND_FINISHED, [q](wxCommandEvent& evt) { q->send_job_finished(evt); });
|
||||
q->Bind(EVT_PUBLISH_FINISHED, [q](wxCommandEvent& evt) { q->publish_job_finished(evt);});
|
||||
q->Bind(EVT_OPEN_PLATESETTINGSDIALOG, [q](wxCommandEvent& evt) { q->open_platesettings_dialog(evt);});
|
||||
q->Bind(EVT_OPEN_FILAMENT_MAP_SETTINGS_DIALOG, [q](wxCommandEvent &evt) { q->open_filament_map_setting_dialog(evt); });
|
||||
//q->Bind(EVT_GLVIEWTOOLBAR_ASSEMBLE, [q](SimpleEvent&) { q->select_view_3D("Assemble"); });
|
||||
@@ -13361,11 +13351,6 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
|
||||
show_action_buttons(true);*/
|
||||
ready_to_slice = true;
|
||||
//this->main_frame->update_slice_print_status(MainFrame::eEventSliceUpdate, true, true);
|
||||
|
||||
//BBS
|
||||
if (m_is_publishing) {
|
||||
m_publish_dlg->cancel();
|
||||
}
|
||||
} else {
|
||||
if((ready_to_slice) || (wxGetApp().get_mode() == comSimple)) {
|
||||
//this means the current plate is not the slicing plate
|
||||
@@ -13407,15 +13392,6 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
|
||||
exporting_status = ExportingStatus::NOT_EXPORTING;
|
||||
|
||||
|
||||
// BBS stop publishing if error occur
|
||||
//if (m_is_publishing) {
|
||||
// GCodeProcessorResult *gcode_result = background_process.get_current_gcode_result();
|
||||
// m_publish_dlg->UpdateStatus(_L("Error occurred during slicing"), -1, false);
|
||||
// // if toolpath is outside
|
||||
// if (!gcode_result || gcode_result->toolpath_outside) {
|
||||
// m_is_publishing = false;
|
||||
// }
|
||||
//}
|
||||
|
||||
|
||||
if (is_finished)
|
||||
@@ -13424,16 +13400,6 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
|
||||
m_is_slicing = false;
|
||||
this->preview->reload_print(false);
|
||||
q->mark_plate_toolbar_image_dirty();
|
||||
/* BBS if in publishing progress */
|
||||
if (m_is_publishing) {
|
||||
if (m_publish_dlg && !m_publish_dlg->was_cancelled()) {
|
||||
if (m_publish_dlg->IsShown()) {
|
||||
q->publish_project();
|
||||
} else {
|
||||
m_is_publishing = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
q->SetDropTarget(new PlaterDropTarget(*main_frame, *q));
|
||||
}
|
||||
else
|
||||
@@ -13452,13 +13418,6 @@ void Plater::priv::on_process_completed(SlicingProcessCompletedEvent &evt)
|
||||
//not the last plate
|
||||
update_fff_scene_only_shells();
|
||||
q->Thaw();
|
||||
if (m_is_publishing) {
|
||||
if (m_publish_dlg && !m_publish_dlg->was_cancelled()) {
|
||||
wxString msg = wxString::Format(_L("Slicing Plate %d"), m_cur_slice_plate + 1);
|
||||
int percent = 70 * m_cur_slice_plate / partplate_list.get_plate_count();
|
||||
m_publish_dlg->UpdateStatus(msg, percent, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (auto_reslice_after_cancel) {
|
||||
auto_reslice_after_cancel = false;
|
||||
@@ -13540,40 +13499,12 @@ void Plater::priv::on_action_slice_all(SimpleEvent&)
|
||||
//select plate
|
||||
q->select_plate(m_cur_slice_plate);
|
||||
q->reslice();
|
||||
if (!m_is_publishing)
|
||||
q->select_view_3D("Preview");
|
||||
q->select_view_3D("Preview");
|
||||
//BBS: wish to select all plates stats item
|
||||
preview->get_canvas3d()->_update_select_plate_toolbar_stats_item(true);
|
||||
}
|
||||
}
|
||||
|
||||
void Plater::priv::on_action_publish(wxCommandEvent &event)
|
||||
{
|
||||
if (q != nullptr) {
|
||||
if (event.GetInt() == EVT_PUBLISHING_START) {
|
||||
// update by background slicing process
|
||||
if (process_completed_with_error >= 0) {
|
||||
wxString msg = _L("Please resolve the slicing errors and publish again.");
|
||||
this->m_publish_dlg->UpdateStatus(msg, false);
|
||||
return;
|
||||
}
|
||||
|
||||
m_is_publishing = true;
|
||||
// if slicing is ready publish project, else slicing first
|
||||
if (partplate_list.is_all_slice_results_valid()) {
|
||||
q->publish_project();
|
||||
} else {
|
||||
BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":received slice project in background event\n";
|
||||
SimpleEvent evt = SimpleEvent(EVT_GLTOOLBAR_SLICE_ALL);
|
||||
this->on_action_slice_all(evt);
|
||||
}
|
||||
} else {
|
||||
m_is_publishing = false;
|
||||
show_publish_dlg(false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Plater::priv::on_action_print_plate(SimpleEvent&)
|
||||
{
|
||||
if (q != nullptr) {
|
||||
@@ -14349,11 +14280,6 @@ int Plater::get_send_finished_event()
|
||||
return EVT_SEND_FINISHED;
|
||||
}
|
||||
|
||||
int Plater::get_publish_finished_event()
|
||||
{
|
||||
return EVT_PUBLISH_FINISHED;
|
||||
}
|
||||
|
||||
void Plater::priv::set_current_canvas_as_dirty()
|
||||
{
|
||||
if (current_panel == view3D)
|
||||
@@ -14762,31 +14688,6 @@ bool Plater::priv::can_reload_from_disk() const
|
||||
return !paths.empty();
|
||||
}
|
||||
|
||||
void Plater::priv::update_publish_dialog_status(wxString &msg, int percent)
|
||||
{
|
||||
if (m_publish_dlg)
|
||||
m_publish_dlg->UpdateStatus(msg, percent);
|
||||
}
|
||||
|
||||
bool Plater::priv::show_publish_dlg(bool show)
|
||||
{
|
||||
if (q != nullptr) { BOOST_LOG_TRIVIAL(debug) << __FUNCTION__ << ":recevied publish event\n"; }
|
||||
|
||||
if (!m_publish_dlg) m_publish_dlg = new PublishDialog(q);
|
||||
if (show) {
|
||||
m_publish_dlg->reset();
|
||||
m_publish_dlg->start_slicing();
|
||||
//m_publish_dlg->Show();
|
||||
m_publish_dlg->ShowModal();
|
||||
} else {
|
||||
m_publish_dlg->EndModal(wxID_OK);
|
||||
//cancel the slicing
|
||||
if (this->background_process.running())
|
||||
this->background_process.stop();
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
//BBS: add bed exclude area
|
||||
void Plater::priv::set_bed_shape(const Pointfs &shape,
|
||||
const Pointfs &exclude_areas,
|
||||
@@ -19915,11 +19816,6 @@ int Plater::export_3mf(const boost::filesystem::path& output_path, SaveStrategy
|
||||
return ret;
|
||||
}
|
||||
|
||||
void Plater::publish_project()
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
void Plater::reload_from_disk()
|
||||
{
|
||||
@@ -20562,13 +20458,6 @@ void Plater::send_job_finished(wxCommandEvent& evt)
|
||||
// curr_monitor->get_tabpanel()->ChangeSelection(MonitorPanel::PrinterTab::PT_STATUS);
|
||||
}
|
||||
|
||||
void Plater::publish_job_finished(wxCommandEvent &evt)
|
||||
{
|
||||
p->m_publish_dlg->EndModal(wxID_OK);
|
||||
// GUI::wxGetApp().load_url(evt.GetString());
|
||||
//GUI::wxGetApp().open_publish_page_dialog(evt.GetString());
|
||||
}
|
||||
|
||||
// Called when the Eject button is pressed.
|
||||
void Plater::eject_drive()
|
||||
{
|
||||
@@ -22866,11 +22755,6 @@ void Plater::show_object_info()
|
||||
notify_manager->bbl_show_objectsinfo_notification(info_text, non_manifold_edges > 0, !(p->current_panel == p->view3D));
|
||||
}
|
||||
|
||||
bool Plater::show_publish_dialog(bool show)
|
||||
{
|
||||
return p->show_publish_dlg(show);
|
||||
}
|
||||
|
||||
void Plater::post_process_string_object_exception(StringObjectException &err)
|
||||
{
|
||||
PresetBundle* preset_bundle = wxGetApp().preset_bundle;
|
||||
|
||||
@@ -116,12 +116,8 @@ enum class ActionButtonType : int;
|
||||
// (Sidebar::priv::m_menu_filament_id) rather than an explicit index.
|
||||
inline constexpr int kSidebarContextMenuFilamentId = -2;
|
||||
|
||||
#define EVT_PUBLISHING_START 1
|
||||
#define EVT_PUBLISHING_STOP 2
|
||||
|
||||
//BBS: add EVT_SLICING_UPDATE declare here
|
||||
wxDECLARE_EVENT(EVT_SLICING_UPDATE, Slic3r::SlicingStatusEvent);
|
||||
wxDECLARE_EVENT(EVT_PUBLISH, wxCommandEvent);
|
||||
wxDECLARE_EVENT(EVT_OPEN_PLATESETTINGSDIALOG, wxCommandEvent);
|
||||
|
||||
// Explanation of int param
|
||||
@@ -571,7 +567,6 @@ public:
|
||||
int export_3mf(const boost::filesystem::path& output_path = boost::filesystem::path(), SaveStrategy strategy = SaveStrategy::Default, int export_plate_idx = -1, Export3mfProgressFn proFn = nullptr);
|
||||
|
||||
//BBS
|
||||
void publish_project();
|
||||
|
||||
void reload_from_disk();
|
||||
void replace_with_stl();
|
||||
@@ -606,7 +601,6 @@ public:
|
||||
void send_calibration_job_finished(wxCommandEvent &evt);
|
||||
void print_job_finished(wxCommandEvent &evt);
|
||||
void send_job_finished(wxCommandEvent& evt);
|
||||
void publish_job_finished(wxCommandEvent& evt);
|
||||
void open_platesettings_dialog(wxCommandEvent& evt);
|
||||
void open_filament_map_setting_dialog(wxCommandEvent &evt);
|
||||
void on_change_color_mode(SimpleEvent& evt);
|
||||
@@ -717,7 +711,6 @@ public:
|
||||
int get_send_calibration_finished_event();
|
||||
int get_print_finished_event();
|
||||
int get_send_finished_event();
|
||||
int get_publish_finished_event();
|
||||
|
||||
void set_current_canvas_as_dirty();
|
||||
void unbind_canvas_event_handlers();
|
||||
@@ -842,7 +835,6 @@ public:
|
||||
//BBS: show object info
|
||||
void show_object_info();
|
||||
//BBS
|
||||
bool show_publish_dialog(bool show = true);
|
||||
//BBS: post process string object exception strings by warning types
|
||||
void post_process_string_object_exception(StringObjectException &err);
|
||||
void update_objects_position_when_select_preset(const std::function<void()> &select_prest);
|
||||
|
||||
@@ -1,270 +0,0 @@
|
||||
#include "PublishDialog.hpp"
|
||||
#include "GUI_App.hpp"
|
||||
|
||||
#include <wx/colour.h>
|
||||
#include <wx/string.h>
|
||||
#include "slic3r/GUI/Widgets/AMSItem.hpp"
|
||||
#include "slic3r/GUI/GUI_Utils.hpp"
|
||||
#include <wx/intl.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/toplevel.h>
|
||||
#include <wx/panel.h>
|
||||
#include "slic3r/GUI/Widgets/Label.hpp"
|
||||
#include "slic3r/GUI/Widgets/ProgressBar.hpp"
|
||||
#include "slic3r/GUI/Widgets/Button.hpp"
|
||||
#include "slic3r/GUI/Widgets/StateColor.hpp"
|
||||
#include <utility>
|
||||
#include <wx/event.h>
|
||||
#include "slic3r/GUI/Plater.hpp"
|
||||
#include <wx/wx.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/statbox.h>
|
||||
#include "wx/evtloop.h"
|
||||
|
||||
#include "libslic3r/Model.hpp"
|
||||
#include "libslic3r/Polygon.hpp"
|
||||
#include "MainFrame.hpp"
|
||||
#include "GUI_App.hpp"
|
||||
|
||||
|
||||
static const wxColour TEXT_LIGHT_GRAY = wxColour(107, 107, 107);
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
static wxString PUBLISH_STEP_STRING[STEP_COUNT] = {
|
||||
_L("Slice all plates to obtain time and filament estimation"),
|
||||
_L("Packing project data into 3MF file"),
|
||||
_L("Uploading 3MF"),
|
||||
_L("Jump to model publish web page")
|
||||
};
|
||||
|
||||
static wxString NOTE_STRING = _L("Note: The preparation may take several minutes. Please be patient.");
|
||||
|
||||
PublishDialog::PublishDialog(Plater *plater)
|
||||
: DPIDialog(static_cast<wxWindow *>(wxGetApp().mainframe), wxID_ANY, _L("Publish"), wxDefaultPosition, wxDefaultSize, wxCAPTION | wxCLOSE_BOX)
|
||||
, m_plater(plater)
|
||||
{
|
||||
this->SetSize(wxSize(FromDIP(540),FromDIP(400)));
|
||||
|
||||
this->SetSizeHints(wxDefaultSize, wxDefaultSize);
|
||||
|
||||
wxBoxSizer *top_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
wxBoxSizer *m_main_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
m_main_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0);
|
||||
|
||||
m_step_panel = new wxPanel(this, wxID_ANY);
|
||||
wxBoxSizer *step_sizer = create_publish_step_sizer();
|
||||
m_step_panel->SetSizer(step_sizer);
|
||||
m_step_panel->SetBackgroundColour(wxColour(248, 248, 248));
|
||||
|
||||
m_main_sizer->Add(m_step_panel, 1, wxEXPAND, 0);
|
||||
|
||||
m_main_sizer->Add(0, FromDIP(20), 0, wxEXPAND, 0);
|
||||
|
||||
m_text_note = new wxStaticText(this, wxID_ANY, NOTE_STRING, wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_text_note->SetFont(Label::Body_14);
|
||||
m_text_note->SetForegroundColour(TEXT_LIGHT_GRAY);
|
||||
m_text_note->Wrap(-1);
|
||||
m_main_sizer->Add(m_text_note, 0, wxALL | wxEXPAND, 0);
|
||||
m_main_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 0);
|
||||
|
||||
wxStaticLine *m_staticline = new wxStaticLine(this, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxLI_HORIZONTAL);
|
||||
m_main_sizer->Add(m_staticline, 0, wxALL | wxEXPAND, FromDIP(0));
|
||||
m_main_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 0);
|
||||
|
||||
wxBoxSizer *m_progress_text_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
m_text_progress = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_text_progress->Wrap(-1);
|
||||
m_text_progress->SetFont(Label::Body_12);
|
||||
m_text_progress->SetForegroundColour(TEXT_LIGHT_GRAY);
|
||||
|
||||
m_progress_text_sizer->Add(FromDIP(20), 0, 0, wxEXPAND | wxALL, 0);
|
||||
m_progress_text_sizer->Add(m_text_progress, 1, wxALL | wxEXPAND, 0);
|
||||
m_main_sizer->Add(m_progress_text_sizer, 0, wxALL | wxEXPAND, 0);
|
||||
|
||||
wxBoxSizer *m_progress_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
m_progress_sizer->Add(FromDIP(20), 0, 0, wxEXPAND | wxALL, 0);
|
||||
|
||||
m_progress = new ProgressBar(this, wxID_ANY, 100, wxDefaultPosition, wxDefaultSize);
|
||||
m_progress->SetHeight(FromDIP(8));
|
||||
m_progress->SetFont(Label::Head_10);
|
||||
m_progress_sizer->Add(m_progress, 1, wxALIGN_CENTER_VERTICAL | wxALL, 0);
|
||||
|
||||
m_progress_sizer->Add(FromDIP(20), 0, 0, wxEXPAND, 0);
|
||||
|
||||
m_btn_cancel = new Button(this, _L("Cancel"));
|
||||
m_progress_sizer->Add(m_btn_cancel, 0, wxALIGN_CENTER_VERTICAL | wxALL, FromDIP(5));
|
||||
StateColor btn_bg_green(std::pair<wxColour, int>(wxColour(0, 137, 123), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(38, 166, 154), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Normal));
|
||||
StateColor text_color(std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Pressed),
|
||||
std::pair<wxColour, int>(wxColour(255, 255, 255), StateColor::Hovered),
|
||||
std::pair<wxColour, int>(TEXT_LIGHT_GRAY, StateColor::Normal));
|
||||
m_btn_cancel->SetFont(Label::Body_12);
|
||||
m_btn_cancel->SetBackgroundColor(btn_bg_green);
|
||||
m_btn_cancel->SetBorderColor(wxColour(0, 150, 136));
|
||||
m_btn_cancel->SetTextColor(text_color);
|
||||
m_btn_cancel->SetSize(wxSize(FromDIP(60), FromDIP(20)));
|
||||
m_btn_cancel->SetMinSize(wxSize(FromDIP(60), FromDIP(20)));
|
||||
m_btn_cancel->SetCornerRadius(FromDIP(10));
|
||||
|
||||
m_progress_sizer->Add(FromDIP(20), 0, 0, wxEXPAND | wxALL, 0);
|
||||
|
||||
m_main_sizer->Add(m_progress_sizer, 0, wxEXPAND, FromDIP(0));
|
||||
|
||||
wxBoxSizer *m_bottom_sizer;
|
||||
m_bottom_sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
m_bottom_sizer->Add(FromDIP(20), 0, 0, wxEXPAND, 0);
|
||||
|
||||
m_text_errors = new wxStaticText(this, wxID_ANY, "", wxDefaultPosition, wxDefaultSize, 0);
|
||||
m_text_errors->Wrap(-1);
|
||||
m_text_errors->SetFont(Label::Body_12);
|
||||
m_text_errors->SetForegroundColour(wxColour(255, 111, 0));
|
||||
m_bottom_sizer->Add(m_text_errors, 1, wxALL, 0);
|
||||
|
||||
m_main_sizer->Add(m_bottom_sizer, 0, wxEXPAND, 0);
|
||||
m_main_sizer->Add(0, FromDIP(10), 0, wxEXPAND, 0);
|
||||
|
||||
top_sizer->Add(FromDIP(30), 0, 0, wxEXPAND, 0);
|
||||
top_sizer->Add(m_main_sizer, 1, wxALL | wxEXPAND, 0);
|
||||
top_sizer->Add(FromDIP(30), 0, 0, wxEXPAND, 0);
|
||||
|
||||
this->SetSizerAndFit(top_sizer);
|
||||
this->Layout();
|
||||
|
||||
this->Centre(wxBOTH);
|
||||
|
||||
m_btn_cancel->Bind(wxEVT_BUTTON, [this](wxCommandEvent&) {
|
||||
this->cancel();
|
||||
});
|
||||
|
||||
Bind(wxEVT_CLOSE_WINDOW, &PublishDialog::on_close, this);
|
||||
wxGetApp().UpdateDlgDarkUI(this);
|
||||
}
|
||||
|
||||
void PublishDialog::cancel()
|
||||
{
|
||||
m_was_cancelled = true;
|
||||
m_btn_cancel->Enable(false);
|
||||
m_text_progress->SetLabelText(_L("Publish was canceled"));
|
||||
wxCloseEvent evt;
|
||||
this->on_close(evt);
|
||||
}
|
||||
|
||||
void PublishDialog::start_slicing()
|
||||
{
|
||||
SetPublishStep(PublishStep::STEP_SLICING);
|
||||
|
||||
wxCommandEvent *evt = new wxCommandEvent(EVT_PUBLISH);
|
||||
evt->SetInt(EVT_PUBLISHING_START);
|
||||
wxQueueEvent(m_plater, evt);
|
||||
}
|
||||
|
||||
bool PublishDialog::UpdateStatus(wxString &msg, int percent, bool yield)
|
||||
{
|
||||
if (m_was_cancelled) return false;
|
||||
|
||||
if (percent >= 0)
|
||||
m_progress->SetValue(percent);
|
||||
m_text_progress->SetLabelText(msg);
|
||||
|
||||
if (yield)
|
||||
wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI | wxEVT_CATEGORY_USER_INPUT);
|
||||
return true;
|
||||
}
|
||||
|
||||
void PublishDialog::Pulse(wxString &msg, bool &skip)
|
||||
{
|
||||
if (!msg.IsEmpty())
|
||||
m_text_progress->SetLabelText(msg);
|
||||
wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI | wxEVT_CATEGORY_USER_INPUT);
|
||||
skip = m_was_cancelled;
|
||||
}
|
||||
|
||||
void PublishDialog::SetPublishStep(PublishStep step, bool yield, int percent)
|
||||
{
|
||||
m_publish_steps->SelectItem((int)step);
|
||||
if (step == PublishStep::STEP_SLICING) {
|
||||
m_text_progress->SetLabelText(_L("Slicing Plate 1"));
|
||||
if (percent > 0)
|
||||
m_progress->SetValue(percent);
|
||||
else
|
||||
m_progress->SetValue(0);
|
||||
} else if (step == PublishStep::STEP_PACKING) {
|
||||
m_text_progress->SetLabelText(_L("Packing data to 3MF"));
|
||||
if (percent > 0)
|
||||
m_progress->SetValue(percent);
|
||||
else
|
||||
m_progress->SetValue(70);
|
||||
} else if (step == PublishStep::STEP_UPLOADING) {
|
||||
m_text_progress->SetLabelText(_L("Uploading data"));
|
||||
if (percent > 0)
|
||||
m_progress->SetValue(percent);
|
||||
else
|
||||
m_progress->SetValue(85);
|
||||
} else if (step == PublishStep::STEP_FILL_INFO) {
|
||||
m_text_progress->SetLabelText(_L("Jump to webpage"));
|
||||
m_progress->SetValue(100);
|
||||
}
|
||||
|
||||
if (yield)
|
||||
wxEventLoopBase::GetActive()->YieldFor(wxEVT_CATEGORY_UI | wxEVT_CATEGORY_USER_INPUT);
|
||||
}
|
||||
|
||||
wxBoxSizer *PublishDialog::create_publish_step_sizer()
|
||||
{
|
||||
auto sizer = new wxBoxSizer(wxHORIZONTAL);
|
||||
|
||||
sizer->Add(FromDIP(30), 0, 0, wxEXPAND, 0);
|
||||
|
||||
auto middle_sizer = new wxBoxSizer(wxVERTICAL);
|
||||
|
||||
m_publish_steps = new StepIndicator(m_step_panel, wxID_ANY);
|
||||
StateColor bg_color(std::pair<wxColour, int>(wxColour(248, 248, 248), StateColor::Normal));
|
||||
m_publish_steps->SetBackgroundColor(bg_color);
|
||||
m_publish_steps->SetFont(Label::Body_14);
|
||||
|
||||
for (int i = 0; i < (int) PublishStep::STEP_PUBLISH_COUNT; i++) {
|
||||
m_publish_steps->AppendItem(PUBLISH_STEP_STRING[i]);
|
||||
}
|
||||
|
||||
middle_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0);
|
||||
middle_sizer->Add(m_publish_steps, 1, wxALL | wxEXPAND, 0);
|
||||
middle_sizer->Add(0, FromDIP(30), 0, wxEXPAND, 0);
|
||||
|
||||
sizer->Add(middle_sizer, 1, wxALL | wxEXPAND, 0);
|
||||
|
||||
sizer->Add(FromDIP(30), 0, 0, wxEXPAND, 0);
|
||||
|
||||
return sizer;
|
||||
}
|
||||
|
||||
void PublishDialog::on_dpi_changed(const wxRect &suggested_rect)
|
||||
{
|
||||
Fit();
|
||||
Refresh();
|
||||
}
|
||||
|
||||
void PublishDialog::on_close(wxCloseEvent &event)
|
||||
{
|
||||
wxCommandEvent *evt = new wxCommandEvent(EVT_PUBLISH);
|
||||
evt->SetInt(EVT_PUBLISHING_STOP);
|
||||
wxQueueEvent(m_plater, evt);
|
||||
}
|
||||
|
||||
void PublishDialog::reset()
|
||||
{
|
||||
m_btn_cancel->Enable();
|
||||
m_was_cancelled = false;
|
||||
SetPublishStep(PublishStep::STEP_SLICING);
|
||||
m_text_errors->Hide();
|
||||
}
|
||||
|
||||
|
||||
} // GUI
|
||||
} // Slic3r
|
||||
@@ -1,75 +0,0 @@
|
||||
#ifndef slic3r_PublishDialog_hpp_
|
||||
#define slic3r_PublishDialog_hpp_
|
||||
|
||||
|
||||
#include "I18N.hpp"
|
||||
|
||||
#include "slic3r/GUI/GUI_Utils.hpp"
|
||||
#include <wx/event.h>
|
||||
#include <wx/font.h>
|
||||
#include <wx/colour.h>
|
||||
#include <wx/panel.h>
|
||||
#include <wx/gdicmn.h>
|
||||
#include <wx/settings.h>
|
||||
#include <wx/string.h>
|
||||
#include <wx/sizer.h>
|
||||
#include <wx/stattext.h>
|
||||
#include <wx/gauge.h>
|
||||
#include <wx/button.h>
|
||||
#include <wx/bitmap.h>
|
||||
#include <wx/image.h>
|
||||
#include <wx/icon.h>
|
||||
#include <wx/dialog.h>
|
||||
#include "wxExtensions.hpp"
|
||||
#include "Plater.hpp"
|
||||
#include "Widgets/StepCtrl.hpp"
|
||||
#include "Widgets/ProgressDialog.hpp"
|
||||
#include "Widgets/Button.hpp"
|
||||
#include "Widgets/ProgressBar.hpp"
|
||||
|
||||
|
||||
namespace Slic3r {
|
||||
namespace GUI {
|
||||
|
||||
enum PublishStep {
|
||||
STEP_SLICING = 0,
|
||||
STEP_PACKING,
|
||||
STEP_UPLOADING,
|
||||
STEP_FILL_INFO,
|
||||
STEP_PUBLISH_COUNT,
|
||||
};
|
||||
|
||||
class PublishDialog : public DPIDialog
|
||||
{
|
||||
public:
|
||||
PublishDialog(Plater* plater = nullptr);
|
||||
|
||||
bool UpdateStatus(wxString &msg, int percent = -1, bool yeild = true);
|
||||
void Pulse(wxString &msg, bool &skip);
|
||||
void SetPublishStep(PublishStep step, bool yeild = false, int percent = -1);
|
||||
void start_slicing();
|
||||
void reset();
|
||||
bool was_cancelled() { return m_was_cancelled; }
|
||||
void cancel();
|
||||
|
||||
protected:
|
||||
wxPanel* m_step_panel;
|
||||
::StepIndicator *m_publish_steps;
|
||||
wxStaticText *m_text_note;
|
||||
wxStaticText *m_text_progress;
|
||||
ProgressBar *m_progress;
|
||||
Button* m_btn_cancel;
|
||||
wxStaticText *m_text_errors;
|
||||
Plater * m_plater{nullptr};
|
||||
bool m_was_cancelled { false };
|
||||
|
||||
wxBoxSizer* create_publish_step_sizer();
|
||||
void on_close(wxCloseEvent &event);
|
||||
void on_dpi_changed(const wxRect &suggested_rect) override;
|
||||
};
|
||||
|
||||
} // GUI
|
||||
} // Slic3r
|
||||
|
||||
|
||||
#endif /* slic3r_BedShapeDialog_hpp_ */
|
||||
@@ -239,12 +239,15 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas
|
||||
const float gcodeviewer_height = wxGetApp().plater()->get_preview_canvas3D()->get_gcode_viewer().get_legend_height();
|
||||
//const float dailytips_panel_height = std::min(380.0f * scale, std::max(90.0f, (cnv_size.get_height() - gcodeviewer_height - progress_panel_height - dailytips_child_window_padding.y - initial_y - m_line_height * 4)));
|
||||
const float dailytips_panel_height = 125.0f * scale;
|
||||
const ImVec2 dailytips_size = ImVec2(dailytips_panel_width, dailytips_panel_height);
|
||||
//Orca: Update the child's effective height before positioning this parent window.
|
||||
m_dailytips_panel->set_size(dailytips_size);
|
||||
|
||||
float right_gap = right_margin + (move_from_overlay ? overlay_width + m_line_height * 5 : 0);
|
||||
m_window_pos = ImVec2((float)cnv_size.get_width() - right_gap - m_window_width, (float)cnv_size.get_height() - m_top_y);
|
||||
imgui.set_next_window_pos(m_window_pos.x, m_window_pos.y, ImGuiCond_Always, 0.0f, 0.0f);
|
||||
m_window_height = progress_panel_height + m_dailytips_panel->get_size().y + progress_child_window_padding.y + dailytips_child_window_padding.y + bottom_padding.y;
|
||||
m_top_y = initial_y + m_window_height;
|
||||
m_window_pos = ImVec2((float)cnv_size.get_width() - right_gap - m_window_width, (float)cnv_size.get_height() - m_top_y);
|
||||
imgui.set_next_window_pos(m_window_pos.x, m_window_pos.y, ImGuiCond_Always, 0.0f, 0.0f);
|
||||
ImGui::SetNextWindowSizeConstraints(ImVec2(m_window_width, m_window_height), ImVec2(m_window_width, m_window_height));
|
||||
|
||||
// name of window indentifies window - has to be unique string
|
||||
@@ -307,9 +310,7 @@ void NotificationManager::SlicingProgressNotification::render(GLCanvas3D& canvas
|
||||
|
||||
child_name = "##DailyTipsPanel" + std::to_string(parent_window->ID);
|
||||
ImVec2 dailytips_pos = ImGui::GetCursorScreenPos() + dailytips_child_window_padding;
|
||||
ImVec2 dailytips_size = ImVec2(dailytips_panel_width, dailytips_panel_height);
|
||||
m_dailytips_panel->set_position(dailytips_pos);
|
||||
m_dailytips_panel->set_size(dailytips_size);
|
||||
m_dailytips_panel->set_fade_opacity(m_current_fade_opacity);
|
||||
ImGui::SetNextWindowPos(dailytips_pos);
|
||||
if (ImGui::BeginChild(child_name.c_str(), ImVec2(dailytips_panel_width, dailytips_panel_height), false, child_window_flags)) {
|
||||
@@ -504,4 +505,4 @@ void NotificationManager::SlicingProgressNotification::render_progress_close_but
|
||||
}
|
||||
}
|
||||
|
||||
}}
|
||||
}}
|
||||
|
||||
@@ -566,6 +566,12 @@ struct SlicedCage
|
||||
|
||||
using Walls = std::vector<std::vector<ProcessedPoint>>;
|
||||
|
||||
bool has_curled_lines(const PrintObject &object)
|
||||
{
|
||||
const auto layers = object.layers();
|
||||
return std::any_of(layers.begin(), layers.end(), [](const Layer *layer) { return !layer->curled_lines.empty(); });
|
||||
}
|
||||
|
||||
// Estimates every wall of `layer` against whatever layer `estimator` was last prepared with before it.
|
||||
Walls estimate_walls(ExtrusionQualityEstimator &estimator, const PrintObject *object, const Layer &layer)
|
||||
{
|
||||
@@ -707,6 +713,53 @@ TEST_CASE("Precomputed overhang data has the curled-line tree exactly when a reg
|
||||
CHECK((precomputed.front().lower_curled_lines != nullptr) == slowdown);
|
||||
}
|
||||
|
||||
TEST_CASE("Curled walls are estimated only when overhang speed and the slowdown for curled perimeters are both on", "[ExtrusionProcessor]")
|
||||
{
|
||||
const auto [overhang_speed, slowdown, estimated] = GENERATE(table<bool, bool, bool>({
|
||||
{true, true, true},
|
||||
{true, false, false},
|
||||
{false, true, false},
|
||||
}));
|
||||
DynamicPrintConfig config = caged_overhang_config("classic");
|
||||
config.set_deserialize_strict({{"enable_overhang_speed", overhang_speed ? "1" : "0"},
|
||||
{"slowdown_for_curled_perimeters", slowdown ? "1" : "0"}});
|
||||
const SlicedCage cage(config);
|
||||
|
||||
CHECK(has_curled_lines(*cage.object) == estimated);
|
||||
}
|
||||
|
||||
TEST_CASE("Curled walls are estimated when overhang speed and the slowdown for curled perimeters are on in different objects", "[ExtrusionProcessor]")
|
||||
{
|
||||
const std::vector<std::vector<ConfigBase::SetDeserializeItem>> overrides{
|
||||
{{"enable_overhang_speed", "1"}, {"slowdown_for_curled_perimeters", "0"}},
|
||||
{{"enable_overhang_speed", "0"}, {"slowdown_for_curled_perimeters", "1"}},
|
||||
};
|
||||
Print print;
|
||||
Model model;
|
||||
init_print(std::vector<TriangleMesh>{caged_overhang_mesh(), caged_overhang_mesh()}, print, model, caged_overhang_config("classic"),
|
||||
&overrides);
|
||||
print.process();
|
||||
|
||||
REQUIRE(print.objects().size() == 2);
|
||||
for (const PrintObject *object : print.objects())
|
||||
CHECK(has_curled_lines(*object));
|
||||
}
|
||||
|
||||
TEST_CASE("Curled walls from an earlier slice are dropped once overhang speed is off", "[ExtrusionProcessor]")
|
||||
{
|
||||
DynamicPrintConfig config = caged_overhang_config("classic");
|
||||
config.set_deserialize_strict("slowdown_for_curled_perimeters", "1");
|
||||
SlicedCage cage(config);
|
||||
const Layer *first_layer = cage.print.objects().front()->layers().front();
|
||||
REQUIRE(has_curled_lines(*cage.print.objects().front()));
|
||||
|
||||
config.set_deserialize_strict("enable_overhang_speed", "0");
|
||||
cage.print.apply(cage.model, config);
|
||||
cage.print.process();
|
||||
REQUIRE(cage.print.objects().front()->layers().front() == first_layer);
|
||||
CHECK_FALSE(has_curled_lines(*cage.print.objects().front()));
|
||||
}
|
||||
|
||||
TEST_CASE("Caged external overhangs are slowed when printed by object or through the pressure equalizer", "[ExtrusionProcessor]")
|
||||
{
|
||||
const auto [key, value] = GENERATE(table<const char *, const char *>({
|
||||
|
||||
Reference in New Issue
Block a user