#!/usr/bin/perl use strict; use warnings; use File::Temp qw/tempfile/; use Plack::Request; use Slic3r; # Usage: perl -Ilib utils/slic3r.psgi # Then point your browser at http:/// or use: # curl -o thing.gcode -F stlfile=@/path/to/thing.stl \ # http://127.0.0.1:5000/gcode use constant { CONFIG => $ENV{SLIC3R_CONFIG}, DEBUG => $ENV{SLIC3R_PSGI_DEBUG}, }; unless (caller) { require Plack::Runner; Plack::Runner->run(@ARGV, $0); } if (defined CONFIG) { Slic3r::Config->load(CONFIG); } else { print "Using defaults as environment variable SLIC3R_CONFIG is not set\n"; } Slic3r::Config->validate; my $form; { local $/; $form = }; my $app = sub { my $env = shift; my $req = Plack::Request->new($env); my $path_info = $req->path_info; if ($path_info =~ m!^/gcode!) { my $upload = $req->uploads->{'stlfile'}->path; rename $upload, $upload.'.stl'; $upload .= '.stl'; my $print = Slic3r::Print->new; $print->add_object_from_file($upload); if (0) { #$opt{merge}) { $print->add_object_from_file($_) for splice @ARGV, 0; } $print->duplicate; $print->arrange_objects if @{$print->objects} > 1; $print->validate; my ($fh, $filename) = tempfile(); $print->export_gcode(output_file => $filename, status_cb => sub { my ($percent, $message) = @_; printf "=> $message\n"; }); unlink $filename; return [ 200, ['Content-Type' => 'text/plain'], $fh ]; } else { return [ 200, ['Content-Type' => 'text/html'], [$form] ]; } }; __DATA__ Slic3r

Slic3r

Select an stl file: