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

Method run

filters/CSFilter.cpp:177–277  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

175}
176
177PointViewSet CSFilter::run(PointViewPtr view)
178{
179 PointViewSet viewSet{view};
180 if (!view->size())
181 return viewSet;
182
183 // Segment input view into ignored/kept views.
184 PointViewPtr ignoredView = view->makeNew();
185 PointViewPtr keptView = view->makeNew();
186 if (m_args->m_ignored.empty())
187 keptView->append(*view);
188 else
189 Segmentation::ignoreDimRanges(m_args->m_ignored, view, keptView,
190 ignoredView);
191
192 // Check for 0's in ReturnNumber and NumberOfReturns
193 bool nrOneZero(false);
194 bool rnOneZero(false);
195 bool nrAllZero(true);
196 bool rnAllZero(true);
197 for (PointRef p : *keptView)
198 {
199 uint8_t nr = p.getFieldAs<uint8_t>(Id::NumberOfReturns);
200 uint8_t rn = p.getFieldAs<uint8_t>(Id::ReturnNumber);
201 if ((nr == 0) && !nrOneZero)
202 nrOneZero = true;
203 if ((rn == 0) && !rnOneZero)
204 rnOneZero = true;
205 if (nr != 0)
206 nrAllZero = false;
207 if (rn != 0)
208 rnAllZero = false;
209 }
210
211 if ((nrOneZero || rnOneZero) && !(nrAllZero && rnAllZero))
212 throwError("Some NumberOfReturns or ReturnNumber values were 0, but "
213 "not all. Check that all values in the input file are >= "
214 "1.");
215
216 // Segment kept view into two views
217 PointViewPtr firstView = keptView->makeNew();
218 PointViewPtr secondView = keptView->makeNew();
219
220 if (nrAllZero && rnAllZero)
221 {
222 log()->get(LogLevel::Warning)
223 << "Both NumberOfReturns and ReturnNumber are filled with 0's. "
224 "Proceeding without any further return filtering.\n";
225 firstView->append(*keptView);
226 }
227 else
228 {
229 Segmentation::segmentReturns(keptView, firstView, secondView,
230 m_args->m_returns);
231 }
232
233 if (!firstView->size())
234 throwError("No returns to process.");

Callers

nothing calls this directly

Calls 12

ignoreDimRangesFunction · 0.85
segmentReturnsFunction · 0.85
setPointCloudMethod · 0.80
do_filteringMethod · 0.80
logFunction · 0.50
sizeMethod · 0.45
emptyMethod · 0.45
appendMethod · 0.45
getMethod · 0.45
setLogMethod · 0.45
whatMethod · 0.45
setFieldMethod · 0.45

Tested by

no test coverage detected