mirror of
https://git.mirrors.martin98.com/https://github.com/prusa3d/PrusaSlicer.git
synced 2025-07-31 23:01:57 +08:00
Fixed constrained scale of single instance selections
This commit is contained in:
parent
a0b4a79d19
commit
c2a6694df3
@ -756,7 +756,7 @@ void GLGizmoScale3D::do_scale_along_axis(Axis axis, const UpdateData& data)
|
|||||||
double ratio = calc_ratio(data);
|
double ratio = calc_ratio(data);
|
||||||
if (ratio > 0.0) {
|
if (ratio > 0.0) {
|
||||||
Vec3d curr_scale = m_scale;
|
Vec3d curr_scale = m_scale;
|
||||||
Vec3d starting_scale = m_starting.scale;
|
const Vec3d starting_scale = m_starting.scale;
|
||||||
const Selection& selection = m_parent.get_selection();
|
const Selection& selection = m_parent.get_selection();
|
||||||
const ECoordinatesType coordinates_type = wxGetApp().obj_manipul()->get_coordinates_type();
|
const ECoordinatesType coordinates_type = wxGetApp().obj_manipul()->get_coordinates_type();
|
||||||
|
|
||||||
@ -769,13 +769,6 @@ void GLGizmoScale3D::do_scale_along_axis(Axis axis, const UpdateData& data)
|
|||||||
if (m_hover_id == 2 * axis)
|
if (m_hover_id == 2 * axis)
|
||||||
local_offset *= -1.0;
|
local_offset *= -1.0;
|
||||||
|
|
||||||
Vec3d center_offset = m_starting.instance_center - m_starting.center; // world coordinates (== Vec3d::Zero() for single volume selection)
|
|
||||||
if (selection.is_single_full_instance() && coordinates_type == ECoordinatesType::Local)
|
|
||||||
// from world coordinates to instance coordinates
|
|
||||||
center_offset = selection.get_first_volume()->get_instance_transformation().get_rotation_matrix().inverse() * center_offset;
|
|
||||||
|
|
||||||
local_offset += (ratio - 1.0) * center_offset(axis);
|
|
||||||
|
|
||||||
switch (axis)
|
switch (axis)
|
||||||
{
|
{
|
||||||
case X: { m_offset = local_offset * Vec3d::UnitX(); break; }
|
case X: { m_offset = local_offset * Vec3d::UnitX(); break; }
|
||||||
@ -848,14 +841,6 @@ void GLGizmoScale3D::do_scale_uniform(const UpdateData & data)
|
|||||||
if (m_hover_id == 6 || m_hover_id == 7)
|
if (m_hover_id == 6 || m_hover_id == 7)
|
||||||
m_offset.y() *= -1.0;
|
m_offset.y() *= -1.0;
|
||||||
|
|
||||||
Vec3d center_offset = m_starting.instance_center - m_starting.center; // world coordinates (== Vec3d::Zero() for single volume selection)
|
|
||||||
|
|
||||||
if (selection.is_single_full_instance() && coordinates_type == ECoordinatesType::Local)
|
|
||||||
// from world coordinates to instance coordinates
|
|
||||||
center_offset = selection.get_first_volume()->get_instance_transformation().get_rotation_matrix().inverse() * center_offset;
|
|
||||||
|
|
||||||
m_offset += (ratio - 1.0) * center_offset;
|
|
||||||
|
|
||||||
if (selection.is_single_full_instance() && coordinates_type == ECoordinatesType::Local)
|
if (selection.is_single_full_instance() && coordinates_type == ECoordinatesType::Local)
|
||||||
// from instance coordinates to world coordinates
|
// from instance coordinates to world coordinates
|
||||||
m_offset = selection.get_first_volume()->get_instance_transformation().get_rotation_matrix() * m_offset;
|
m_offset = selection.get_first_volume()->get_instance_transformation().get_rotation_matrix() * m_offset;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user