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

Method fillPointBuf

io/LasWriter.cpp:870–1076  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

868
869
870bool LasWriter::fillPointBuf(PointRef& point, LeInserter& ostream)
871{
872 bool has14PointFormat = d->header.has14PointFormat();
873 static const size_t maxReturnCount = d->header.maxReturnCount();
874
875 // we always write the base fields
876 using namespace Dimension;
877
878 uint8_t returnNumber(1);
879 uint8_t numberOfReturns(1);
880 if (point.hasDim(Id::ReturnNumber))
881 returnNumber = point.getFieldAs<uint8_t>(Id::ReturnNumber);
882 if (point.hasDim(Id::NumberOfReturns))
883 numberOfReturns = point.getFieldAs<uint8_t>(Id::NumberOfReturns);
884 if (numberOfReturns > maxReturnCount)
885 {
886 if (d->opts.discardHighReturnNumbers)
887 {
888 // If this return number is too high, pitch the point.
889 if (returnNumber > maxReturnCount)
890 return false;
891 numberOfReturns = maxReturnCount;
892 }
893 }
894
895 auto converter = [this](double val, Dimension::Id dim) -> int32_t
896 {
897 int32_t i(0);
898
899 if (!Utils::numericCast(val, i))
900 throwError("Unable to convert scaled value (" +
901 Utils::toString(val) + ") to "
902 "int32 for dimension '" + Dimension::name(dim) +
903 "' when writing LAS/LAZ file " + d->curFilename + ".");
904 return i;
905 };
906
907 double xOrig = point.getFieldAs<double>(Id::X);
908 double yOrig = point.getFieldAs<double>(Id::Y);
909 double zOrig = point.getFieldAs<double>(Id::Z);
910 int32_t x = converter(m_scaling.m_xXform.toScaled(xOrig), Id::X);
911 int32_t y = converter(m_scaling.m_yXform.toScaled(yOrig), Id::Y);
912 int32_t z = converter(m_scaling.m_zXform.toScaled(zOrig), Id::Z);
913
914 ostream << x;
915 ostream << y;
916 ostream << z;
917
918 uint16_t intensity(0);
919 if (point.hasDim(Id::Intensity))
920 intensity = point.getFieldAs<uint16_t>(Id::Intensity);
921 ostream << intensity;
922
923 uint8_t scanChannel(0);
924 if (point.hasDim(Id::ScanChannel))
925 scanChannel = point.getFieldAs<uint8_t>(Id::ScanChannel);
926
927 uint8_t scanDirectionFlag(0);

Callers

nothing calls this directly

Calls 15

numericCastFunction · 0.85
insertDimFunction · 0.85
hasDimMethod · 0.80
toScaledMethod · 0.80
getFieldMethod · 0.80
fromScaledMethod · 0.80
toStringFunction · 0.70
nameFunction · 0.50
logFunction · 0.50
has14PointFormatMethod · 0.45
maxReturnCountMethod · 0.45
getMethod · 0.45

Tested by

no test coverage detected