Tech ENABLE_WORLD_COORDINATE - Fix of Selection::mirror()
This commit is contained in:
parent
e8e50b50f1
commit
a02fc6cb3e
3 changed files with 24 additions and 2 deletions
|
@ -1755,7 +1755,20 @@ std::vector<int> GLCanvas3D::load_object(const Model& model, int obj_idx)
|
||||||
|
|
||||||
void GLCanvas3D::mirror_selection(Axis axis)
|
void GLCanvas3D::mirror_selection(Axis axis)
|
||||||
{
|
{
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
TransformationType transformation_type;
|
||||||
|
if (wxGetApp().obj_manipul()->is_local_coordinates())
|
||||||
|
transformation_type.set_local();
|
||||||
|
else if (wxGetApp().obj_manipul()->is_instance_coordinates())
|
||||||
|
transformation_type.set_instance();
|
||||||
|
|
||||||
|
transformation_type.set_relative();
|
||||||
|
|
||||||
|
m_selection.setup_cache();
|
||||||
|
m_selection.mirror(axis, transformation_type);
|
||||||
|
#else
|
||||||
m_selection.mirror(axis);
|
m_selection.mirror(axis);
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
do_mirror(L("Mirror Object"));
|
do_mirror(L("Mirror Object"));
|
||||||
wxGetApp().obj_manipul()->set_dirty();
|
wxGetApp().obj_manipul()->set_dirty();
|
||||||
}
|
}
|
||||||
|
|
|
@ -1283,6 +1283,13 @@ void Selection::scale_to_fit_print_volume(const BuildVolume& volume)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if ENABLE_WORLD_COORDINATE
|
||||||
|
void Selection::mirror(Axis axis, TransformationType transformation_type)
|
||||||
|
{
|
||||||
|
const Vec3d mirror((axis == X) ? -1.0 : 1.0, (axis == Y) ? -1.0 : 1.0, (axis == Z) ? -1.0 : 1.0);
|
||||||
|
scale_and_translate(mirror, Vec3d::Zero(), transformation_type);
|
||||||
|
}
|
||||||
|
#else
|
||||||
void Selection::mirror(Axis axis)
|
void Selection::mirror(Axis axis)
|
||||||
{
|
{
|
||||||
if (!m_valid)
|
if (!m_valid)
|
||||||
|
@ -1305,6 +1312,7 @@ void Selection::mirror(Axis axis)
|
||||||
|
|
||||||
set_bounding_boxes_dirty();
|
set_bounding_boxes_dirty();
|
||||||
}
|
}
|
||||||
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
void Selection::scale_and_translate(const Vec3d& scale, const Vec3d& translation, TransformationType transformation_type)
|
void Selection::scale_and_translate(const Vec3d& scale, const Vec3d& translation, TransformationType transformation_type)
|
||||||
|
|
|
@ -300,7 +300,7 @@ public:
|
||||||
void set_deserialized(EMode mode, const std::vector<std::pair<size_t, size_t>> &volumes_and_instances);
|
void set_deserialized(EMode mode, const std::vector<std::pair<size_t, size_t>> &volumes_and_instances);
|
||||||
|
|
||||||
// Update the selection based on the new instance IDs.
|
// Update the selection based on the new instance IDs.
|
||||||
void instances_changed(const std::vector<size_t> &instance_ids_selected);
|
void instances_changed(const std::vector<size_t> &instance_ids_selected);
|
||||||
// Update the selection based on the map from old indices to new indices after m_volumes changed.
|
// Update the selection based on the map from old indices to new indices after m_volumes changed.
|
||||||
// If the current selection is by instance, this call may select newly added volumes, if they belong to already selected instances.
|
// If the current selection is by instance, this call may select newly added volumes, if they belong to already selected instances.
|
||||||
void volumes_changed(const std::vector<size_t> &map_volume_old_to_new);
|
void volumes_changed(const std::vector<size_t> &map_volume_old_to_new);
|
||||||
|
@ -402,11 +402,12 @@ public:
|
||||||
void flattening_rotate(const Vec3d& normal);
|
void flattening_rotate(const Vec3d& normal);
|
||||||
void scale(const Vec3d& scale, TransformationType transformation_type);
|
void scale(const Vec3d& scale, TransformationType transformation_type);
|
||||||
void scale_to_fit_print_volume(const BuildVolume& volume);
|
void scale_to_fit_print_volume(const BuildVolume& volume);
|
||||||
void mirror(Axis axis);
|
|
||||||
#if ENABLE_WORLD_COORDINATE
|
#if ENABLE_WORLD_COORDINATE
|
||||||
void scale_and_translate(const Vec3d& scale, const Vec3d& translation, TransformationType transformation_type);
|
void scale_and_translate(const Vec3d& scale, const Vec3d& translation, TransformationType transformation_type);
|
||||||
|
void mirror(Axis axis, TransformationType transformation_type);
|
||||||
void reset_skew();
|
void reset_skew();
|
||||||
#else
|
#else
|
||||||
|
void mirror(Axis axis);
|
||||||
void translate(unsigned int object_idx, const Vec3d& displacement);
|
void translate(unsigned int object_idx, const Vec3d& displacement);
|
||||||
#endif // ENABLE_WORLD_COORDINATE
|
#endif // ENABLE_WORLD_COORDINATE
|
||||||
void translate(unsigned int object_idx, unsigned int instance_idx, const Vec3d& displacement);
|
void translate(unsigned int object_idx, unsigned int instance_idx, const Vec3d& displacement);
|
||||||
|
|
Loading…
Reference in a new issue