123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/usr/bin/perl
- # This script exports experimental G-code for wireframe printing
- # (inspired by the brilliant WirePrint concept)
- use strict;
- use warnings;
- BEGIN {
- use FindBin;
- use lib "$FindBin::Bin/../lib";
- }
- use Getopt::Long qw(:config no_auto_abbrev);
- use PDF::API2;
- use Slic3r;
- use Slic3r::ExtrusionPath ':roles';
- use Slic3r::Geometry qw(scale unscale X Y);
- my %opt = (
- step_height => 10,
- );
- {
- my %options = (
- 'help' => sub { usage() },
- 'output|o=s' => \$opt{output_file},
- 'step-height|h=f' => \$opt{step_height},
- 'nozzle-angle|a=f' => \$opt{nozzle_angle},
- );
- GetOptions(%options) or usage(1);
- $opt{output_file} or usage(1);
- ### Input file is not needed until we use hard-coded geometry:
- ### $ARGV[0] or usage(1);
- }
- {
- my $flow = Slic3r::Flow->new(
- width => 0.35,
- height => 0.35,
- nozzle_diameter => 0.35,
- bridge => 1,
- );
-
- my $section;
-
- # build a square section
- {
- my $dist = 2 * $opt{step_height}; # horizontal step
- my $side_modules = 3;
- my @points = (
- [0,0],
- (map [$_*$dist, 0], 1..$side_modules),
- (map [$side_modules*$dist, $_*$dist], 1..$side_modules),
- (map [($_-1)*$dist, $side_modules*$dist], reverse 1..$side_modules),
- (map [0, ($_-1)*$dist], reverse 1..$side_modules),
- );
- pop @points; # prevent coinciding endpoints
- $section = Slic3r::Polygon->new_scale(@points);
- }
- my $section_loop = Slic3r::ExtrusionLoop->new_from_paths(
- Slic3r::ExtrusionPath->new(
- polyline => $section->split_at_first_point,
- role => EXTR_ROLE_BRIDGE,
- mm3_per_mm => $flow->mm3_per_mm,
- width => $flow->width,
- height => $flow->height,
- )
- );
-
- my $vertical_steps = 3;
-
- open my $fh, '>', $opt{output_file};
- my $gcodegen = Slic3r::GCode->new(
- enable_loop_clipping => 0, # better bonding
- );
- $gcodegen->set_extruders([0]);
- print $fh $gcodegen->set_extruder(0);
- print $fh $gcodegen->writer->preamble;
-
- foreach my $z (map $_*$opt{step_height}, 0..($vertical_steps-1)) {
- print $fh $gcodegen->writer->travel_to_z($z + $flow->height);
- print $fh $gcodegen->extrude_loop($section_loop, "contour");
- }
-
- close $fh;
- }
- sub usage {
- my ($exit_code) = @_;
-
- print <<"EOF";
- Usage: wireframe.pl [ OPTIONS ] file.stl
- --help Output this usage screen and exit
- --output, -o Write to the specified file
- --step-height, -h Use the specified step height
- --nozzle-angle, -a Max nozzle angle
-
- EOF
- exit ($exit_code || 0);
- }
- __END__
|