diff --git a/src/slic3r/GUI/Selection.cpp b/src/slic3r/GUI/Selection.cpp index bc7227fa3b..263477f20e 100644 --- a/src/slic3r/GUI/Selection.cpp +++ b/src/slic3r/GUI/Selection.cpp @@ -32,19 +32,6 @@ static const Slic3r::ColorRGBA TRANSPARENT_PLANE_COLOR = { 0.8f, 0.8f, 0.8f, 0.5 namespace Slic3r { namespace GUI { -Selection::VolumeCache::TransformCache::TransformCache(const Geometry::Transformation& transform) - : position(transform.get_offset()) - , rotation(transform.get_rotation()) - , scaling_factor(transform.get_scaling_factor()) - , mirror(transform.get_mirror()) - , full_matrix(transform.get_matrix()) - , transform(transform) - , rotation_matrix(transform.get_rotation_matrix()) - , scale_matrix(transform.get_scaling_factor_matrix()) - , mirror_matrix(transform.get_mirror_matrix()) -{ -} - Selection::VolumeCache::VolumeCache(const Geometry::Transformation& volume_transform, const Geometry::Transformation& instance_transform) : m_volume(volume_transform) , m_instance(instance_transform) @@ -953,7 +940,7 @@ void Selection::translate(const Vec3d& displacement, TransformationType transfor else { Vec3d relative_disp = displacement; if (transformation_type.world() && transformation_type.instance()) - relative_disp = volume_data.get_instance_scale_matrix().inverse() * relative_disp; + relative_disp = volume_data.get_instance_transform().get_scaling_factor_matrix().inverse() * relative_disp; transform_volume_relative(v, volume_data, transformation_type, Geometry::translation_transform(relative_disp), m_cache.dragging_center); } diff --git a/src/slic3r/GUI/Selection.hpp b/src/slic3r/GUI/Selection.hpp index 5a6fcb5e04..1e7bf113e2 100644 --- a/src/slic3r/GUI/Selection.hpp +++ b/src/slic3r/GUI/Selection.hpp @@ -57,46 +57,15 @@ public: private: struct VolumeCache { - private: - struct TransformCache - { - Vec3d position{ Vec3d::Zero() }; - Vec3d rotation{ Vec3d::Zero() }; - Vec3d scaling_factor{ Vec3d::Ones() }; - Vec3d mirror{ Vec3d::Ones() }; - Transform3d rotation_matrix{ Transform3d::Identity() }; - Transform3d scale_matrix{ Transform3d::Identity() }; - Transform3d mirror_matrix{ Transform3d::Identity() }; - Transform3d full_matrix{ Transform3d::Identity() }; - Geometry::Transformation transform; - - TransformCache() = default; - explicit TransformCache(const Geometry::Transformation& transform); - }; - - TransformCache m_volume; - TransformCache m_instance; - - public: VolumeCache() = default; VolumeCache(const Geometry::Transformation& volume_transform, const Geometry::Transformation& instance_transform); - const Vec3d& get_volume_position() const { return m_volume.position; } - const Transform3d& get_volume_rotation_matrix() const { return m_volume.rotation_matrix; } - const Transform3d& get_volume_scale_matrix() const { return m_volume.scale_matrix; } - const Transform3d& get_volume_mirror_matrix() const { return m_volume.mirror_matrix; } - const Transform3d& get_volume_full_matrix() const { return m_volume.full_matrix; } - const Geometry::Transformation& get_volume_transform() const { return m_volume.transform; } + const Geometry::Transformation& get_volume_transform() const { return m_volume; } + const Geometry::Transformation& get_instance_transform() const { return m_instance; } - const Vec3d& get_instance_position() const { return m_instance.position; } - const Vec3d& get_instance_rotation() const { return m_instance.rotation; } - const Vec3d& get_instance_scaling_factor() const { return m_instance.scaling_factor; } - const Vec3d& get_instance_mirror() const { return m_instance.mirror; } - const Transform3d& get_instance_rotation_matrix() const { return m_instance.rotation_matrix; } - const Transform3d& get_instance_scale_matrix() const { return m_instance.scale_matrix; } - const Transform3d& get_instance_mirror_matrix() const { return m_instance.mirror_matrix; } - const Transform3d& get_instance_full_matrix() const { return m_instance.full_matrix; } - const Geometry::Transformation& get_instance_transform() const { return m_instance.transform; } + private: + Geometry::Transformation m_volume; + Geometry::Transformation m_instance; }; public: