package Slic3r::Point; use Moo; has 'x' => ( is => 'ro', required => 1, #coerce => sub { sprintf '%.0f', $_[0] }, ); has 'y' => ( is => 'ro', required => 1, #coerce => sub { sprintf '%.0f', $_[0] }, ); sub cast { my $class = shift; my ($point) = @_; return ref $point eq 'ARRAY' ? Slic3r::Point->new(x => $point->[0], y => $point->[1]) # == : $point; } sub id { my $self = shift; return $self->x . "," . $self->y; #;; } sub coordinates { my $self = shift; return ($self->x, $self->y); #)) } sub p { my $self = shift; return [ $self->coordinates ]; } sub coincides_with { my $self = shift; my ($point) = @_; return Slic3r::Geometry::points_coincide($self->p, $point->p); } sub distance_to { my $self = shift; my ($point) = @_; return Slic3r::Geometry::distance_between_points($self->p, $point->p); } 1;