Keeps objects on bed while scaling them using the scale gizmo

This commit is contained in:
Enrico Turri 2018-11-16 11:30:36 +01:00
parent 4de0f574fb
commit d45739fa15
3 changed files with 22 additions and 0 deletions

View file

@ -1639,6 +1639,10 @@ void GLCanvas3D::Selection::scale(const Vec3d& scale)
_synchronize_unselected_volumes();
#endif // !DISABLE_INSTANCES_SYNCH
#if ENABLE_ENSURE_ON_BED_WHILE_SCALING
_ensure_on_bed();
#endif // ENABLE_ENSURE_ON_BED_WHILE_SCALING
m_bounding_box_dirty = true;
}
@ -2302,6 +2306,19 @@ void GLCanvas3D::Selection::_synchronize_unselected_volumes()
}
}
#if ENABLE_ENSURE_ON_BED_WHILE_SCALING
void GLCanvas3D::Selection::_ensure_on_bed()
{
for (unsigned int i : m_list)
{
GLVolume* volume = (*m_volumes)[i];
double min_z = volume->transformed_convex_hull_bounding_box().min(2);
if (min_z != 0.0)
volume->set_instance_offset(Z, volume->get_instance_offset(Z) - min_z);
}
}
#endif // ENABLE_ENSURE_ON_BED_WHILE_SCALING
const float GLCanvas3D::Gizmos::OverlayTexturesScale = 0.75f;
const float GLCanvas3D::Gizmos::OverlayOffsetX = 10.0f * OverlayTexturesScale;
const float GLCanvas3D::Gizmos::OverlayGapY = 5.0f * OverlayTexturesScale;