Ported PrintObject::bounding_box() to XS

This commit is contained in:
Alessandro Ranellucci 2014-11-30 21:58:41 +01:00
parent 1fda9e3d50
commit c7f5753a28
4 changed files with 17 additions and 10 deletions

View File

@ -40,16 +40,6 @@ sub total_layer_count {
return $self->layer_count + $self->support_layer_count; return $self->layer_count + $self->support_layer_count;
} }
sub bounding_box {
my $self = shift;
# since the object is aligned to origin, bounding box coincides with size
return Slic3r::Geometry::BoundingBox->new_from_points([
Slic3r::Point->new(0,0),
map Slic3r::Point->new($_->x, $_->y), $self->size #))
]);
}
# this should be idempotent # this should be idempotent
sub slice { sub slice {
my $self = shift; my $self = shift;

View File

@ -5,6 +5,7 @@
#include <set> #include <set>
#include <vector> #include <vector>
#include <stdexcept> #include <stdexcept>
#include "BoundingBox.hpp"
#include "Flow.hpp" #include "Flow.hpp"
#include "PrintConfig.hpp" #include "PrintConfig.hpp"
#include "Point.hpp" #include "Point.hpp"
@ -108,6 +109,7 @@ class PrintObject
bool delete_all_copies(); bool delete_all_copies();
bool set_copies(const Points &points); bool set_copies(const Points &points);
bool reload_model_instances(); bool reload_model_instances();
void bounding_box(BoundingBox* bb) const;
// adds region_id, too, if necessary // adds region_id, too, if necessary
void add_region_volume(int region_id, int volume_id); void add_region_volume(int region_id, int volume_id);

View File

@ -111,6 +111,16 @@ PrintObject::reload_model_instances()
return this->set_copies(copies); return this->set_copies(copies);
} }
void
PrintObject::bounding_box(BoundingBox* bb) const
{
// since the object is aligned to origin, bounding box coincides with size
Points pp;
pp.push_back(Point(0,0));
pp.push_back(this->size);
*bb = BoundingBox(pp);
}
void void
PrintObject::add_region_volume(int region_id, int volume_id) PrintObject::add_region_volume(int region_id, int volume_id)
{ {

View File

@ -61,6 +61,11 @@ _constant()
%code%{ RETVAL = THIS->layer_height_ranges; %}; %code%{ RETVAL = THIS->layer_height_ranges; %};
Ref<Point3> size() Ref<Point3> size()
%code%{ RETVAL = &THIS->size; %}; %code%{ RETVAL = &THIS->size; %};
BoundingBox* bounding_box()
%code{%
RETVAL = new BoundingBox();
THIS->bounding_box(RETVAL);
%};
Ref<Point> _copies_shift() Ref<Point> _copies_shift()
%code%{ RETVAL = &THIS->_copies_shift; %}; %code%{ RETVAL = &THIS->_copies_shift; %};