mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-18 20:28:08 -06:00
SLA gizmo - shift-up and ctrl+a event passing
This commit is contained in:
parent
fd4054be7e
commit
0453caf266
3 changed files with 38 additions and 5 deletions
|
@ -5114,6 +5114,7 @@ void GLCanvas3D::bind_event_handlers()
|
||||||
m_canvas->Bind(wxEVT_SIZE, &GLCanvas3D::on_size, this);
|
m_canvas->Bind(wxEVT_SIZE, &GLCanvas3D::on_size, this);
|
||||||
m_canvas->Bind(wxEVT_IDLE, &GLCanvas3D::on_idle, this);
|
m_canvas->Bind(wxEVT_IDLE, &GLCanvas3D::on_idle, this);
|
||||||
m_canvas->Bind(wxEVT_CHAR, &GLCanvas3D::on_char, this);
|
m_canvas->Bind(wxEVT_CHAR, &GLCanvas3D::on_char, this);
|
||||||
|
m_canvas->Bind(wxEVT_KEY_UP, &GLCanvas3D::on_key_up, this);
|
||||||
m_canvas->Bind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
|
m_canvas->Bind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
|
||||||
m_canvas->Bind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
|
m_canvas->Bind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
|
||||||
m_canvas->Bind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
|
m_canvas->Bind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
|
||||||
|
@ -5139,6 +5140,7 @@ void GLCanvas3D::unbind_event_handlers()
|
||||||
m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this);
|
m_canvas->Unbind(wxEVT_SIZE, &GLCanvas3D::on_size, this);
|
||||||
m_canvas->Unbind(wxEVT_IDLE, &GLCanvas3D::on_idle, this);
|
m_canvas->Unbind(wxEVT_IDLE, &GLCanvas3D::on_idle, this);
|
||||||
m_canvas->Unbind(wxEVT_CHAR, &GLCanvas3D::on_char, this);
|
m_canvas->Unbind(wxEVT_CHAR, &GLCanvas3D::on_char, this);
|
||||||
|
m_canvas->Unbind(wxEVT_KEY_UP, &GLCanvas3D::on_key_up, this);
|
||||||
m_canvas->Unbind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
|
m_canvas->Unbind(wxEVT_MOUSEWHEEL, &GLCanvas3D::on_mouse_wheel, this);
|
||||||
m_canvas->Unbind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
|
m_canvas->Unbind(wxEVT_TIMER, &GLCanvas3D::on_timer, this);
|
||||||
m_canvas->Unbind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
|
m_canvas->Unbind(wxEVT_LEFT_DOWN, &GLCanvas3D::on_mouse, this);
|
||||||
|
@ -5182,7 +5184,12 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
|
||||||
switch (keyCode) {
|
switch (keyCode) {
|
||||||
case 'a':
|
case 'a':
|
||||||
case 'A':
|
case 'A':
|
||||||
case WXK_CONTROL_A: post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL)); break;
|
case WXK_CONTROL_A:
|
||||||
|
if (m_gizmos.get_current_type() == Gizmos::SlaSupports) // Sla gizmo selects all support points
|
||||||
|
m_gizmos.mouse_event(5);
|
||||||
|
else
|
||||||
|
post_event(SimpleEvent(EVT_GLCANVAS_SELECT_ALL));
|
||||||
|
break;
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
case WXK_BACK: // the low cost Apple solutions are not equipped with a Delete key, use Backspace instead.
|
case WXK_BACK: // the low cost Apple solutions are not equipped with a Delete key, use Backspace instead.
|
||||||
#else /* __APPLE__ */
|
#else /* __APPLE__ */
|
||||||
|
@ -5240,6 +5247,18 @@ void GLCanvas3D::on_char(wxKeyEvent& evt)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void GLCanvas3D::on_key_up(wxKeyEvent& evt)
|
||||||
|
{
|
||||||
|
// see include/wx/defs.h enum wxKeyCode
|
||||||
|
int keyCode = evt.GetKeyCode();
|
||||||
|
|
||||||
|
// shift has been just released - SLA gizmo might want to close rectangular selection:
|
||||||
|
if (m_gizmos.get_current_type() == Gizmos::SlaSupports && keyCode == WXK_SHIFT) {
|
||||||
|
m_gizmos.mouse_event(2);
|
||||||
|
m_dirty = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
|
void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
|
||||||
{
|
{
|
||||||
// Ignore the wheel events if the middle button is pressed.
|
// Ignore the wheel events if the middle button is pressed.
|
||||||
|
@ -5586,6 +5605,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
else if (evt.Dragging() && m_gizmos.get_current_type() == Gizmos::SlaSupports && evt.ShiftDown())
|
else if (evt.Dragging() && m_gizmos.get_current_type() == Gizmos::SlaSupports && evt.ShiftDown())
|
||||||
{
|
{
|
||||||
m_gizmos.mouse_event(3, Vec2d(pos(0), pos(1)), evt.ShiftDown());
|
m_gizmos.mouse_event(3, Vec2d(pos(0), pos(1)), evt.ShiftDown());
|
||||||
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
else if (evt.Dragging() && !gizmos_overlay_contains_mouse)
|
else if (evt.Dragging() && !gizmos_overlay_contains_mouse)
|
||||||
{
|
{
|
||||||
|
|
|
@ -789,7 +789,7 @@ private:
|
||||||
void set_flattening_data(const ModelObject* model_object);
|
void set_flattening_data(const ModelObject* model_object);
|
||||||
|
|
||||||
void set_sla_support_data(ModelObject* model_object, const GLCanvas3D::Selection& selection);
|
void set_sla_support_data(ModelObject* model_object, const GLCanvas3D::Selection& selection);
|
||||||
void mouse_event(int action, const Vec2d& mouse_position, bool shift_down);
|
void mouse_event(int action, const Vec2d& mouse_position = Vec2d::Zero(), bool shift_down = false);
|
||||||
void delete_current_grabber(bool delete_all = false);
|
void delete_current_grabber(bool delete_all = false);
|
||||||
|
|
||||||
void render_current_gizmo(const Selection& selection) const;
|
void render_current_gizmo(const Selection& selection) const;
|
||||||
|
@ -1050,6 +1050,7 @@ public:
|
||||||
void on_size(wxSizeEvent& evt);
|
void on_size(wxSizeEvent& evt);
|
||||||
void on_idle(wxIdleEvent& evt);
|
void on_idle(wxIdleEvent& evt);
|
||||||
void on_char(wxKeyEvent& evt);
|
void on_char(wxKeyEvent& evt);
|
||||||
|
void on_key_up(wxKeyEvent& evt);
|
||||||
void on_mouse_wheel(wxMouseEvent& evt);
|
void on_mouse_wheel(wxMouseEvent& evt);
|
||||||
void on_timer(wxTimerEvent& evt);
|
void on_timer(wxTimerEvent& evt);
|
||||||
void on_mouse(wxMouseEvent& evt);
|
void on_mouse(wxMouseEvent& evt);
|
||||||
|
|
|
@ -1847,12 +1847,17 @@ void GLGizmoSlaSupports::render_selection_rectangle() const
|
||||||
::glOrtho(0.f, m_canvas_width, m_canvas_height, 0.f, -1.f, 1.f); // set projection matrix so that world coords = window coords
|
::glOrtho(0.f, m_canvas_width, m_canvas_height, 0.f, -1.f, 1.f); // set projection matrix so that world coords = window coords
|
||||||
|
|
||||||
// render the selection rectangle (window coordinates):
|
// render the selection rectangle (window coordinates):
|
||||||
|
::glPushAttrib(GL_ENABLE_BIT);
|
||||||
|
::glLineStipple(4, 0xAAAA);
|
||||||
|
::glEnable(GL_LINE_STIPPLE);
|
||||||
|
|
||||||
::glBegin(GL_LINE_LOOP);
|
::glBegin(GL_LINE_LOOP);
|
||||||
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
|
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
|
||||||
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
|
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_start_corner(1), (GLfloat)0.5f);
|
||||||
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
|
::glVertex3f((GLfloat)m_selection_rectangle_end_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
|
||||||
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
|
::glVertex3f((GLfloat)m_selection_rectangle_start_corner(0), (GLfloat)m_selection_rectangle_end_corner(1), (GLfloat)0.5f);
|
||||||
::glEnd();
|
::glEnd();
|
||||||
|
::glPopAttrib();
|
||||||
|
|
||||||
::glPopMatrix(); // restore former projection matrix
|
::glPopMatrix(); // restore former projection matrix
|
||||||
::glMatrixMode(GL_MODELVIEW);
|
::glMatrixMode(GL_MODELVIEW);
|
||||||
|
@ -2035,10 +2040,8 @@ void GLGizmoSlaSupports::mouse_event(int action, const Vec2d& mouse_position, bo
|
||||||
}
|
}
|
||||||
|
|
||||||
// dragging the selection rectangle:
|
// dragging the selection rectangle:
|
||||||
if (action == 3 && m_selection_rectangle_active) {
|
if (action == 3 && m_selection_rectangle_active)
|
||||||
m_selection_rectangle_end_corner = mouse_position;
|
m_selection_rectangle_end_corner = mouse_position;
|
||||||
m_parent.render();
|
|
||||||
}
|
|
||||||
|
|
||||||
// mouse up without selection rectangle - place point on the mesh:
|
// mouse up without selection rectangle - place point on the mesh:
|
||||||
if (action == 2 && !m_selection_rectangle_active) {
|
if (action == 2 && !m_selection_rectangle_active) {
|
||||||
|
@ -2096,6 +2099,15 @@ void GLGizmoSlaSupports::mouse_event(int action, const Vec2d& mouse_position, bo
|
||||||
}
|
}
|
||||||
m_selection_rectangle_active = false;
|
m_selection_rectangle_active = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (action == 4) {
|
||||||
|
// shift has been released
|
||||||
|
}
|
||||||
|
|
||||||
|
if (action == 5) {
|
||||||
|
// ctrl+A : select all
|
||||||
|
std::cout << "select all..." << std::endl;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void GLGizmoSlaSupports::delete_current_point(bool delete_all)
|
void GLGizmoSlaSupports::delete_current_point(bool delete_all)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue