diff --git a/Engine/source/gui/worldEditor/worldEditor.cpp b/Engine/source/gui/worldEditor/worldEditor.cpp index d052d5698..1e4a795ce 100644 --- a/Engine/source/gui/worldEditor/worldEditor.cpp +++ b/Engine/source/gui/worldEditor/worldEditor.cpp @@ -3779,12 +3779,28 @@ void WorldEditor::makeSelectionPrefab( const char *filename, bool dontReplaceOri // Transform from World to Prefab space. MatrixF fabMat(true); fabMat.setPosition( mSelected->getCentroid() ); - fabMat.inverse(); MatrixF objMat; SimObject *obj = NULL; SceneObject *sObj = NULL; + F32 maxLen = 0; + for (S32 i = 0; i < found.size(); i++) + { + obj = found[i]; + sObj = dynamic_cast(obj); + if (sObj && !(sObj->isGlobalBounds())) + { + if (maxLen < sObj->getWorldBox().len_max()) + { + maxLen = sObj->getWorldBox().len_max(); + fabMat.setPosition(sObj->getPosition()); + } + } + } + fabMat.inverse(); + + for ( S32 i = 0; i < found.size(); i++ ) { obj = found[i]; @@ -3978,22 +3994,23 @@ bool WorldEditor::makeSelectionAMesh(const char *filename) } else { - orientation.identity(); - centroid.zero(); - - S32 count = 0; - - for (S32 i = 0; i < objectList.size(); i++) + SimObject* obj = NULL; + SceneObject* sObj = NULL; + F32 maxLen = 0; + for (S32 i = 0; i < found.size(); i++) { - SceneObject *pObj = objectList[i]; - if (pObj->isGlobalBounds()) - continue; - - centroid += pObj->getPosition(); - count++; + obj = found[i]; + sObj = dynamic_cast(obj); + if (sObj && !(sObj->isGlobalBounds())) + { + if (maxLen < sObj->getWorldBox().len_max()) + { + maxLen = sObj->getWorldBox().len_max(); + orientation = sObj->getTransform(); + centroid = sObj->getPosition(); + } + } } - - centroid /= count; } orientation.setPosition(centroid);