Fixed selection and rendering in object settings dialog
This commit is contained in:
parent
7b1187992c
commit
7b4870d1cb
3 changed files with 45 additions and 12 deletions
|
@ -156,10 +156,9 @@ sub new {
|
|||
#==============================================================================================================================
|
||||
Slic3r::GUI::_3DScene::enable_picking($canvas, 1);
|
||||
Slic3r::GUI::_3DScene::set_select_by($canvas, 'volume');
|
||||
Slic3r::GUI::_3DScene::register_on_select_callback($canvas, sub {
|
||||
Slic3r::GUI::_3DScene::register_on_select_object_callback($canvas, sub {
|
||||
my ($volume_idx) = @_;
|
||||
# convert scene volume to model object volume
|
||||
$self->reload_tree(($volume_idx == -1) ? undef : $canvas->volumes->[$volume_idx]->volume_idx);
|
||||
$self->reload_tree($volume_idx);
|
||||
});
|
||||
Slic3r::GUI::_3DScene::load_model_object($canvas, $self->{model_object}, 0, [0]);
|
||||
Slic3r::GUI::_3DScene::set_auto_bed_shape($canvas);
|
||||
|
|
|
@ -380,6 +380,16 @@ GLCanvas3D::Bed::Bed()
|
|||
{
|
||||
}
|
||||
|
||||
bool GLCanvas3D::Bed::is_prusa() const
|
||||
{
|
||||
return (m_type == MK2) || (m_type == MK3);
|
||||
}
|
||||
|
||||
bool GLCanvas3D::Bed::is_custom() const
|
||||
{
|
||||
return m_type == Custom;
|
||||
}
|
||||
|
||||
const Pointfs& GLCanvas3D::Bed::get_shape() const
|
||||
{
|
||||
return m_shape;
|
||||
|
@ -610,7 +620,7 @@ void GLCanvas3D::Bed::_render_custom() const
|
|||
if (triangles_vcount > 0)
|
||||
{
|
||||
::glEnable(GL_LIGHTING);
|
||||
::glEnable(GL_DEPTH_TEST);
|
||||
::glDisable(GL_DEPTH_TEST);
|
||||
|
||||
::glEnable(GL_BLEND);
|
||||
::glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
|
@ -625,6 +635,8 @@ void GLCanvas3D::Bed::_render_custom() const
|
|||
// draw grid
|
||||
unsigned int gridlines_vcount = m_gridlines.get_vertices_count();
|
||||
|
||||
// we need depth test for grid, otherwise it would disappear when looking the object from below
|
||||
::glEnable(GL_DEPTH_TEST);
|
||||
::glLineWidth(3.0f);
|
||||
::glColor4f(0.2f, 0.2f, 0.2f, 0.4f);
|
||||
::glVertexPointer(3, GL_FLOAT, 0, (GLvoid*)m_gridlines.get_vertices());
|
||||
|
@ -1595,11 +1607,24 @@ void GLCanvas3D::render()
|
|||
GLfloat position_top[4] = { -0.5f, -0.5f, 1.0f, 0.0f };
|
||||
::glLightfv(GL_LIGHT0, GL_POSITION, position_top);
|
||||
|
||||
float theta = m_camera.get_theta();
|
||||
bool is_custom_bed = m_bed.is_custom();
|
||||
|
||||
_picking_pass();
|
||||
_render_background();
|
||||
// untextured bed needs to be rendered before objects
|
||||
if (is_custom_bed)
|
||||
{
|
||||
_render_bed(theta);
|
||||
_render_axes();
|
||||
}
|
||||
_render_objects();
|
||||
_render_bed(m_camera.get_theta());
|
||||
_render_axes();
|
||||
// textured bed needs to be rendered after objects
|
||||
if (!is_custom_bed)
|
||||
{
|
||||
_render_bed(theta);
|
||||
_render_axes();
|
||||
}
|
||||
_render_cutting_plane();
|
||||
_render_warning_texture();
|
||||
_render_legend_texture();
|
||||
|
@ -2393,11 +2418,7 @@ void GLCanvas3D::on_mouse_wheel(wxMouseEvent& evt)
|
|||
// Don't allow to zoom too far outside the scene.
|
||||
float zoom_min = _get_zoom_to_bounding_box_factor(_max_bounding_box());
|
||||
if (zoom_min > 0.0f)
|
||||
{
|
||||
zoom_min *= 0.4f;
|
||||
if (zoom < zoom_min)
|
||||
zoom = zoom_min;
|
||||
}
|
||||
zoom = std::max(zoom, zoom_min * 0.8f);
|
||||
|
||||
m_camera.zoom = zoom;
|
||||
m_on_viewport_changed_callback.call();
|
||||
|
@ -3946,8 +3967,18 @@ void GLCanvas3D::_on_move(const std::vector<int>& volume_idxs)
|
|||
|
||||
void GLCanvas3D::_on_select(int volume_idx)
|
||||
{
|
||||
int id = -1;
|
||||
if ((m_volumes != nullptr) && (volume_idx < (int)m_volumes->volumes.size()))
|
||||
m_on_select_object_callback.call((volume_idx == -1) ? -1 : m_volumes->volumes[volume_idx]->object_idx());
|
||||
{
|
||||
if (volume_idx != -1)
|
||||
{
|
||||
if (m_select_by == "volume")
|
||||
id = m_volumes->volumes[volume_idx]->volume_idx();
|
||||
else if (m_select_by == "object")
|
||||
id = m_volumes->volumes[volume_idx]->object_idx();
|
||||
}
|
||||
}
|
||||
m_on_select_object_callback.call(id);
|
||||
}
|
||||
|
||||
std::vector<float> GLCanvas3D::_parse_colors(const std::vector<std::string>& colors)
|
||||
|
|
|
@ -189,6 +189,9 @@ public:
|
|||
public:
|
||||
Bed();
|
||||
|
||||
bool is_prusa() const;
|
||||
bool is_custom() const;
|
||||
|
||||
const Pointfs& get_shape() const;
|
||||
void set_shape(const Pointfs& shape);
|
||||
|
||||
|
|
Loading…
Reference in a new issue