Merge remote-tracking branch 'origin/master' into tm_sla_supports_backend
This commit is contained in:
commit
761a8fcc95
@ -13,8 +13,6 @@
|
|||||||
//=============
|
//=============
|
||||||
#define ENABLE_1_42_0 1
|
#define ENABLE_1_42_0 1
|
||||||
|
|
||||||
// Add double click on gizmo grabbers to reset transformation components to their default value
|
|
||||||
#define ENABLE_GIZMOS_RESET (1 && ENABLE_1_42_0)
|
|
||||||
// Uses a unique opengl context
|
// Uses a unique opengl context
|
||||||
#define ENABLE_USE_UNIQUE_GLCONTEXT (1 && ENABLE_1_42_0)
|
#define ENABLE_USE_UNIQUE_GLCONTEXT (1 && ENABLE_1_42_0)
|
||||||
// Disable synchronization of unselected instances
|
// Disable synchronization of unselected instances
|
||||||
|
@ -67,7 +67,7 @@ void Bed_2D::repaint()
|
|||||||
shift(1) - (cbb.max(1) - GetSize().GetHeight()));
|
shift(1) - (cbb.max(1) - GetSize().GetHeight()));
|
||||||
|
|
||||||
// draw bed fill
|
// draw bed fill
|
||||||
dc.SetBrush(wxBrush(wxColour(255, 255, 255), wxSOLID));
|
dc.SetBrush(wxBrush(wxColour(255, 255, 255), wxBRUSHSTYLE_SOLID));
|
||||||
wxPointList pt_list;
|
wxPointList pt_list;
|
||||||
for (auto pt: m_bed_shape)
|
for (auto pt: m_bed_shape)
|
||||||
{
|
{
|
||||||
@ -87,7 +87,7 @@ void Bed_2D::repaint()
|
|||||||
}
|
}
|
||||||
polylines = intersection_pl(polylines, bed_polygon);
|
polylines = intersection_pl(polylines, bed_polygon);
|
||||||
|
|
||||||
dc.SetPen(wxPen(wxColour(230, 230, 230), 1, wxSOLID));
|
dc.SetPen(wxPen(wxColour(230, 230, 230), 1, wxPENSTYLE_SOLID));
|
||||||
for (auto pl : polylines)
|
for (auto pl : polylines)
|
||||||
{
|
{
|
||||||
for (size_t i = 0; i < pl.points.size()-1; i++) {
|
for (size_t i = 0; i < pl.points.size()-1; i++) {
|
||||||
@ -98,8 +98,8 @@ void Bed_2D::repaint()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// draw bed contour
|
// draw bed contour
|
||||||
dc.SetPen(wxPen(wxColour(0, 0, 0), 1, wxSOLID));
|
dc.SetPen(wxPen(wxColour(0, 0, 0), 1, wxPENSTYLE_SOLID));
|
||||||
dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxTRANSPARENT));
|
dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_TRANSPARENT));
|
||||||
dc.DrawPolygon(&pt_list, 0, 0);
|
dc.DrawPolygon(&pt_list, 0, 0);
|
||||||
|
|
||||||
auto origin_px = to_pixels(Vec2d(0, 0));
|
auto origin_px = to_pixels(Vec2d(0, 0));
|
||||||
@ -108,7 +108,7 @@ void Bed_2D::repaint()
|
|||||||
auto axes_len = 50;
|
auto axes_len = 50;
|
||||||
auto arrow_len = 6;
|
auto arrow_len = 6;
|
||||||
auto arrow_angle = Geometry::deg2rad(45.0);
|
auto arrow_angle = Geometry::deg2rad(45.0);
|
||||||
dc.SetPen(wxPen(wxColour(255, 0, 0), 2, wxSOLID)); // red
|
dc.SetPen(wxPen(wxColour(255, 0, 0), 2, wxPENSTYLE_SOLID)); // red
|
||||||
auto x_end = Vec2d(origin_px(0) + axes_len, origin_px(1));
|
auto x_end = Vec2d(origin_px(0) + axes_len, origin_px(1));
|
||||||
dc.DrawLine(wxPoint(origin_px(0), origin_px(1)), wxPoint(x_end(0), x_end(1)));
|
dc.DrawLine(wxPoint(origin_px(0), origin_px(1)), wxPoint(x_end(0), x_end(1)));
|
||||||
for (auto angle : { -arrow_angle, arrow_angle }) {
|
for (auto angle : { -arrow_angle, arrow_angle }) {
|
||||||
@ -116,7 +116,7 @@ void Bed_2D::repaint()
|
|||||||
dc.DrawLine(wxPoint(x_end(0), x_end(1)), wxPoint(end(0), end(1)));
|
dc.DrawLine(wxPoint(x_end(0), x_end(1)), wxPoint(end(0), end(1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
dc.SetPen(wxPen(wxColour(0, 255, 0), 2, wxSOLID)); // green
|
dc.SetPen(wxPen(wxColour(0, 255, 0), 2, wxPENSTYLE_SOLID)); // green
|
||||||
auto y_end = Vec2d(origin_px(0), origin_px(1) - axes_len);
|
auto y_end = Vec2d(origin_px(0), origin_px(1) - axes_len);
|
||||||
dc.DrawLine(wxPoint(origin_px(0), origin_px(1)), wxPoint(y_end(0), y_end(1)));
|
dc.DrawLine(wxPoint(origin_px(0), origin_px(1)), wxPoint(y_end(0), y_end(1)));
|
||||||
for (auto angle : { -arrow_angle, arrow_angle }) {
|
for (auto angle : { -arrow_angle, arrow_angle }) {
|
||||||
@ -125,13 +125,13 @@ void Bed_2D::repaint()
|
|||||||
}
|
}
|
||||||
|
|
||||||
// draw origin
|
// draw origin
|
||||||
dc.SetPen(wxPen(wxColour(0, 0, 0), 1, wxSOLID));
|
dc.SetPen(wxPen(wxColour(0, 0, 0), 1, wxPENSTYLE_SOLID));
|
||||||
dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxSOLID));
|
dc.SetBrush(wxBrush(wxColour(0, 0, 0), wxBRUSHSTYLE_SOLID));
|
||||||
dc.DrawCircle(origin_px(0), origin_px(1), 3);
|
dc.DrawCircle(origin_px(0), origin_px(1), 3);
|
||||||
|
|
||||||
static const auto origin_label = wxString("(0,0)");
|
static const auto origin_label = wxString("(0,0)");
|
||||||
dc.SetTextForeground(wxColour(0, 0, 0));
|
dc.SetTextForeground(wxColour(0, 0, 0));
|
||||||
dc.SetFont(wxFont(10, wxDEFAULT, wxNORMAL, wxNORMAL));
|
dc.SetFont(wxFont(10, wxFONTFAMILY_DEFAULT, wxFONTSTYLE_NORMAL, wxFONTWEIGHT_NORMAL));
|
||||||
auto extent = dc.GetTextExtent(origin_label);
|
auto extent = dc.GetTextExtent(origin_label);
|
||||||
const auto origin_label_x = origin_px(0) <= cw / 2 ? origin_px(0) + 1 : origin_px(0) - 1 - extent.GetWidth();
|
const auto origin_label_x = origin_px(0) <= cw / 2 ? origin_px(0) + 1 : origin_px(0) - 1 - extent.GetWidth();
|
||||||
const auto origin_label_y = origin_px(1) <= ch / 2 ? origin_px(1) + 1 : origin_px(1) - 1 - extent.GetHeight();
|
const auto origin_label_y = origin_px(1) <= ch / 2 ? origin_px(1) + 1 : origin_px(1) - 1 - extent.GetHeight();
|
||||||
@ -140,8 +140,8 @@ void Bed_2D::repaint()
|
|||||||
// draw current position
|
// draw current position
|
||||||
if (m_pos!= Vec2d(0, 0)) {
|
if (m_pos!= Vec2d(0, 0)) {
|
||||||
auto pos_px = to_pixels(m_pos);
|
auto pos_px = to_pixels(m_pos);
|
||||||
dc.SetPen(wxPen(wxColour(200, 0, 0), 2, wxSOLID));
|
dc.SetPen(wxPen(wxColour(200, 0, 0), 2, wxPENSTYLE_SOLID));
|
||||||
dc.SetBrush(wxBrush(wxColour(200, 0, 0), wxTRANSPARENT));
|
dc.SetBrush(wxBrush(wxColour(200, 0, 0), wxBRUSHSTYLE_TRANSPARENT));
|
||||||
dc.DrawCircle(pos_px(0), pos_px(1), 5);
|
dc.DrawCircle(pos_px(0), pos_px(1), 5);
|
||||||
|
|
||||||
dc.DrawLine(pos_px(0) - 15, pos_px(1), pos_px(0) + 15, pos_px(1));
|
dc.DrawLine(pos_px(0) - 15, pos_px(1), pos_px(0) + 15, pos_px(1));
|
||||||
|
@ -28,6 +28,7 @@ public:
|
|||||||
Bed_2D(wxWindow* parent)
|
Bed_2D(wxWindow* parent)
|
||||||
{
|
{
|
||||||
Create(parent, wxID_ANY, wxDefaultPosition, wxSize(250, -1), wxTAB_TRAVERSAL);
|
Create(parent, wxID_ANY, wxDefaultPosition, wxSize(250, -1), wxTAB_TRAVERSAL);
|
||||||
|
SetBackgroundStyle(wxBG_STYLE_PAINT); // to avoid assert message after wxAutoBufferedPaintDC
|
||||||
// m_user_drawn_background = $^O ne 'darwin';
|
// m_user_drawn_background = $^O ne 'darwin';
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
m_user_drawn_background = false;
|
m_user_drawn_background = false;
|
||||||
|
@ -128,6 +128,7 @@ public:
|
|||||||
|
|
||||||
Field(const ConfigOptionDef& opt, const t_config_option_key& id) : m_opt(opt), m_opt_id(id) {};
|
Field(const ConfigOptionDef& opt, const t_config_option_key& id) : m_opt(opt), m_opt_id(id) {};
|
||||||
Field(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : m_parent(parent), m_opt(opt), m_opt_id(id) {};
|
Field(wxWindow* parent, const ConfigOptionDef& opt, const t_config_option_key& id) : m_parent(parent), m_opt(opt), m_opt_id(id) {};
|
||||||
|
virtual ~Field() {}
|
||||||
|
|
||||||
/// If you don't know what you are getting back, check both methods for nullptr.
|
/// If you don't know what you are getting back, check both methods for nullptr.
|
||||||
virtual wxSizer* getSizer() { return nullptr; }
|
virtual wxSizer* getSizer() { return nullptr; }
|
||||||
|
@ -1043,13 +1043,11 @@ GLCanvas3D::Mouse::Drag::Drag()
|
|||||||
|
|
||||||
GLCanvas3D::Mouse::Mouse()
|
GLCanvas3D::Mouse::Mouse()
|
||||||
: dragging(false)
|
: dragging(false)
|
||||||
|
, left_down(false)
|
||||||
, position(DBL_MAX, DBL_MAX)
|
, position(DBL_MAX, DBL_MAX)
|
||||||
#if ENABLE_GIZMOS_ON_TOP
|
#if ENABLE_GIZMOS_ON_TOP
|
||||||
, scene_position(DBL_MAX, DBL_MAX, DBL_MAX)
|
, scene_position(DBL_MAX, DBL_MAX, DBL_MAX)
|
||||||
#endif // ENABLE_GIZMOS_ON_TOP
|
#endif // ENABLE_GIZMOS_ON_TOP
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
, ignore_up_event(false)
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1467,7 +1465,7 @@ void GLCanvas3D::Selection::translate(const Vec3d& displacement)
|
|||||||
(*m_volumes)[i]->set_instance_offset(m_cache.volumes_data[i].get_instance_position() + displacement);
|
(*m_volumes)[i]->set_instance_offset(m_cache.volumes_data[i].get_instance_position() + displacement);
|
||||||
else if (m_mode == Volume)
|
else if (m_mode == Volume)
|
||||||
{
|
{
|
||||||
Vec3d local_displacement = m_cache.volumes_data[i].get_instance_rotation_matrix().inverse() * displacement;
|
Vec3d local_displacement = (m_cache.volumes_data[i].get_instance_rotation_matrix() * m_cache.volumes_data[i].get_instance_scale_matrix()).inverse() * displacement;
|
||||||
(*m_volumes)[i]->set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement);
|
(*m_volumes)[i]->set_volume_offset(m_cache.volumes_data[i].get_volume_position() + local_displacement);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
@ -2420,7 +2418,7 @@ void GLCanvas3D::Selection::_ensure_on_bed()
|
|||||||
}
|
}
|
||||||
#endif // ENABLE_ENSURE_ON_BED_WHILE_SCALING
|
#endif // ENABLE_ENSURE_ON_BED_WHILE_SCALING
|
||||||
|
|
||||||
const float GLCanvas3D::Gizmos::OverlayTexturesScale = 0.75f;
|
const float GLCanvas3D::Gizmos::OverlayTexturesScale = 1.0f;
|
||||||
const float GLCanvas3D::Gizmos::OverlayOffsetX = 10.0f * OverlayTexturesScale;
|
const float GLCanvas3D::Gizmos::OverlayOffsetX = 10.0f * OverlayTexturesScale;
|
||||||
const float GLCanvas3D::Gizmos::OverlayGapY = 5.0f * OverlayTexturesScale;
|
const float GLCanvas3D::Gizmos::OverlayGapY = 5.0f * OverlayTexturesScale;
|
||||||
|
|
||||||
@ -2691,18 +2689,6 @@ void GLCanvas3D::Gizmos::update(const Linef3& mouse_ray, bool shift_down, const
|
|||||||
curr->update(GLGizmoBase::UpdateData(mouse_ray, mouse_pos, shift_down));
|
curr->update(GLGizmoBase::UpdateData(mouse_ray, mouse_pos, shift_down));
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
void GLCanvas3D::Gizmos::process_double_click()
|
|
||||||
{
|
|
||||||
if (!m_enabled)
|
|
||||||
return;
|
|
||||||
|
|
||||||
GLGizmoBase* curr = _get_current();
|
|
||||||
if (curr != nullptr)
|
|
||||||
curr->process_double_click();
|
|
||||||
}
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
|
|
||||||
GLCanvas3D::Gizmos::EType GLCanvas3D::Gizmos::get_current_type() const
|
GLCanvas3D::Gizmos::EType GLCanvas3D::Gizmos::get_current_type() const
|
||||||
{
|
{
|
||||||
return m_current;
|
return m_current;
|
||||||
@ -2978,7 +2964,8 @@ float GLCanvas3D::Gizmos::_get_total_overlay_height() const
|
|||||||
{
|
{
|
||||||
if (it->first == SlaSupports && wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA)
|
if (it->first == SlaSupports && wxGetApp().preset_bundle->printers.get_edited_preset().printer_technology() != ptSLA)
|
||||||
continue;
|
continue;
|
||||||
height += (float)it->second->get_textures_size() + OverlayGapY;
|
|
||||||
|
height += (float)it->second->get_textures_size() * OverlayTexturesScale + OverlayGapY;
|
||||||
}
|
}
|
||||||
|
|
||||||
return height - OverlayGapY;
|
return height - OverlayGapY;
|
||||||
@ -4546,40 +4533,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
m_toolbar_action_running = true;
|
m_toolbar_action_running = true;
|
||||||
m_toolbar.do_action((unsigned int)toolbar_contains_mouse);
|
m_toolbar.do_action((unsigned int)toolbar_contains_mouse);
|
||||||
}
|
}
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
else if (evt.LeftDClick() && m_gizmos.grabber_contains_mouse())
|
|
||||||
{
|
|
||||||
m_mouse.ignore_up_event = true;
|
|
||||||
m_gizmos.process_double_click();
|
|
||||||
switch (m_gizmos.get_current_type())
|
|
||||||
{
|
|
||||||
case Gizmos::Scale:
|
|
||||||
{
|
|
||||||
m_selection.scale(m_gizmos.get_scale(), false);
|
|
||||||
do_scale();
|
|
||||||
wxGetApp().obj_manipul()->update_settings_value(m_selection);
|
|
||||||
m_dirty = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#if !ENABLE_WORLD_ROTATIONS
|
|
||||||
case Gizmos::Rotate:
|
|
||||||
{
|
|
||||||
m_selection.rotate(m_gizmos.get_rotation(), false);
|
|
||||||
do_rotate();
|
|
||||||
wxGetApp().obj_manipul()->update_settings_value(m_selection);
|
|
||||||
m_dirty = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
#endif // !ENABLE_WORLD_ROTATIONS
|
|
||||||
default:
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
else if (evt.LeftDown() || evt.RightDown())
|
else if (evt.LeftDown() || evt.RightDown())
|
||||||
{
|
{
|
||||||
|
m_mouse.left_down = evt.LeftDown();
|
||||||
|
|
||||||
// If user pressed left or right button we first check whether this happened
|
// If user pressed left or right button we first check whether this happened
|
||||||
// on a volume or not.
|
// on a volume or not.
|
||||||
m_layers_editing.state = LayersEditing::Unknown;
|
m_layers_editing.state = LayersEditing::Unknown;
|
||||||
@ -4610,9 +4567,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
if (evt.LeftDown())
|
if (evt.LeftDown())
|
||||||
{
|
{
|
||||||
m_gizmos.delete_current_grabber(true);
|
m_gizmos.delete_current_grabber(true);
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
m_mouse.ignore_up_event = true;
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -4646,6 +4600,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
{
|
{
|
||||||
m_toolbar_action_running = true;
|
m_toolbar_action_running = true;
|
||||||
m_toolbar.do_action((unsigned int)toolbar_contains_mouse);
|
m_toolbar.do_action((unsigned int)toolbar_contains_mouse);
|
||||||
|
m_mouse.left_down = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -4664,7 +4619,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
m_selection.remove(m_hover_volume_id);
|
m_selection.remove(m_hover_volume_id);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
bool add_as_single = !already_selected && !evt.ShiftDown();
|
bool add_as_single = !already_selected && !shift_down;
|
||||||
m_selection.add(m_hover_volume_id, add_as_single);
|
m_selection.add(m_hover_volume_id, add_as_single);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -4871,11 +4826,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
else if (evt.LeftUp() && !m_mouse.dragging && (m_hover_volume_id == -1) && !gizmos_overlay_contains_mouse && !m_gizmos.is_dragging() && !is_layers_editing_enabled())
|
else if (evt.LeftUp() && !m_mouse.dragging && (m_hover_volume_id == -1) && !gizmos_overlay_contains_mouse && !m_gizmos.is_dragging() && !is_layers_editing_enabled())
|
||||||
{
|
{
|
||||||
// deselect and propagate event through callback
|
// deselect and propagate event through callback
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
if (!m_mouse.ignore_up_event && m_picking_enabled && !m_toolbar_action_running)
|
|
||||||
#else
|
|
||||||
if (m_picking_enabled && !m_toolbar_action_running)
|
if (m_picking_enabled && !m_toolbar_action_running)
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
{
|
{
|
||||||
m_selection.clear();
|
m_selection.clear();
|
||||||
m_selection.set_mode(Selection::Instance);
|
m_selection.set_mode(Selection::Instance);
|
||||||
@ -4883,10 +4834,6 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
|
post_event(SimpleEvent(EVT_GLCANVAS_OBJECT_SELECT));
|
||||||
_update_gizmos_data();
|
_update_gizmos_data();
|
||||||
}
|
}
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
else if (m_mouse.ignore_up_event)
|
|
||||||
m_mouse.ignore_up_event = false;
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
}
|
}
|
||||||
else if (evt.LeftUp() && m_gizmos.is_dragging())
|
else if (evt.LeftUp() && m_gizmos.is_dragging())
|
||||||
{
|
{
|
||||||
@ -4930,6 +4877,7 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
|||||||
m_mouse.set_start_position_3D_as_invalid();
|
m_mouse.set_start_position_3D_as_invalid();
|
||||||
m_mouse.set_start_position_2D_as_invalid();
|
m_mouse.set_start_position_2D_as_invalid();
|
||||||
m_mouse.dragging = false;
|
m_mouse.dragging = false;
|
||||||
|
m_mouse.left_down = false;
|
||||||
m_toolbar_action_running = false;
|
m_toolbar_action_running = false;
|
||||||
m_dirty = true;
|
m_dirty = true;
|
||||||
|
|
||||||
@ -5612,7 +5560,7 @@ void GLCanvas3D::_picking_pass() const
|
|||||||
{
|
{
|
||||||
const Vec2d& pos = m_mouse.position;
|
const Vec2d& pos = m_mouse.position;
|
||||||
|
|
||||||
if (m_picking_enabled && !m_mouse.dragging && (pos != Vec2d(DBL_MAX, DBL_MAX)))
|
if (m_picking_enabled && !m_mouse.dragging && !m_mouse.left_down && (pos != Vec2d(DBL_MAX, DBL_MAX)))
|
||||||
{
|
{
|
||||||
// Render the object for picking.
|
// Render the object for picking.
|
||||||
// FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing.
|
// FIXME This cannot possibly work in a multi - sampled context as the color gets mangled by the anti - aliasing.
|
||||||
|
@ -323,14 +323,12 @@ class GLCanvas3D
|
|||||||
};
|
};
|
||||||
|
|
||||||
bool dragging;
|
bool dragging;
|
||||||
|
bool left_down;
|
||||||
Vec2d position;
|
Vec2d position;
|
||||||
#if ENABLE_GIZMOS_ON_TOP
|
#if ENABLE_GIZMOS_ON_TOP
|
||||||
Vec3d scene_position;
|
Vec3d scene_position;
|
||||||
#endif // ENABLE_GIZMOS_ON_TOP
|
#endif // ENABLE_GIZMOS_ON_TOP
|
||||||
Drag drag;
|
Drag drag;
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
bool ignore_up_event;
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
|
|
||||||
Mouse();
|
Mouse();
|
||||||
|
|
||||||
@ -519,6 +517,8 @@ public:
|
|||||||
const IndicesList& get_volume_idxs() const { return m_list; }
|
const IndicesList& get_volume_idxs() const { return m_list; }
|
||||||
const GLVolume* get_volume(unsigned int volume_idx) const;
|
const GLVolume* get_volume(unsigned int volume_idx) const;
|
||||||
|
|
||||||
|
const ObjectIdxsToInstanceIdxsMap& get_content() const { return m_cache.content; }
|
||||||
|
|
||||||
unsigned int volumes_count() const { return (unsigned int)m_list.size(); }
|
unsigned int volumes_count() const { return (unsigned int)m_list.size(); }
|
||||||
const BoundingBoxf3& get_bounding_box() const;
|
const BoundingBoxf3& get_bounding_box() const;
|
||||||
|
|
||||||
@ -629,9 +629,6 @@ private:
|
|||||||
bool overlay_contains_mouse(const GLCanvas3D& canvas, const Vec2d& mouse_pos) const;
|
bool overlay_contains_mouse(const GLCanvas3D& canvas, const Vec2d& mouse_pos) const;
|
||||||
bool grabber_contains_mouse() const;
|
bool grabber_contains_mouse() const;
|
||||||
void update(const Linef3& mouse_ray, bool shift_down, const Point* mouse_pos = nullptr);
|
void update(const Linef3& mouse_ray, bool shift_down, const Point* mouse_pos = nullptr);
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
void process_double_click();
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
Rect get_reset_rect_viewport(const GLCanvas3D& canvas) const;
|
Rect get_reset_rect_viewport(const GLCanvas3D& canvas) const;
|
||||||
EType get_current_type() const;
|
EType get_current_type() const;
|
||||||
|
|
||||||
|
@ -829,14 +829,6 @@ void GLGizmoScale3D::on_update(const UpdateData& data)
|
|||||||
do_scale_uniform(data);
|
do_scale_uniform(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
void GLGizmoScale3D::on_process_double_click()
|
|
||||||
{
|
|
||||||
if (m_hover_id >= 6)
|
|
||||||
m_scale = Vec3d::Ones();
|
|
||||||
}
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
|
|
||||||
void GLGizmoScale3D::on_render(const GLCanvas3D::Selection& selection) const
|
void GLGizmoScale3D::on_render(const GLCanvas3D::Selection& selection) const
|
||||||
{
|
{
|
||||||
bool single_instance = selection.is_single_full_instance();
|
bool single_instance = selection.is_single_full_instance();
|
||||||
@ -1352,7 +1344,7 @@ bool GLGizmoFlatten::on_init()
|
|||||||
|
|
||||||
std::string GLGizmoFlatten::on_get_name() const
|
std::string GLGizmoFlatten::on_get_name() const
|
||||||
{
|
{
|
||||||
return L("Flatten");
|
return L("Place on face");
|
||||||
}
|
}
|
||||||
|
|
||||||
bool GLGizmoFlatten::on_is_activable(const GLCanvas3D::Selection& selection) const
|
bool GLGizmoFlatten::on_is_activable(const GLCanvas3D::Selection& selection) const
|
||||||
|
@ -136,10 +136,6 @@ public:
|
|||||||
|
|
||||||
void update(const UpdateData& data);
|
void update(const UpdateData& data);
|
||||||
|
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
void process_double_click() { on_process_double_click(); }
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
|
|
||||||
void render(const GLCanvas3D::Selection& selection) const { on_render(selection); }
|
void render(const GLCanvas3D::Selection& selection) const { on_render(selection); }
|
||||||
void render_for_picking(const GLCanvas3D::Selection& selection) const { on_render_for_picking(selection); }
|
void render_for_picking(const GLCanvas3D::Selection& selection) const { on_render_for_picking(selection); }
|
||||||
|
|
||||||
@ -163,9 +159,6 @@ protected:
|
|||||||
virtual void on_start_dragging(const GLCanvas3D::Selection& selection) {}
|
virtual void on_start_dragging(const GLCanvas3D::Selection& selection) {}
|
||||||
virtual void on_stop_dragging() {}
|
virtual void on_stop_dragging() {}
|
||||||
virtual void on_update(const UpdateData& data) = 0;
|
virtual void on_update(const UpdateData& data) = 0;
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_process_double_click() {}
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_render(const GLCanvas3D::Selection& selection) const = 0;
|
virtual void on_render(const GLCanvas3D::Selection& selection) const = 0;
|
||||||
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const = 0;
|
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const = 0;
|
||||||
|
|
||||||
@ -225,11 +218,6 @@ protected:
|
|||||||
virtual std::string on_get_name() const { return ""; }
|
virtual std::string on_get_name() const { return ""; }
|
||||||
virtual void on_start_dragging(const GLCanvas3D::Selection& selection);
|
virtual void on_start_dragging(const GLCanvas3D::Selection& selection);
|
||||||
virtual void on_update(const UpdateData& data);
|
virtual void on_update(const UpdateData& data);
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
#if !ENABLE_WORLD_ROTATIONS
|
|
||||||
virtual void on_process_double_click() { m_angle = 0.0; }
|
|
||||||
#endif // !ENABLE_WORLD_ROTATIONS
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
||||||
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const;
|
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const;
|
||||||
|
|
||||||
@ -294,15 +282,6 @@ protected:
|
|||||||
g.update(data);
|
g.update(data);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
#if !ENABLE_WORLD_ROTATIONS
|
|
||||||
virtual void on_process_double_click()
|
|
||||||
{
|
|
||||||
if (m_hover_id != -1)
|
|
||||||
m_gizmos[m_hover_id].process_double_click();
|
|
||||||
}
|
|
||||||
#endif // !ENABLE_WORLD_ROTATIONS
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
||||||
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const
|
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const
|
||||||
{
|
{
|
||||||
@ -346,9 +325,6 @@ protected:
|
|||||||
virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const { return !selection.is_wipe_tower(); }
|
virtual bool on_is_activable(const GLCanvas3D::Selection& selection) const { return !selection.is_wipe_tower(); }
|
||||||
virtual void on_start_dragging(const GLCanvas3D::Selection& selection);
|
virtual void on_start_dragging(const GLCanvas3D::Selection& selection);
|
||||||
virtual void on_update(const UpdateData& data);
|
virtual void on_update(const UpdateData& data);
|
||||||
#if ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_process_double_click();
|
|
||||||
#endif // ENABLE_GIZMOS_RESET
|
|
||||||
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
virtual void on_render(const GLCanvas3D::Selection& selection) const;
|
||||||
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const;
|
virtual void on_render_for_picking(const GLCanvas3D::Selection& selection) const;
|
||||||
|
|
||||||
|
@ -1358,6 +1358,41 @@ void ObjectList::update_selections()
|
|||||||
sels.Add(m_objects_model->GetItemByInstanceId(selection.get_object_idx(), idx));
|
sels.Add(m_objects_model->GetItemByInstanceId(selection.get_object_idx(), idx));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
else if (selection.is_mixed())
|
||||||
|
{
|
||||||
|
auto& objects_content_list = selection.get_content();
|
||||||
|
|
||||||
|
for (auto idx : selection.get_volume_idxs()) {
|
||||||
|
const auto gl_vol = selection.get_volume(idx);
|
||||||
|
const auto& glv_obj_idx = gl_vol->object_idx();
|
||||||
|
const auto& glv_ins_idx = gl_vol->instance_idx();
|
||||||
|
|
||||||
|
bool is_selected = false;
|
||||||
|
|
||||||
|
for (auto obj_ins : objects_content_list) {
|
||||||
|
if (obj_ins.first == glv_obj_idx) {
|
||||||
|
if (obj_ins.second.find(glv_ins_idx) != obj_ins.second.end()) {
|
||||||
|
if (glv_ins_idx == 0 && (*m_objects)[glv_obj_idx]->instances.size() == 1)
|
||||||
|
sels.Add(m_objects_model->GetItemById(glv_obj_idx));
|
||||||
|
else
|
||||||
|
sels.Add(m_objects_model->GetItemByInstanceId(glv_obj_idx, glv_ins_idx));
|
||||||
|
|
||||||
|
is_selected = true;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (is_selected)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
const auto& glv_vol_idx = gl_vol->volume_idx();
|
||||||
|
if (glv_vol_idx == 0 && (*m_objects)[glv_obj_idx]->volumes.size() == 1)
|
||||||
|
sels.Add(m_objects_model->GetItemById(glv_obj_idx));
|
||||||
|
else
|
||||||
|
sels.Add(m_objects_model->GetItemByVolumeId(glv_obj_idx, glv_vol_idx));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
select_items(sels);
|
select_items(sels);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user