All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.5.4 - 2023-01-25
- [C++] Allow for building as static library with lazperf built externally
2.5.3 - 2022-10-27
- [Python/C++] Fix
CopcExtents::ToString
- [Python/C++] Add warning when compressing too many points with
CompressBytes
2.5.2 - 2022-10-21
- [Python/C++] Expose
X
Y
Z
extents
2.5.1 - 2022-10-18
- [Python/C++] Added
PointCount
andChunkCount
to LazWriter - [Python/C++] Added
FilePath
property to LazWriter and FileWriter
2.5.0 - 2022-10-17
- [Python/C++] Fixed bug when copying CopcConfig into a LazWriterConfig where the header would still try to write Copc headers
- [Python/C++] Fixed bug when updating header in a LazConifgWriter not saving changes
- [Python/C++] Added
WritePointsCompressed
function to LazWriter - [C++] Add
LasHeader
copy constructor with the ability to change theis_copc
parameter - [Python] Add
LazReader
andLazWriter
support to python - [Python] Add
LazWriter
support to python multiprocessing transform functions - [C++] Add output operator (<<) overrides for classes with ToString methods
- [Python/C++] Removed
PointCount
andChunkCount
from LazWriter
- [Python/C++] Make
LazFileWriter
inherit fromLazWriter
2.4.1 - 2022-09-13
- [Python] Removed stub generation for platforms other than Linux
2.4.0 - 2022-09-12
- [Python] Generate stubs (.pyi) for the C++ bindings to provide typechecking in the IDE
- [Python] Add helper functions for multithreading COPC reads and transformations
- [Python/C++] Add
GetMaxDepth()
function to CopcReader
- [Python/C++] Point and Points objects no longer depend on an internal scale or offset. XYZ coordinates are stored as doubles internally, and converted into integers using scale and offset only when packing or unpacking. The
Points::Pack()
function now requires either aLasHeader
or a scale/offset vector as arguments. ThePoint::Pack()
function now requires a scale/offset vector as arguments. ThePoint
andPoints
constructors no longer take a scale and offset vector as arguemnts.
2.3.1 - 2022-04-14
- [Python/C++] Make Extents VLR optional when reading a file
2.3.0 - 2022-04-14
- [C++] Add
LazConfig
andLazConfigWriter
classes as parent class toCopcConfig
to handle LAZ files. - [C++] Add
LazWriter
andLazFileWriter
classes to write LAZ files. - [C++] Add
example-laz-writer.cpp
to show how to use the LAZ writer. - [Python/C++] Add
CheckAndUpdateBounds
toLasHeader
to check values in aPoint
and update the bounds if necessary. - [Python/C++] Add
SetGpsTimeBit
toLasHeader
to easily set the bit value to 1.
- [Python/C++] Rename
LasHeader::ApplyInverseScale
toLasHeader::RemoveScale
to be consistent withPoint
class.
- [Python/C++] Change return type of
LasHeader::ApplyInverseScale
fromdouble
toint32_t
.
2.2.3 - 2022-02-02
- [Python/C++] Fix bug with some attributes not getting copied when constructing
FileWriter
fromCopcConfig
.
2.2.2 - 2022-01-31
- [Python/C++] Fix bug with handling of non-existant path in FileWriter.
- [Python/C++] Fix test causing i686 tests to fail.
- [Python] Fix python ctest.
2.2.1 - 2022-01-24
- [Python] Pip release workflow
- [Python] Python build uses scikit-build instead of custom solution
2.2.0 - 2022-01-10
- [Python/C++] Add
UnscaledX
,UnscaledY
,UnscaledZ
properties tolas::Points
- [Python/C++] Add
point_format_id
argument toWriter
constructor to allow update of the point format between reader and writer. - [Python/C++] Implement
CopcExtentVlr
for compatibility with lazperf 3.0.0 - [Python/C++] Update lazperf dependency version to 3.0.0
2.1.3 - 2021-11-17
- [Python/C++] Update
CopcFileWriter
constructor to provide optional arguments to update information when using aCopcConfig
object from aReader
. Optional arguments arescale
,offset
,wkt
,extra_bytes_vlr
, andhas_extended_stats
. - [Python/C++] Make
LasHeader
'sscale
andoffset
read-only.
2.1.2 - 2021-11-12
- [General] Fix unintentional CMakeList version bump
2.1.1 - 2021-11-12
- [Python] Add pickling of
Node::page_key
2.1.0 - 2021-11-11
- [Python/C++] Add
PageExists(VoxelKey key)
toWriter
- [Python/C++] Add
GetParentAtDepth(int32_t depth)
toVoxelKey
- [Python/C++] Add
GetPageList()
toReader
- [Python/C++] Add
page
member toNode
- [Python/C++] Add
ChangeNodePage
toWriter
- [Python/C++] Write WKT as EVLR instead of VLR to align with laspy
- [Python/C++] Remove the error when scan angle is not within LAS specs [-30000,30000]
- [Python/C++] !!!Potential Breakage!!! Replaced
Page page
argument with optionalVoxelKey page_key
inWriter
'sAddNode
andAddNodeCompressed
. If nopage_key
is provided the node is added to the root page, if apage_key
is provided then the node is added to that page. If the requested page doesn't exist, it is created using the nearest existing hierarchical parent as page parent.
2.0.0 - 2021-10-28
- [Python/C++] Add
CopcExtent
andCopcExtents
classes - [Python/C++] Add extended stats (mean/var) to
CopcExtent
using an additional Lazperf extents VLR (see README.md for more info). - [Python/C++] Add
GetCopcExtents
function toCopcConfig
- [Python/C++] Add
GetCopcExtents
andSetCopcExtents
functions toWriter
- [Python] Add
reader.extents
property - [Python/C++] Add
CopcInfo
class - [Python/C++] Add vector(c++)/list(python) constructor to
VoxelKey
- [Python/C++] Add
CopcConfig
class - [Python/C++] Add
GetCopcConfig
function toBaseIO
- [Python/C++] Support COPC Extents, WKT, and Extra Bytes as VLR or EVLR
- [Python/C++] Add
SetCopcExtents
andSetCopcInfo
toWriter
- [Python/C++] Add
LasHeaderBase
class - [Python/C++] Add
ToString
toLasHeader
class - [Python/C++] Add
VlrHeader
class - [Python/C++] Add a check for
WKT
byte inLasHeader::FromLazPerf
- [Python/C++] Supported LAS point formats are now strictly 6 to 8 throughout the library
- [Python/C++] Remove
point_count_14
,points_by_return_14
,header_size_
,wave_offset
, andversion
fromLasHeader
- [Python/C++] Change lazperf version requirement to > 2.1.0
- [Python/C++] Update autzen-classified.copc.laz test file to be latest official
- [Python/C++] Change use of
las::CopcVlr::span
toCopcInfo::spacing
- [Python/C++] Change
CopcConfig::GetWkt
return type fromlas::WktVlr
tostd::string
- [Python/C++] Rename
CopcConfig::GetCopc
toCopcConfig::GetCopcInfo
and now returns aCopcInfo
class - [Python/C++] Rename
Reader::GetCopcHeader
toReader::GetCopcInfo
and now returns aCopcInfo
class - [Python/C++]
VoxelKey::Resolution
andVoxelKey::GetResolutionAtDepth
now takeCopcInfo
argument instead oflas::CopcVlr
- [Python/C++] Remove
Writer::LasConfig
, now usingCopcConfig
instead. - [Python/C++]
Writer
andFileWriter
constructors now takes aCopcConfig
class as argument - [Python/C++] Rename
NumExtraBytes
toEbByteSize
- [Python] Change
reader.GetCopcHeader()
function toreader.copc_info
property - [Python] Change
reader.CopcConfig().LasHeader()
function toreader.las_header
property - [Python] Change
reader.CopcConfig().Wkt()
function toreader.wkt
property - [Python] Change
reader.CopcConfig().ExtraBytesVlr()
function toreader.extra_bytes_vlr
property - [C++] Add
create_test_data.py
andcreate_test_data.sh
to create data forwriter_node_test.cpp
- [Python] Make
VoxelKey.BaseKey
andVoxelKey.InvalidKey
static functions - [Python] Update
Point
andPoints
property names fromCamelCase
tounder_score
- [Python/C++] Rename
Reader::GetAllChildren(VoxelKey)
toReader::GetAllChildrenOfPage(VoxelKey)
- [Python/C++] Rename
Reader::GetAllChildren()
toReader::GetAllNodes()
- [C++] Rename
PointFormatID
toPointFormatId
- [C++] Rename
PointSourceID
toPointSourceId
- [C++] Rename
HasRGB
andHasNIR
toHasRgb
andHasNir
respectively - [C++] Rename
NIR
toNir
- [Python/C++] Rename
ScanAngleFloat
toScanAngleDegrees
- [Python] Rename
unscaled_x
,unscaled_y
,unscaled_z
tox
,y
,z
- [General] Rename CMake flag
WITH_TESTS_AND_EXAMPLES
toWITH_TESTS
- [Python/C++] Rename
Box::ZeroBox
toBox::EmptyBox
- [Python/C++] Rename
VoxelKey::BaseKey
toVoxelKey::RootKey
1.3.1 - 2021-10-19
- [Python/C++] Add spatial function
Crosses
toVoxelKey
- [Python/C++] Add resolution function
Resolution
andGetResolutionAtDepth
toVoxelKey
- [Python/C++] Add
Vector3
operators toVector3
- [Python/C++] Add resolution query functions
GetDepthAtResolution
,GetNodesAtResolution
andGetNodesWithinResolution
toReader
- [Python/C++] Add
BoundsTrimFileExample
andResolutionTrimFileExample
to example-writer files - [Python/C++] Add
Classification
andPointSourceID
getter and setter toPoints
- [Python/C++] Add
GetChildren
toVoxelKey
- [Python] Make
Node
andVoxelKey
picklable - [Python/C++] Add a new constructor to
Box
usingVector3
- [Python/C++] Add scaling functions to
LasHeader
- [Python/C++] Add
ValidateSpatialBounds
function toReader
- [Python/C++] Change order of arguments in
VoxelKey
spatial functionsIntersects
,Contains
, andWithin
- [Python/C++] Add optional
resolution
argument toReader
spatial query functionsGetNodesWithinBox
,GetNodesIntersectBox
,GetPointsWithinBox
, andGetAllPoints
.resolution
can be used to limit the resolution during spatial queries - [Python/C++] Update
span
ofautzen-classified.copc.laz
test file from 0 to 128 - [Python/C++] Rename
ExtendedReturnsBitFields
toReturnsBitField
andExtendedFlagsBitFields
toFlagsBitField
inPoint
class - [Python/C++] Make WKT VLR optional
- [Python] Fix typo in pickling of
Node
- [Python] Fix scale error and reformat
NewFileExample()
in example_writer.py and .cpp
1.3.0 - 2021-10-04
- [Python/C++] Indexing directly on Points object in C++/python, including slicing support in python
- [Python] Pickle support for
LasHeader
,Vector3
- [Python/C++] Update header min, max, and points by return after the writer has been created
- [Python/C++] Add spatial functions
Intersect
,Contains
,Within
toBox
,VoxelKey
- [Python/C++] Add spatial function
Within
toPoint
,Points
- [Python/C++] Add query functions
GetNodesWithinBox
andGetPointsWithinBox
to Reader - [C++] Support for Windows build
- [General] Add CHANGELOG.md to track changes
- [Python]
VoxelKey
is implicitly convertible to a python tuple - [Python/C++]
las::Points
can be indexed directly with[]
- [Python/C++]
las::Points
holds shared pointers of point objects, so changes to thePoint
object within thePoints
container are properly reflected - [Python]
points.Size()
has been removed in python, replaced bylen(points)
- [Python]
points.Get()
andpoints.Get(i)
have been replaced by__getitem__
and__iter__
- [C++]
las::Point
objects are now solely referenced by shared pointers, so pointer accessors must be used - [C++] CMakeLists have been restructured to allow for building python/test/examples independently of the main library
- [C++] The copc-lib library now must be referenced with the
COPCLIB::
namespace in CMake
1.2.0 - 2021-09-17
- Release-it CI for releases
- Python bindings
- Points class for holding multiple "Point"s
- File path reader/writers
- Point scaling based on scale/offset
Point::X
was changed to refer toPoint::UnscaledX
(same for Y and Z).Point::X
now refers to the scaled and offsetted point.
1.1.0 - 2021-09-08
- COPC file writer to create new files
- Point class to parse LAS points
Copc
class