Skip to content

Fix incorrect offset calculation when writing extra attributes to output buffer#690

Open
bjl5029 wants to merge 1 commit into
potree:developfrom
bjl5029:develop
Open

Fix incorrect offset calculation when writing extra attributes to output buffer#690
bjl5029 wants to merge 1 commit into
potree:developfrom
bjl5029:develop

Conversation

@bjl5029

@bjl5029 bjl5029 commented Dec 1, 2025

Copy link
Copy Markdown

Problem:
When writing extra attributes from LAS files to the output buffer, the code incorrectly uses attributeOffset (which tracks the input attribute positions) instead of
targetOffset (which represents the correct output buffer offset).

This causes extra attributes to be written to wrong memory locations in the output buffer, resulting in corrupted point cloud data when the input and output attribute layouts
differ.

Root Cause:
In chunker_countsort_laszip.cpp, the lambda capture and memcpy operation use attributeOffset:
auto handleAttribute = [data, point, header, attributeSize, attributeOffset, sourceOffset, attribute](int64_t offset) {
memcpy(data + offset + attributeOffset, point->extra_bytes + sourceOffset, attributeSize);

However, targetOffset is already correctly calculated on line 582 using outputAttributes.getOffset() but was never used.

Fix:
Replace attributeOffset with targetOffset in the lambda capture and memcpy call:
auto handleAttribute = [data, point, header, attributeSize, targetOffset, sourceOffset, attribute](int64_t offset) {
memcpy(data + offset + targetOffset, point->extra_bytes + sourceOffset, attributeSize);

Fix incorrect offset calculation when writing extra attributes to output buffer
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant