Place on face improvement: respect different z-rotation of instances
This commit is contained in:
parent
0b1e716e22
commit
82b4a4fe11
2 changed files with 4 additions and 10 deletions
|
@ -823,10 +823,10 @@ void Selection::flattening_rotate(const Vec3d& normal)
|
||||||
}
|
}
|
||||||
|
|
||||||
#if !DISABLE_INSTANCES_SYNCH
|
#if !DISABLE_INSTANCES_SYNCH
|
||||||
// we want to synchronize z-rotation as well, otherwise the flattening behaves funny
|
// Apply the same transformation also to other instances,
|
||||||
// when applied on one of several identical instances
|
// but respect their possibly diffrent z-rotation.
|
||||||
if (m_mode == Instance)
|
if (m_mode == Instance)
|
||||||
synchronize_unselected_instances(SYNC_ROTATION_FULL);
|
synchronize_unselected_instances(SYNC_ROTATION_GENERAL);
|
||||||
#endif // !DISABLE_INSTANCES_SYNCH
|
#endif // !DISABLE_INSTANCES_SYNCH
|
||||||
|
|
||||||
this->set_bounding_boxes_dirty();
|
this->set_bounding_boxes_dirty();
|
||||||
|
@ -2055,10 +2055,6 @@ void Selection::synchronize_unselected_instances(SyncRotationType sync_rotation_
|
||||||
v->set_instance_offset(Z, volume->get_instance_offset().z());
|
v->set_instance_offset(Z, volume->get_instance_offset().z());
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case SYNC_ROTATION_FULL:
|
|
||||||
// rotation comes from place on face -> force given z
|
|
||||||
v->set_instance_rotation({ rotation.x(), rotation.y(), rotation.z() });
|
|
||||||
break;
|
|
||||||
case SYNC_ROTATION_GENERAL:
|
case SYNC_ROTATION_GENERAL:
|
||||||
// generic rotation -> update instance z with the delta of the rotation.
|
// generic rotation -> update instance z with the delta of the rotation.
|
||||||
const double z_diff = Geometry::rotation_diff_z(m_cache.volumes_data[i].get_instance_rotation(), m_cache.volumes_data[j].get_instance_rotation());
|
const double z_diff = Geometry::rotation_diff_z(m_cache.volumes_data[i].get_instance_rotation(), m_cache.volumes_data[j].get_instance_rotation());
|
||||||
|
|
|
@ -375,10 +375,8 @@ public:
|
||||||
enum SyncRotationType {
|
enum SyncRotationType {
|
||||||
// Do not synchronize rotation. Either not rotating at all, or rotating by world Z axis.
|
// Do not synchronize rotation. Either not rotating at all, or rotating by world Z axis.
|
||||||
SYNC_ROTATION_NONE = 0,
|
SYNC_ROTATION_NONE = 0,
|
||||||
// Synchronize fully. Used from "place on bed" feature.
|
|
||||||
SYNC_ROTATION_FULL = 1,
|
|
||||||
// Synchronize after rotation by an axis not parallel with Z.
|
// Synchronize after rotation by an axis not parallel with Z.
|
||||||
SYNC_ROTATION_GENERAL = 2,
|
SYNC_ROTATION_GENERAL = 1,
|
||||||
};
|
};
|
||||||
void synchronize_unselected_instances(SyncRotationType sync_rotation_type);
|
void synchronize_unselected_instances(SyncRotationType sync_rotation_type);
|
||||||
void synchronize_unselected_volumes();
|
void synchronize_unselected_volumes();
|
||||||
|
|
Loading…
Reference in a new issue