MCPcopy Create free account
hub / github.com/PDAL/PDAL / run

Method run

filters/PMFFilter.cpp:151–217  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

149}
150
151PointViewSet PMFFilter::run(PointViewPtr input)
152{
153 PointViewSet viewSet{input};
154 // Segment input view into ignored/kept views.
155 PointViewPtr ignoredView = input->makeNew();
156 PointViewPtr keptView = input->makeNew();
157
158 if (m_args->m_ignored.empty())
159 keptView->append(*input);
160 else
161 Segmentation::ignoreDimRanges(m_args->m_ignored, input, keptView,
162 ignoredView);
163
164 // Check for 0's in ReturnNumber and NumberOfReturns
165 bool nrOneZero(false);
166 bool rnOneZero(false);
167 bool nrAllZero(true);
168 bool rnAllZero(true);
169 for (PointRef p : *keptView)
170 {
171 uint8_t nr = p.getFieldAs<uint8_t>(Id::NumberOfReturns);
172 uint8_t rn = p.getFieldAs<uint8_t>(Id::ReturnNumber);
173 if ((nr == 0) && !nrOneZero)
174 nrOneZero = true;
175 if ((rn == 0) && !rnOneZero)
176 rnOneZero = true;
177 if (nr != 0)
178 nrAllZero = false;
179 if (rn != 0)
180 rnAllZero = false;
181 }
182
183 if ((nrOneZero || rnOneZero) && !(nrAllZero && rnAllZero))
184 throwError("Some NumberOfReturns or ReturnNumber values were 0, but "
185 "not all. Check that all values in the input file are >= "
186 "1.");
187
188 // Segment kept view into two views
189 PointViewPtr inlierView = keptView->makeNew();
190 PointViewPtr outlierView = keptView->makeNew();
191 if (nrAllZero && rnAllZero)
192 {
193 log()->get(LogLevel::Warning)
194 << "Both NumberOfReturns and ReturnNumber are filled with 0's. "
195 "Proceeding without any further return filtering.\n";
196 inlierView->append(*keptView);
197 }
198 else
199 {
200 Segmentation::segmentReturns(keptView, inlierView, outlierView,
201 m_args->m_returns);
202 }
203
204 if (!inlierView->size())
205 throwError("No returns to process.");
206
207 if (!m_onlyGround)
208 {

Callers

nothing calls this directly

Calls 8

ignoreDimRangesFunction · 0.85
segmentReturnsFunction · 0.85
logFunction · 0.50
emptyMethod · 0.45
appendMethod · 0.45
getMethod · 0.45
sizeMethod · 0.45
setFieldMethod · 0.45

Tested by

no test coverage detected