Fixed crash when deleting sla support points

This commit is contained in:
Enrico Turri 2018-12-05 10:26:08 +01:00
parent c108cc9045
commit 6997f7f5b5
2 changed files with 22 additions and 5 deletions

View File

@ -1378,11 +1378,24 @@ bool GLCanvas3D::Selection::is_single_full_instance() const
if (m_type == SingleFullInstance) if (m_type == SingleFullInstance)
return true; return true;
int object_idx = m_valid ? get_object_idx() : -1; if (m_list.empty() || m_volumes->empty())
if ((0 <= object_idx) && (object_idx < (int)m_model->objects.size())) return false;
return m_model->objects[object_idx]->volumes.size() == m_list.size();
return false; int object_idx = m_valid ? get_object_idx() : -1;
if (object_idx == -1)
return false;
int instance_idx = (*m_volumes)[*m_list.begin()]->instance_idx();
std::set<int> volumes_idxs;
for (const GLVolume* v : *m_volumes)
{
int volume_idx = v->volume_idx();
if ((v->object_idx() == object_idx) && (v->instance_idx() == instance_idx) && (volume_idx >= 0))
volumes_idxs.insert(volume_idx);
}
return m_model->objects[object_idx]->volumes.size() == volumes_idxs.size();
} }
bool GLCanvas3D::Selection::is_from_single_object() const bool GLCanvas3D::Selection::is_from_single_object() const

View File

@ -1768,6 +1768,8 @@ void GLGizmoSlaSupports::set_sla_support_data(ModelObject* model_object, const G
m_starting_center = Vec3d::Zero(); m_starting_center = Vec3d::Zero();
m_old_model_object = m_model_object; m_old_model_object = m_model_object;
m_model_object = model_object; m_model_object = model_object;
if (selection.is_empty())
m_old_instance_id = -1;
if ((model_object != nullptr) && selection.is_from_single_instance()) if ((model_object != nullptr) && selection.is_from_single_instance())
{ {
@ -2048,8 +2050,10 @@ void GLGizmoSlaSupports::clicked_on_object(const Vec2d& mouse_position)
int instance_id = m_parent.get_selection().get_instance_idx(); int instance_id = m_parent.get_selection().get_instance_idx();
if (m_old_instance_id != instance_id) if (m_old_instance_id != instance_id)
{ {
bool something_selected = (m_old_instance_id != -1);
m_old_instance_id = instance_id; m_old_instance_id = instance_id;
return; if (something_selected)
return;
} }
if (instance_id == -1) if (instance_id == -1)
return; return;