OrcaSlicer latest
OrcaSlicer
Loading...
Searching...
No Matches
Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow Class Reference
Collaboration diagram for Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow:

Classes

struct  State
struct  Alignment

Public Member Functions

 RotoptimzeWindow (ImGuiWrapper *imgui, State &state, const Alignment &bottom_limit)
 ~RotoptimzeWindow ()
 RotoptimzeWindow (const RotoptimzeWindow &)=delete
 RotoptimzeWindow (RotoptimzeWindow &&)=delete
RotoptimzeWindow & operator= (const RotoptimzeWindow &)=delete
RotoptimzeWindow & operator= (RotoptimzeWindow &&)=delete

Private Attributes

ImGuiWrapper * m_imgui = nullptr

Detailed Description


Class Documentation

◆ Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::State

struct Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::State
Class Members
float accuracy = 1.f
int method_id = 0

◆ Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::Alignment

struct Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::Alignment
Class Members
float bottom_limit
float x
float y

Constructor & Destructor Documentation

◆ RotoptimzeWindow() [1/3]

Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow ( ImGuiWrapper * imgui,
State & state,
const Alignment & bottom_limit )
709 : m_imgui{imgui}
710{
711 imgui->begin(_L("Optimize orientation"), ImGuiWindowFlags_NoMove |
712 ImGuiWindowFlags_AlwaysAutoResize |
713 ImGuiWindowFlags_NoCollapse);
714
715 // adjust window position to avoid overlap the view toolbar
716 float win_h = ImGui::GetWindowHeight();
717 float x = alignment.x, y = alignment.y;
718 y = std::min(y, alignment.bottom_limit - win_h);
719 ImGui::SetWindowPos(ImVec2(x, y), ImGuiCond_Always);
720
721 float max_text_w = 0.;
722 auto padding = ImGui::GetStyle().FramePadding;
723 padding.x *= 2.f;
724 padding.y *= 2.f;
725
726 for (size_t i = 0; i < RotoptimizeJob::get_methods_count(); ++i) {
727 float w =
728 ImGui::CalcTextSize(RotoptimizeJob::get_method_name(i).c_str()).x +
729 padding.x + ImGui::GetFrameHeight();
730 max_text_w = std::max(w, max_text_w);
731 }
732
733 ImGui::PushItemWidth(max_text_w);
734
735 if (ImGui::BeginCombo("", RotoptimizeJob::get_method_name(state.method_id).c_str())) {
736 for (size_t i = 0; i < RotoptimizeJob::get_methods_count(); ++i) {
737 if (ImGui::Selectable(RotoptimizeJob::get_method_name(i).c_str())) {
738 state.method_id = i;
739#ifdef SUPPORT_SLA_AUTO_ROTATE
740 wxGetApp().app_config->set("sla_auto_rotate",
741 "method_id",
742 std::to_string(state.method_id));
743#endif // SUPPORT_SLA_AUTO_ROTATE
744 }
745
746 if (ImGui::IsItemHovered())
747 ImGui::SetTooltip("%s", RotoptimizeJob::get_method_description(i).c_str());
748 }
749
750 ImGui::EndCombo();
751 }
752
753 ImVec2 sz = ImGui::GetItemRectSize();
754
755 if (ImGui::IsItemHovered())
756 ImGui::SetTooltip("%s", RotoptimizeJob::get_method_description(state.method_id).c_str());
757
758 ImGui::Separator();
759
760 auto btn_txt = _L("Apply");
761 auto btn_txt_sz = ImGui::CalcTextSize(btn_txt.c_str());
762 ImVec2 button_sz = {btn_txt_sz.x + padding.x, btn_txt_sz.y + padding.y};
763 ImGui::SetCursorPosX(padding.x + sz.x - button_sz.x);
764
765 if (!wxGetApp().plater()->get_ui_job_worker().is_idle())
766 imgui->disabled_begin(true);
767
768 if ( imgui->button(btn_txt) ) {
769 replace_job(wxGetApp().plater()->get_ui_job_worker(),
770 std::make_unique<RotoptimizeJob>());
771 }
772
773 imgui->disabled_end();
774}
#define _L(s)
Definition OBJ.cpp:34
ImGuiWrapper * m_imgui
Definition GLGizmoRotate.hpp:191
static std::string get_method_description(size_t i)
Definition RotoptimizeJob.hpp:76
static std::string get_method_name(size_t i)
Definition RotoptimizeJob.hpp:71
static constexpr size_t get_methods_count()
Definition RotoptimizeJob.hpp:69
static Plater * plater()
Definition GUI_Factories.cpp:400
bool replace_job(Worker &w, Args &&...args)
Definition Worker.hpp:99

References _L, Slic3r::GUI::ImGuiWrapper::begin(), Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::Alignment::bottom_limit, Slic3r::GUI::ImGuiWrapper::button(), Slic3r::GUI::ImGuiWrapper::disabled_begin(), Slic3r::GUI::ImGuiWrapper::disabled_end(), Slic3r::GUI::RotoptimizeJob::get_method_description(), Slic3r::GUI::RotoptimizeJob::get_method_name(), Slic3r::GUI::RotoptimizeJob::get_methods_count(), m_imgui, Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::State::method_id, Slic3r::GUI::plater(), Slic3r::GUI::replace_job(), Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::Alignment::x, and Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::Alignment::y.

Referenced by RotoptimzeWindow(), RotoptimzeWindow(), operator=(), and operator=().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ ~RotoptimzeWindow()

Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::~RotoptimzeWindow ( )
777{
778 m_imgui->end();
779}

References m_imgui.

◆ RotoptimzeWindow() [2/3]

Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow ( const RotoptimzeWindow & )
delete

References RotoptimzeWindow().

Here is the call graph for this function:

◆ RotoptimzeWindow() [3/3]

Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::RotoptimzeWindow ( RotoptimzeWindow && )
delete

References RotoptimzeWindow().

Here is the call graph for this function:

Member Function Documentation

◆ operator=() [1/2]

RotoptimzeWindow & Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::operator= ( const RotoptimzeWindow & )
delete

References RotoptimzeWindow().

Here is the call graph for this function:

◆ operator=() [2/2]

RotoptimzeWindow & Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::operator= ( RotoptimzeWindow && )
delete

References RotoptimzeWindow().

Here is the call graph for this function:

Member Data Documentation

◆ m_imgui

ImGuiWrapper* Slic3r::GUI::GLGizmoRotate3D::RotoptimzeWindow::m_imgui = nullptr
private

The documentation for this class was generated from the following files: