+ Make sure to keep order of selected objects in getSelectionEx()

This commit is contained in:
wmayer 2013-11-12 11:38:52 +01:00
parent 782cae1d22
commit c020bab0fa

View File

@ -337,25 +337,9 @@ bool SelectionSingleton::hasSelection(const char* doc) const
return false;
}
//std::vector<SelectionObject> SelectionSingleton::getSelectionEx(const char* pDocName) const
//{
// return getSelectionEx(pDocName,App::DocumentObject::getClassTypeId());
//}
//
//std::vector<SelectionObject> SelectionSingleton::getSelectionEx(const char* pDocName,const char* typeName) const
//{
// // search the type
// Base::Type typeId;
// if(typeName)
// typeId = Base::Type::fromName(typeName);
// else
// typeId = App::DocumentObject::getClassTypeId();
// return getSelectionEx(pDocName,typeId);
//}
std::vector<SelectionObject> SelectionSingleton::getSelectionEx(const char* pDocName, Base::Type typeId) const
{
std::vector<SelectionObject> temp;
std::map<App::DocumentObject*,SelectionObject> SortMap;
// check the type
@ -398,8 +382,14 @@ std::vector<SelectionObject> SelectionSingleton::getSelectionEx(const char* pDoc
}
}
for (std::map<App::DocumentObject*,SelectionObject>::const_iterator It = SortMap.begin();It != SortMap.end();++It)
temp.push_back(It->second);
// The map looses the order thus we have to go again through the list and pick up the SelectionObject from the map
for (std::list<_SelObj>::const_iterator It = _SelList.begin();It != _SelList.end();++It) {
std::map<App::DocumentObject*,SelectionObject>::iterator Jt = SortMap.find(It->pObject);
if (Jt != SortMap.end()) {
temp.push_back(Jt->second);
SortMap.erase(Jt);
}
}
return temp;
}