| 266 | } |
| 267 | |
| 268 | void mitk::MultiLabelSegmentation::RemoveGroup(GroupIndexType indexToDelete) |
| 269 | { |
| 270 | if (!this->ExistGroup(indexToDelete)) mitkThrow() << "Cannot remove group. Group does not exist. Invalid group index: "<<indexToDelete; |
| 271 | |
| 272 | auto relevantLabels = m_GroupToLabelMap[indexToDelete]; |
| 273 | |
| 274 | { |
| 275 | std::lock_guard<std::shared_mutex> guard(m_LabelNGroupMapsMutex); |
| 276 | // remove labels of group |
| 277 | for (auto labelValue : relevantLabels) |
| 278 | { |
| 279 | auto label = m_LabelMap[labelValue]; |
| 280 | this->ReleaseLabel(label); |
| 281 | m_LabelToGroupMap.erase(labelValue); |
| 282 | m_LabelMap.erase(labelValue); |
| 283 | this->InvokeEvent(LabelRemovedEvent(labelValue)); |
| 284 | } |
| 285 | |
| 286 | // remove the group entries in the maps and the image. |
| 287 | m_Groups.erase(m_Groups.begin() + indexToDelete); |
| 288 | m_GroupToLabelMap.erase(m_GroupToLabelMap.begin() + indexToDelete); |
| 289 | m_GroupContainer.erase(m_GroupContainer.begin() + indexToDelete); |
| 290 | |
| 291 | //update old indexes in m_LabelToGroupMap to new group indexes |
| 292 | for (auto& element : m_LabelToGroupMap) |
| 293 | { |
| 294 | if (element.second > indexToDelete) element.second = element.second - 1; |
| 295 | } |
| 296 | } |
| 297 | |
| 298 | |
| 299 | if (!this->ExistLabel(m_ActiveLabelValue)) |
| 300 | { |
| 301 | //the current active label was removed with the group. Set active label to the first defined label |
| 302 | if (!m_LabelMap.empty()) |
| 303 | { |
| 304 | m_ActiveLabelValue = m_LabelMap.begin()->first; |
| 305 | } |
| 306 | else |
| 307 | { |
| 308 | m_ActiveLabelValue = MultiLabelSegmentation::UNLABELED_VALUE; |
| 309 | } |
| 310 | } |
| 311 | |
| 312 | this->InvokeEvent(LabelsChangedEvent(relevantLabels)); |
| 313 | this->InvokeEvent(GroupRemovedEvent(indexToDelete)); |
| 314 | this->Modified(); |
| 315 | } |
| 316 | |
| 317 | mitk::MultiLabelSegmentation::LabelValueVectorType mitk::MultiLabelSegmentation::ExtractLabelValuesFromLabelVector(const LabelVectorType& labels) |
| 318 | { |