From 99e90f2bfb4ece8d2c275420ba4887480eb48dbc Mon Sep 17 00:00:00 2001
From: Enrico Turri <enricoturri@seznam.cz>
Date: Fri, 21 Sep 2018 12:46:20 +0200
Subject: [PATCH] Enhanced fix of #1229 - c++ part

---
 xs/src/slic3r/GUI/GUI_ObjectParts.cpp | 19 ++++++++++++-------
 1 file changed, 12 insertions(+), 7 deletions(-)

diff --git a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp b/xs/src/slic3r/GUI/GUI_ObjectParts.cpp
index ed3b69eab..1d61aadc1 100644
--- a/xs/src/slic3r/GUI/GUI_ObjectParts.cpp
+++ b/xs/src/slic3r/GUI/GUI_ObjectParts.cpp
@@ -1220,7 +1220,13 @@ void load_part(	ModelObject* model_object,
 		}
 
 		for ( auto object : model.objects) {
-			for (auto volume : object->volumes) {
+            Vec3d delta = Vec3d::Zero();
+            if (model_object->origin_translation != Vec3d::Zero())
+            {
+                object->center_around_origin();
+                delta = model_object->origin_translation - object->origin_translation;
+            }
+            for (auto volume : object->volumes) {
 				auto new_volume = model_object->add_volume(*volume);
 				new_volume->set_type(is_modifier ? ModelVolume::PARAMETER_MODIFIER : ModelVolume::MODEL_PART);
 				boost::filesystem::path(input_file).filename().string();
@@ -1228,12 +1234,11 @@ void load_part(	ModelObject* model_object,
 
 				part_names.Add(new_volume->name);
 
-				// apply the same translation we applied to the object
-				new_volume->mesh.translate( model_object->origin_translation(0),
-											model_object->origin_translation(1), 
-											model_object->origin_translation(2) );
-				// set a default extruder value, since user can't add it manually
-				new_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
+                if (delta != Vec3d::Zero())
+                    new_volume->mesh.translate((float)delta(0), (float)delta(1), (float)delta(2));
+
+                // set a default extruder value, since user can't add it manually
+                new_volume->config.set_key_value("extruder", new ConfigOptionInt(0));
 
 				m_parts_changed = true;
 			}