1
package Slic3r::Print::Simple;
4
use Slic3r::Geometry qw(X Y);
8
default => sub { Slic3r::Print->new },
9
handles => [qw(apply_config extruders expanded_output_filepath
10
total_used_filament total_extruded_volume
29
has 'duplicate_grid' => (
31
default => sub { [1,1] },
36
default => sub { sub {} },
39
has 'output_file' => (
44
my ($self, $model) = @_;
46
# make method idempotent so that the object is reusable
47
$self->_print->clear_objects;
49
# make sure all objects have at least one defined instance
50
my $need_arrange = $model->add_default_instances;
52
# apply scaling and rotation supplied from command line if any
53
foreach my $instance (map @{$_->instances}, @{$model->objects}) {
54
$instance->set_scaling_factor($instance->scaling_factor * $self->scale);
55
$instance->set_rotation($instance->rotation + $self->rotate);
58
if ($self->duplicate_grid->[X] > 1 || $self->duplicate_grid->[Y] > 1) {
59
$model->duplicate_objects_grid($self->duplicate_grid, $self->_print->config->duplicate_distance);
60
} elsif ($need_arrange) {
61
$model->duplicate_objects($self->duplicate, $self->_print->config->min_object_distance);
62
} elsif ($self->duplicate > 1) {
63
# if all input objects have defined position(s) apply duplication to the whole model
64
$model->duplicate($self->duplicate, $self->_print->config->min_object_distance);
66
$model->center_instances_around_point($self->_print->config->print_center);
68
foreach my $model_object (@{$model->objects}) {
69
$self->_print->auto_assign_extruders($model_object);
70
$self->_print->add_model_object($model_object);
77
$self->_print->status_cb($self->status_cb);
78
$self->_print->validate;
84
$self->_print->status_cb(undef);
90
$self->_before_export;
92
$self->_print->process;
93
$self->_print->export_gcode(output_file => $self->output_file);
101
$self->_before_export;
103
$self->_print->export_svg(output_file => $self->output_file);
105
$self->_after_export;