Translate Model class' storage to C++.

Some code copied from xs-model branch.

Also:
* Generate ::Ref classes programatically.
* Add separate __REGISTER_CLASS macro
    (for use where forward declaration won't work, i.e. typedefs)
This commit is contained in:
Y. Sapir 2014-04-30 02:04:49 +03:00
parent c72dc13d7e
commit 05b2993769
20 changed files with 1048 additions and 218 deletions

View file

@ -13,31 +13,16 @@ use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::Line::Ref;
our @ISA = 'Slic3r::Line';
sub DESTROY {}
package Slic3r::Point;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::Point::Ref;
our @ISA = 'Slic3r::Point';
sub DESTROY {}
package Slic3r::Pointf;
use overload
'@{}' => sub { [ $_[0]->x, $_[0]->y ] }, #,
'fallback' => 1;
package Slic3r::Pointf::Ref;
our @ISA = 'Slic3r::Pointf';
sub DESTROY {}
package Slic3r::Pointf3;
use overload
'@{}' => sub { [ $_[0]->x, $_[0]->y, $_[0]->z ] }, #,
@ -48,21 +33,11 @@ use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::ExPolygon::Ref;
our @ISA = 'Slic3r::ExPolygon';
sub DESTROY {}
package Slic3r::Polyline;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::Polyline::Ref;
our @ISA = 'Slic3r::Polyline';
sub DESTROY {}
package Slic3r::Polyline::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
@ -73,11 +48,6 @@ use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::Polygon::Ref;
our @ISA = 'Slic3r::Polygon';
sub DESTROY {}
package Slic3r::ExPolygon::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
@ -96,11 +66,6 @@ sub new {
return $self;
}
package Slic3r::ExtrusionPath::Collection::Ref;
our @ISA = 'Slic3r::ExtrusionPath::Collection';
sub DESTROY {}
package Slic3r::ExtrusionLoop;
use overload
'@{}' => sub { $_[0]->arrayref },
@ -130,11 +95,6 @@ sub clone {
);
}
package Slic3r::ExtrusionLoop::Ref;
our @ISA = 'Slic3r::ExtrusionLoop';
sub DESTROY {}
package Slic3r::ExtrusionPath;
use overload
'@{}' => sub { $_[0]->arrayref },
@ -164,11 +124,6 @@ sub clone {
);
}
package Slic3r::ExtrusionPath::Ref;
our @ISA = 'Slic3r::ExtrusionPath';
sub DESTROY {}
package Slic3r::Flow;
sub new {
@ -229,14 +184,53 @@ sub clone {
);
}
package Slic3r::Surface::Ref;
our @ISA = 'Slic3r::Surface';
sub DESTROY {}
package Slic3r::Surface::Collection;
use overload
'@{}' => sub { $_[0]->arrayref },
'fallback' => 1;
package Slic3r::StringMap;
sub to_hash {
my $self = shift;
my %tiehash;
tie %tiehash, 'Slic3r::StringMap', $self;
return \%tiehash;
}
sub TIEHASH {
my ($class, $self) = @_;
return $self;
}
package main;
for my $class (qw(
Slic3r::Config
Slic3r::Config::Print
Slic3r::ExPolygon
Slic3r::ExtrusionLoop
Slic3r::ExtrusionPath
Slic3r::ExtrusionPath::Collection
Slic3r::Geometry::BoundingBoxf3
Slic3r::Line
Slic3r::Model
Slic3r::Model::Instance
Slic3r::Model::Material
Slic3r::Model::Object
Slic3r::Model::Volume
Slic3r::Point
Slic3r::Pointf
Slic3r::Pointf3
Slic3r::Polygon
Slic3r::Polyline
Slic3r::StringMap
Slic3r::Surface
Slic3r::TriangleMesh
))
{
no strict 'refs';
my $ref_class = $class . "::Ref";
eval "package $ref_class; our \@ISA = '$class'; sub DESTROY {};";
}
1;