MCPcopy Create free account
hub / github.com/MITK/MITK / OnClick

Method OnClick

Modules/Segmentation/src/Interactions/mitkFillRegionBaseTool.cpp:94–157  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

92}
93
94void mitk::FillRegionBaseTool::OnClick(StateMachineAction*, InteractionEvent* interactionEvent)
95{
96 auto positionEvent = dynamic_cast<mitk::InteractionPositionEvent*>(interactionEvent);
97 if (nullptr == positionEvent)
98 return;
99
100 auto labelSetImage = this->GetWorkingData();
101 if (nullptr == labelSetImage)
102 {
103 return;
104 }
105
106 if (!IsPositionEventInsideImageRegion(positionEvent, labelSetImage))
107 {
108 return;
109 }
110
111 m_LastEventSender = positionEvent->GetSender();
112 m_LastEventSlice = m_LastEventSender->GetSlice();
113
114 auto workingSlice = this->GetAffectedWorkingSlice(positionEvent);
115
116 auto click = positionEvent->GetPositionInWorld();
117
118 m_SeedLabelValue = 0;
119 auto fillImage = this->GenerateFillImage(workingSlice, click, m_SeedLabelValue);
120
121 if (fillImage.IsNull())
122 {
123 return; //nothing to fill;
124 }
125
126 auto activeLabel = labelSetImage->GetActiveLabel();
127 if (labelSetImage->IsLabelLocked(m_SeedLabelValue) && (nullptr == activeLabel || m_SeedLabelValue != activeLabel->GetValue()))
128 {
129 ErrorMessage.Send("Label of selected region is locked. Tool operation has no effect.");
130 return;
131 }
132
133 this->PrepareFilling(workingSlice, click);
134
135 auto relevantLabelValues = labelSetImage->GetLabelValuesByGroup(labelSetImage->GetActiveLayer());
136
137 //as fill region tools should always allow to manipulate active label
138 //(that is what the user expects/knows when using tools so far:
139 //the active label can always be changed even if locked)
140 //we realize that by cloning the relevant label set and changing the lock state
141 //this fillLabelSet is used for the transfer.
142 auto activeLabelClone = labelSetImage->GetActiveLabel()->Clone();
143 if (nullptr != activeLabelClone)
144 {
145 activeLabelClone->SetLocked(false);
146 }
147
148 relevantLabelValues.erase(std::remove(relevantLabelValues.begin(), relevantLabelValues.end(), activeLabelClone->GetValue()));
149 auto relevantLabels = labelSetImage->GetConstLabelsByValue(relevantLabelValues);
150 relevantLabels.push_back(activeLabelClone);
151

Callers

nothing calls this directly

Calls 15

GenerateFillImageMethod · 0.95
GetSenderMethod · 0.80
GetPositionInWorldMethod · 0.80
GetActiveLabelMethod · 0.80
IsLabelLockedMethod · 0.80
GetLabelValuesByGroupMethod · 0.80
GetActiveLayerMethod · 0.80
SetLockedMethod · 0.80
GetConstLabelsByValueMethod · 0.80
GetWorkingDataMethod · 0.45

Tested by

no test coverage detected