From 19d18bdd84f5522314307d3272c59aa1436e7911 Mon Sep 17 00:00:00 2001 From: "Y. Sapir" Date: Sun, 25 May 2014 02:37:42 +0300 Subject: [PATCH] Attempt to solve conflict with a3bd1b5 by adding id to PrintObject and using that as a hash key. --- lib/Slic3r/GCode.pm | 7 ++++--- xs/src/Print.cpp | 14 +++++++++++--- xs/src/Print.hpp | 4 +++- xs/xsp/Print.xsp | 1 + 4 files changed, 19 insertions(+), 7 deletions(-) diff --git a/lib/Slic3r/GCode.pm b/lib/Slic3r/GCode.pm index 73a787d513..6fc6fd611b 100644 --- a/lib/Slic3r/GCode.pm +++ b/lib/Slic3r/GCode.pm @@ -168,10 +168,11 @@ sub extrude_loop { if ($self->config->seal_position eq 'nearest') { $loop->split_at_vertex($last_pos->nearest_point(\@candidates)); } elsif ($self->config->seal_position eq 'aligned') { - if (defined $self->layer && defined $self->_seal_position->{$self->layer->object}) { - $last_pos = $self->_seal_position->{$self->layer->object}; + my $object_id = $self->layer->object->id; + if (defined $self->layer && defined $self->_seal_position->{$object_id}) { + $last_pos = $self->_seal_position->{$object_id}; } - my $point = $self->_seal_position->{$self->layer->object} = $last_pos->nearest_point(\@candidates); + my $point = $self->_seal_position->{$object_id} = $last_pos->nearest_point(\@candidates); $loop->split_at_vertex($point); } } elsif ($self->config->seal_position eq 'random') { diff --git a/xs/src/Print.cpp b/xs/src/Print.cpp index 686d84e6cf..fef87387a2 100644 --- a/xs/src/Print.cpp +++ b/xs/src/Print.cpp @@ -73,9 +73,10 @@ REGISTER_CLASS(PrintRegion, "Print::Region"); #endif -PrintObject::PrintObject(Print* print, ModelObject* model_object, +PrintObject::PrintObject(Print* print, int id, ModelObject* model_object, const BoundingBoxf3 &modobj_bbox) : _print(print), + _id(id), _model_object(model_object) { region_volumes.resize(this->_print->regions.size()); @@ -109,6 +110,12 @@ PrintObject::print() return this->_print; } +int +PrintObject::id() +{ + return this->_id; +} + ModelObject* PrintObject::model_object() { @@ -239,7 +246,8 @@ PrintObject* Print::add_object(ModelObject *model_object, const BoundingBoxf3 &modobj_bbox) { - PrintObject *object = new PrintObject(this, model_object, modobj_bbox); + PrintObject *object = new PrintObject(this, + this->objects.size(), model_object, modobj_bbox); objects.push_back(object); return object; } @@ -253,7 +261,7 @@ Print::set_new_object(size_t idx, ModelObject *model_object, PrintObjectPtrs::iterator old_it = this->objects.begin() + idx; delete *old_it; - PrintObject *object = new PrintObject(this, model_object, modobj_bbox); + PrintObject *object = new PrintObject(this, idx, model_object, modobj_bbox); this->objects[idx] = object; return object; } diff --git a/xs/src/Print.hpp b/xs/src/Print.hpp index 8896ccd020..12dbc35c5a 100644 --- a/xs/src/Print.hpp +++ b/xs/src/Print.hpp @@ -90,6 +90,7 @@ class PrintObject Print* print(); + int id(); ModelObject* model_object(); // adds region_id, too, if necessary @@ -111,11 +112,12 @@ class PrintObject private: Print* _print; + int _id; ModelObject* _model_object; // TODO: call model_object->get_bounding_box() instead of accepting // parameter - PrintObject(Print* print, ModelObject* model_object, + PrintObject(Print* print, int id, ModelObject* model_object, const BoundingBoxf3 &modobj_bbox); virtual ~PrintObject(); }; diff --git a/xs/xsp/Print.xsp b/xs/xsp/Print.xsp index 7b694e7d0d..cb81321083 100644 --- a/xs/xsp/Print.xsp +++ b/xs/xsp/Print.xsp @@ -66,6 +66,7 @@ _constant() %code%{ RETVAL = THIS->print()->regions.size(); %}; Ref print(); + int id(); Ref model_object(); Ref config() %code%{ RETVAL = &THIS->config; %};