Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/supermerill/SuperSlicer.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorEnrico Turri <enricoturri@seznam.cz>2018-09-24 16:54:09 +0300
committerEnrico Turri <enricoturri@seznam.cz>2018-09-24 16:54:09 +0300
commit0e1843a871ede5670c07727c64a042fb8c3ec0b5 (patch)
tree09d260233ab295b39e01295df2667e89622cf18f /lib
parente3d44b07fec13e1a9ead40bb954f48914cac6ad1 (diff)
1st installment of ModelInstance 3D scale components
Diffstat (limited to 'lib')
-rw-r--r--lib/Slic3r/GUI/Plater.pm51
-rw-r--r--lib/Slic3r/Model.pm2
2 files changed, 52 insertions, 1 deletions
diff --git a/lib/Slic3r/GUI/Plater.pm b/lib/Slic3r/GUI/Plater.pm
index 525cc7931..c7d4260d2 100644
--- a/lib/Slic3r/GUI/Plater.pm
+++ b/lib/Slic3r/GUI/Plater.pm
@@ -144,6 +144,40 @@ sub new {
$self->schedule_background_process;
};
+ # callback to react to gizmo scale
+ my $on_gizmo_scale_3D = sub {
+ my ($scale_x, $scale_y, $scale_z) = @_;
+
+ my ($obj_idx, $object) = $self->selected_object;
+ return if !defined $obj_idx;
+
+ my $model_object = $self->{model}->objects->[$obj_idx];
+ my $model_instance = $model_object->instances->[0];
+
+ $self->stop_background_process;
+
+ #FIXME Scale the layer height profile?
+# my $variation = $scale / $model_instance->scaling_factor;
+# foreach my $range (@{ $model_object->layer_height_ranges }) {
+# $range->[0] *= $variation;
+# $range->[1] *= $variation;
+# }
+
+ my $scale = Slic3r::Pointf3->new($scale_x, $scale_y, $scale_z);
+ foreach my $inst (@{ $model_object->instances }) {
+ $inst->set_scaling_factors($scale);
+ }
+ Slic3r::GUI::_3DScene::update_gizmos_data($self->{canvas3D}) if ($self->{canvas3D});
+
+ #update print and start background processing
+ $self->{print}->add_model_object($model_object, $obj_idx);
+
+ $self->selection_changed(1); # refresh info (size, volume etc.)
+ $self->update;
+ $self->schedule_background_process;
+
+ };
+
# callback to react to gizmo rotate
my $on_gizmo_rotate = sub {
my ($angle) = @_;
@@ -223,6 +257,21 @@ sub new {
}
};
+ # callback to update object's geometry info while using gizmos
+ my $on_update_geometry_3D_info = sub {
+ my ($size_x, $size_y, $size_z, $scale_x, $scale_y, $scale_z) = @_;
+
+ my ($obj_idx, $object) = $self->selected_object;
+
+ if ((defined $obj_idx) && ($self->{object_info_size})) { # have we already loaded the info pane?
+ $self->{object_info_size}->SetLabel(sprintf("%.2f x %.2f x %.2f", $size_x, $size_y, $size_z));
+ my $model_object = $self->{model}->objects->[$obj_idx];
+ if (my $stats = $model_object->mesh_stats) {
+ $self->{object_info_volume}->SetLabel(sprintf('%.2f', $stats->{volume} * $scale_x * $scale_y * $scale_z));
+ }
+ }
+ };
+
# callbacks for toolbar
my $on_action_add = sub {
$self->add;
@@ -312,11 +361,13 @@ sub new {
Slic3r::GUI::_3DScene::register_on_instance_moved_callback($self->{canvas3D}, $on_instances_moved);
Slic3r::GUI::_3DScene::register_on_enable_action_buttons_callback($self->{canvas3D}, $enable_action_buttons);
Slic3r::GUI::_3DScene::register_on_gizmo_scale_uniformly_callback($self->{canvas3D}, $on_gizmo_scale_uniformly);
+ Slic3r::GUI::_3DScene::register_on_gizmo_scale_3D_callback($self->{canvas3D}, $on_gizmo_scale_3D);
Slic3r::GUI::_3DScene::register_on_gizmo_rotate_callback($self->{canvas3D}, $on_gizmo_rotate);
Slic3r::GUI::_3DScene::register_on_gizmo_rotate_3D_callback($self->{canvas3D}, $on_gizmo_rotate_3D);
Slic3r::GUI::_3DScene::register_on_gizmo_flatten_callback($self->{canvas3D}, $on_gizmo_flatten);
Slic3r::GUI::_3DScene::register_on_gizmo_flatten_3D_callback($self->{canvas3D}, $on_gizmo_flatten_3D);
Slic3r::GUI::_3DScene::register_on_update_geometry_info_callback($self->{canvas3D}, $on_update_geometry_info);
+ Slic3r::GUI::_3DScene::register_on_update_geometry_3D_info_callback($self->{canvas3D}, $on_update_geometry_3D_info);
Slic3r::GUI::_3DScene::register_action_add_callback($self->{canvas3D}, $on_action_add);
Slic3r::GUI::_3DScene::register_action_delete_callback($self->{canvas3D}, $on_action_delete);
Slic3r::GUI::_3DScene::register_action_deleteall_callback($self->{canvas3D}, $on_action_deleteall);
diff --git a/lib/Slic3r/Model.pm b/lib/Slic3r/Model.pm
index 6ec3fc1bf..ec31f6c8a 100644
--- a/lib/Slic3r/Model.pm
+++ b/lib/Slic3r/Model.pm
@@ -124,7 +124,7 @@ sub add_instance {
$new_instance->set_rotations($args{rotation})
if defined $args{rotation};
- $new_instance->set_scaling_factor($args{scaling_factor})
+ $new_instance->set_scaling_factors($args{scaling_factor})
if defined $args{scaling_factor};
$new_instance->set_offset($args{offset})
if defined $args{offset};