mirror of
https://github.com/SoftFever/OrcaSlicer.git
synced 2025-07-25 15:44:12 -06:00
Merge remote-tracking branch 'origin/convex_hull' into lm_lay_flat_round_merged_facets
This commit is contained in:
commit
72ba5c8ab4
4 changed files with 18 additions and 11 deletions
|
@ -1127,8 +1127,7 @@ sub changescale {
|
||||||
my $model_object = $self->{model}->objects->[$obj_idx];
|
my $model_object = $self->{model}->objects->[$obj_idx];
|
||||||
my $model_instance = $model_object->instances->[0];
|
my $model_instance = $model_object->instances->[0];
|
||||||
|
|
||||||
my $object_size = $model_object->bounding_box->size;
|
my $object_size = $model_object->instance_bounding_box(0)->size;
|
||||||
my $bed_size = Slic3r::Polygon->new_scale(@{$self->{config}->bed_shape})->bounding_box->size;
|
|
||||||
|
|
||||||
if (defined $axis) {
|
if (defined $axis) {
|
||||||
my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z';
|
my $axis_name = $axis == X ? 'X' : $axis == Y ? 'Y' : 'Z';
|
||||||
|
@ -1136,7 +1135,7 @@ sub changescale {
|
||||||
if ($tosize) {
|
if ($tosize) {
|
||||||
my $cursize = $object_size->[$axis];
|
my $cursize = $object_size->[$axis];
|
||||||
my $newsize = $self->_get_number_from_user(
|
my $newsize = $self->_get_number_from_user(
|
||||||
sprintf(L('Enter the new size for the selected object (print bed: %smm):'), unscale($bed_size->[$axis])),
|
L('Enter the new size for the selected object:'),
|
||||||
L("Scale along ").$axis_name, L('Invalid scaling value entered'), $cursize, 1);
|
L("Scale along ").$axis_name, L('Invalid scaling value entered'), $cursize, 1);
|
||||||
return if $newsize eq '';
|
return if $newsize eq '';
|
||||||
$scale = $newsize / $cursize * 100;
|
$scale = $newsize / $cursize * 100;
|
||||||
|
@ -1292,7 +1291,9 @@ sub async_apply_config {
|
||||||
|
|
||||||
# We also need to reload 3D scene because of the wipe tower preview box
|
# We also need to reload 3D scene because of the wipe tower preview box
|
||||||
if ($self->{config}->wipe_tower) {
|
if ($self->{config}->wipe_tower) {
|
||||||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D}
|
my $selections = $self->collect_selections;
|
||||||
|
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
||||||
|
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1) if $self->{canvas3D}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1508,6 +1509,8 @@ sub on_process_completed {
|
||||||
$self->{preview3D}->reload_print if $self->{preview3D};
|
$self->{preview3D}->reload_print if $self->{preview3D};
|
||||||
|
|
||||||
# in case this was MM print, wipe tower bounding box on 3D tab might need redrawing with exact depth:
|
# in case this was MM print, wipe tower bounding box on 3D tab might need redrawing with exact depth:
|
||||||
|
my $selections = $self->collect_selections;
|
||||||
|
Slic3r::GUI::_3DScene::set_objects_selections($self->{canvas3D}, \@$selections);
|
||||||
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1);
|
Slic3r::GUI::_3DScene::reload_scene($self->{canvas3D}, 1);
|
||||||
|
|
||||||
# if we have an export filename, start a new thread for exporting G-code
|
# if we have an export filename, start a new thread for exporting G-code
|
||||||
|
|
|
@ -204,6 +204,7 @@ GLVolume::GLVolume(float r, float g, float b, float a)
|
||||||
, m_scale_factor(1.0f)
|
, m_scale_factor(1.0f)
|
||||||
, m_transformed_bounding_box_dirty(true)
|
, m_transformed_bounding_box_dirty(true)
|
||||||
, m_transformed_convex_hull_bounding_box_dirty(true)
|
, m_transformed_convex_hull_bounding_box_dirty(true)
|
||||||
|
, m_convex_hull(nullptr)
|
||||||
, composite_id(-1)
|
, composite_id(-1)
|
||||||
, select_group_id(-1)
|
, select_group_id(-1)
|
||||||
, drag_group_id(-1)
|
, drag_group_id(-1)
|
||||||
|
@ -293,7 +294,7 @@ void GLVolume::set_scale_factor(float scale_factor)
|
||||||
|
|
||||||
void GLVolume::set_convex_hull(const TriangleMesh& convex_hull)
|
void GLVolume::set_convex_hull(const TriangleMesh& convex_hull)
|
||||||
{
|
{
|
||||||
m_convex_hull = convex_hull;
|
m_convex_hull = &convex_hull;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<float> GLVolume::world_matrix() const
|
std::vector<float> GLVolume::world_matrix() const
|
||||||
|
@ -322,8 +323,8 @@ BoundingBoxf3 GLVolume::transformed_convex_hull_bounding_box() const
|
||||||
{
|
{
|
||||||
if (m_transformed_convex_hull_bounding_box_dirty)
|
if (m_transformed_convex_hull_bounding_box_dirty)
|
||||||
{
|
{
|
||||||
if (m_convex_hull.stl.stats.number_of_facets > 0)
|
if ((m_convex_hull != nullptr) && (m_convex_hull->stl.stats.number_of_facets > 0))
|
||||||
m_transformed_convex_hull_bounding_box = m_convex_hull.transformed_bounding_box(world_matrix());
|
m_transformed_convex_hull_bounding_box = m_convex_hull->transformed_bounding_box(world_matrix());
|
||||||
else
|
else
|
||||||
m_transformed_convex_hull_bounding_box = bounding_box.transformed(world_matrix());
|
m_transformed_convex_hull_bounding_box = bounding_box.transformed(world_matrix());
|
||||||
|
|
||||||
|
@ -747,7 +748,6 @@ int GLVolumeCollection::load_wipe_tower_preview(
|
||||||
v.drag_group_id = obj_idx * 1000;
|
v.drag_group_id = obj_idx * 1000;
|
||||||
v.is_wipe_tower = true;
|
v.is_wipe_tower = true;
|
||||||
v.shader_outside_printer_detection_enabled = ! size_unknown;
|
v.shader_outside_printer_detection_enabled = ! size_unknown;
|
||||||
v.set_convex_hull(mesh.convex_hull_3d());
|
|
||||||
return int(this->volumes.size() - 1);
|
return int(this->volumes.size() - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -833,7 +833,7 @@ bool GLVolumeCollection::check_outside_state(const DynamicPrintConfig* config, M
|
||||||
|
|
||||||
for (GLVolume* volume : this->volumes)
|
for (GLVolume* volume : this->volumes)
|
||||||
{
|
{
|
||||||
if ((volume != nullptr) && !volume->is_modifier)
|
if ((volume != nullptr) && !volume->is_modifier && (!volume->is_wipe_tower || (volume->is_wipe_tower && volume->shader_outside_printer_detection_enabled)))
|
||||||
{
|
{
|
||||||
const BoundingBoxf3& bb = volume->transformed_convex_hull_bounding_box();
|
const BoundingBoxf3& bb = volume->transformed_convex_hull_bounding_box();
|
||||||
bool contained = print_volume.contains(bb);
|
bool contained = print_volume.contains(bb);
|
||||||
|
|
|
@ -264,8 +264,8 @@ private:
|
||||||
mutable BoundingBoxf3 m_transformed_bounding_box;
|
mutable BoundingBoxf3 m_transformed_bounding_box;
|
||||||
// Whether or not is needed to recalculate the transformed bounding box.
|
// Whether or not is needed to recalculate the transformed bounding box.
|
||||||
mutable bool m_transformed_bounding_box_dirty;
|
mutable bool m_transformed_bounding_box_dirty;
|
||||||
// Convex hull of the original mesh, if any.
|
// Pointer to convex hull of the original mesh, if any.
|
||||||
TriangleMesh m_convex_hull;
|
const TriangleMesh* m_convex_hull;
|
||||||
// Bounding box of this volume, in unscaled coordinates.
|
// Bounding box of this volume, in unscaled coordinates.
|
||||||
mutable BoundingBoxf3 m_transformed_convex_hull_bounding_box;
|
mutable BoundingBoxf3 m_transformed_convex_hull_bounding_box;
|
||||||
// Whether or not is needed to recalculate the transformed convex hull bounding box.
|
// Whether or not is needed to recalculate the transformed convex hull bounding box.
|
||||||
|
|
|
@ -3061,6 +3061,10 @@ void GLCanvas3D::on_mouse(wxMouseEvent& evt)
|
||||||
}
|
}
|
||||||
|
|
||||||
_on_move(volume_idxs);
|
_on_move(volume_idxs);
|
||||||
|
|
||||||
|
// force re-selection of the wipe tower, if needed
|
||||||
|
if ((volume_idxs.size() == 1) && m_volumes.volumes[volume_idxs[0]]->is_wipe_tower)
|
||||||
|
select_volume(volume_idxs[0]);
|
||||||
}
|
}
|
||||||
else if (!m_mouse.dragging && (m_hover_volume_id == -1) && !gizmos_overlay_contains_mouse && !m_gizmos.is_dragging() && !is_layers_editing_enabled())
|
else if (!m_mouse.dragging && (m_hover_volume_id == -1) && !gizmos_overlay_contains_mouse && !m_gizmos.is_dragging() && !is_layers_editing_enabled())
|
||||||
{
|
{
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue