PrusaSlicer-NonPlainar/xs/lib/Slic3r/XS.pm

323 lines
7.9 KiB
Perl
Raw Normal View History

2013-06-22 15:16:45 +00:00
package Slic3r::XS;
use warnings;
use strict;
our $VERSION = '0.01';
# We have to load these modules in order to have Wx.pm find the correct paths
# for wxWidgets dlls on MSW.
# We avoid loading these on OS X because Wx::Load() initializes a Wx App
# automatically and it steals focus even when we're not running Slic3r in GUI mode.
# TODO: only load these when compiling with GUI support
BEGIN {
if ($^O eq 'MSWin32') {
eval "use Wx";
# eval "use Wx::Html";
eval "use Wx::Print"; # because of some Wx bug, thread creation fails if we don't have this (looks like Wx::Printout is hard-coded in some thread cleanup code)
}
}
2013-09-09 21:09:56 +00:00
use Carp qw();
2013-06-22 15:16:45 +00:00
use XSLoader;
XSLoader::load(__PACKAGE__, $VERSION);
2013-07-16 15:13:01 +00:00
package Slic3r::Line;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-07-15 18:31:43 +00:00
package Slic3r::Point;
2013-07-06 13:26:32 +00:00
use overload
2013-07-16 15:13:01 +00:00
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-06-22 15:16:45 +00:00
package Slic3r::Point3;
use overload
'@{}' => sub { [ $_[0]->x, $_[0]->y, $_[0]->z ] }, #,
'fallback' => 1;
2015-01-15 17:49:07 +00:00
sub pp {
my ($self) = @_;
return [ @$self ];
}
2014-04-27 22:13:50 +00:00
package Slic3r::Pointf;
use overload
2014-08-02 22:20:55 +00:00
'@{}' => sub { $_[0]->arrayref },
2014-04-27 22:13:50 +00:00
'fallback' => 1;
2014-01-07 18:08:37 +00:00
package Slic3r::Pointf3;
use overload
'@{}' => sub { [ $_[0]->x, $_[0]->y, $_[0]->z ] }, #,
'fallback' => 1;
2015-01-15 17:49:07 +00:00
sub pp {
my ($self) = @_;
return [ @$self ];
}
package Slic3r::ExPolygon;
2013-07-06 14:33:49 +00:00
use overload
2013-07-16 15:13:01 +00:00
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-07-06 14:33:49 +00:00
package Slic3r::Polyline;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-08-29 22:06:10 +00:00
package Slic3r::Polyline::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::Polygon;
use overload
2013-07-16 15:13:01 +00:00
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::ExPolygon::Collection;
use overload
2013-07-16 15:13:01 +00:00
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-07-18 17:09:07 +00:00
package Slic3r::ExtrusionPath::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
sub new {
my ($class, @paths) = @_;
my $self = $class->_new;
$self->append(@paths);
return $self;
}
package Slic3r::ExtrusionLoop;
2013-07-15 14:21:09 +00:00
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
sub new_from_paths {
my ($class, @paths) = @_;
my $loop = $class->new;
$loop->append($_) for @paths;
return $loop;
}
package Slic3r::ExtrusionMultiPath;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::ExtrusionPath;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
sub new {
my ($class, %args) = @_;
return $class->_new(
2013-07-15 14:21:09 +00:00
$args{polyline}, # required
$args{role}, # required
$args{mm3_per_mm} // die("Missing required mm3_per_mm in ExtrusionPath constructor"),
$args{width} // -1,
$args{height} // -1,
);
}
sub clone {
my ($self, %args) = @_;
return __PACKAGE__->_new(
$args{polyline} // $self->polyline,
$args{role} // $self->role,
$args{mm3_per_mm} // $self->mm3_per_mm,
$args{width} // $self->width,
$args{height} // $self->height,
);
}
package Slic3r::ExtrusionSimulator;
sub new {
my ($class, %args) = @_;
return $class->_new();
}
package Slic3r::Filler;
sub fill_surface {
my ($self, $surface, %args) = @_;
$self->set_density($args{density}) if defined($args{density});
$self->set_dont_connect($args{dont_connect}) if defined($args{dont_connect});
$self->set_dont_adjust($args{dont_adjust}) if defined($args{dont_adjust});
$self->set_complete($args{complete}) if defined($args{complete});
return $self->_fill_surface($surface);
}
2014-01-05 12:16:13 +00:00
package Slic3r::Flow;
sub new {
my ($class, %args) = @_;
my $self = $class->_new(
@args{qw(width height nozzle_diameter)},
2014-01-05 12:16:13 +00:00
);
$self->set_bridge($args{bridge} // 0);
return $self;
}
sub new_from_width {
my ($class, %args) = @_;
return $class->_new_from_width(
@args{qw(role width nozzle_diameter layer_height bridge_flow_ratio)},
);
}
sub new_from_spacing {
my ($class, %args) = @_;
return $class->_new_from_spacing(
@args{qw(spacing nozzle_diameter layer_height bridge)},
);
}
2013-07-14 11:05:55 +00:00
package Slic3r::Surface;
sub new {
my ($class, %args) = @_;
# defensive programming: make sure no negative bridge_angle is supplied
die "Error: invalid negative bridge_angle\n"
if defined $args{bridge_angle} && $args{bridge_angle} < 0;
return $class->_new(
$args{expolygon} // (die "Missing required expolygon\n"),
$args{surface_type} // (die "Missing required surface_type\n"),
$args{thickness} // -1,
$args{thickness_layers} // 1,
$args{bridge_angle} // -1,
$args{extra_perimeters} // 0,
2013-07-14 11:05:55 +00:00
);
}
sub clone {
my ($self, %args) = @_;
return (ref $self)->_new(
delete $args{expolygon} // $self->expolygon,
2013-07-14 11:05:55 +00:00
delete $args{surface_type} // $self->surface_type,
delete $args{thickness} // $self->thickness,
delete $args{thickness_layers} // $self->thickness_layers,
delete $args{bridge_angle} // $self->bridge_angle,
delete $args{extra_perimeters} // $self->extra_perimeters,
);
}
2013-07-14 12:56:43 +00:00
package Slic3r::Surface::Collection;
use overload
2013-07-16 15:13:01 +00:00
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
2013-07-14 12:56:43 +00:00
sub new {
my ($class, @surfaces) = @_;
my $self = $class->_new;
$self->append($_) for @surfaces;
return $self;
}
package Slic3r::Print::SupportMaterial2;
sub new {
my ($class, %args) = @_;
return $class->_new(
$args{print_config}, # required
$args{object_config}, # required
$args{first_layer_flow}, # required
$args{flow}, # required
$args{interface_flow}, # required
$args{soluble_interface} // 0
);
}
package Slic3r::GUI::_3DScene::GLShader;
sub CLONE_SKIP { 1 }
package Slic3r::GUI::_3DScene::GLVolume::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
sub CLONE_SKIP { 1 }
package main;
for my $class (qw(
2014-11-15 21:41:22 +00:00
Slic3r::BridgeDetector
Slic3r::Config
Slic3r::Config::Full
Slic3r::Config::GCode
Slic3r::Config::Print
Slic3r::Config::PrintObject
Slic3r::Config::PrintRegion
2015-12-16 11:33:19 +00:00
Slic3r::Config::Static
Slic3r::ExPolygon
Slic3r::ExPolygon::Collection
Slic3r::Extruder
Slic3r::ExtrusionLoop
Slic3r::ExtrusionMultiPath
Slic3r::ExtrusionPath
Slic3r::ExtrusionPath::Collection
Slic3r::ExtrusionSimulator
Slic3r::Filler
Slic3r::Flow
2015-07-01 19:47:17 +00:00
Slic3r::GCode
Slic3r::GCode::AvoidCrossingPerimeters
Slic3r::GCode::OozePrevention
Slic3r::GCode::PlaceholderParser
Slic3r::GCode::Wipe
2015-07-01 19:47:17 +00:00
Slic3r::GCode::Writer
Slic3r::Geometry::BoundingBox
Slic3r::Geometry::BoundingBoxf
Slic3r::Geometry::BoundingBoxf3
Slic3r::GUI::_3DScene::GLVolume
Slic3r::Layer
Slic3r::Layer::Region
Slic3r::Layer::Support
Slic3r::Line
2014-12-16 00:12:37 +00:00
Slic3r::Linef3
Slic3r::Model
Slic3r::Model::Instance
Slic3r::Model::Material
Slic3r::Model::Object
Slic3r::Model::Volume
Slic3r::Point
Slic3r::Point3
Slic3r::Pointf
Slic3r::Pointf3
Slic3r::Polygon
Slic3r::Polyline
Slic3r::Polyline::Collection
Slic3r::Print
Slic3r::Print::Object
Slic3r::Print::Region
Slic3r::Print::State
Slic3r::Surface
Slic3r::Surface::Collection
Slic3r::Print::SupportMaterial2
Slic3r::TriangleMesh
))
{
no strict 'refs';
my $ref_class = $class . "::Ref";
eval "package $ref_class; our \@ISA = '$class'; sub DESTROY {};";
}
2013-06-22 15:16:45 +00:00
1;