LGSx SDK
Breadcrumbs

LGSx SDK Release Notes

bar.png

 

leica_geosystems.png

Leica Geosystems

Release Notes 2026.0.0

Product
Leica LGSx SDK 2026.0.0

Date
July 7, 2026

Developed by
Reality Capture Software Product Management

Important notes

  • The Sensor Info API is stable. However, sensor information is only available when present in the source LGSx file. For existing files, sensor-related fields may be unavailable or return default values.

Changelog

Added

  • Metadata type MetadataType_DOUBLEARRAY for arbitrary length double arrays.

  • Non-truncating API alternatives for all public functions that previously used fixed-size wchar_t output buffers:

  • Buffer overflow fixes (critical): wcscpy replaced with safe copy in model node and model name handling.

  • Pattern C getters (call after MoveNext, before End): Lgsx_ReaderGetCurrentSetupName(), Lgsx_ReaderGetCurrentTargetLabel(), Lgsx_ReaderGetCurrentSetupCameraName().

  • "2" variants (atomic alternatives): Lgsx_ReaderMoveNextRun2(), Lgsx_ReaderMoveNextCoordSystems2(), Lgsx_ReaderGetModelNodeInfo2(), Lgsx_ReaderGetModelInfo2().

  • AssetHandle API: new handle type AssetHandle with Lgsx_ReaderGetGeoTagAssetHandle(), Lgsx_ReaderGetAssetHandle(), Lgsx_AssetRelease(), and getters Lgsx_AssetGetName(), Lgsx_AssetGetType(), Lgsx_AssetGetMimeType(), Lgsx_AssetGetFilename(), Lgsx_AssetGetUrl(), Lgsx_AssetGetGuid(), Lgsx_AssetGetId(), Lgsx_AssetGetCreationTime(), Lgsx_AssetGetModificationTime(), Lgsx_AssetIsExternalUrl(), Lgsx_AssetGetMetadata(), Lgsx_AssetHandleReadImage(), Lgsx_AssetHandleReadBinary().

  • Function-level "2" variants: Lgsx_WriterGetLastError2(), Lgsx_GetProductVersion2(), Lgsx_ReaderGetLUTImage2(), Lgsx_ReaderGetLUTImageOfSetup2(), Lgsx_ReaderGetSetupCameraImage2().

  • All returned wchar_t** strings must be freed with LgsxUtil_FreeMem(). All returned const wchar_t** strings are read-only and bound to the handle lifetime.

  • Lgsx_MetaGetDoubleArraySize() function to query the size of a double array in metadata.

  • Lgsx_MetaGetDoubleArray() function to retrieve double array values from metadata.

  • Cubemap face index enumeration CubemapFaceIndex

  • Cubemap functions Lgsx_ReaderGetCubemapImageBytes(), Lgsx_ReaderGetCubemapFaceMetadata(), Lgsx_ReaderGetCubemapMetadata(), Lgsx_ReaderGetCubemapFaceSize(), Lgsx_ReaderGetCubemapMaxLevel(), Lgsx_ReaderGetCubemapImageType(), Lgsx_ReaderGetCubemapImageBytes.

  • Lgsx_GetCubemapFaceOrientation() to retrieve the default orientation quaternion for a specific cubemap face.

  • LgsxUcsExample sample application demonstrating User Coordinate System (UCS) functionality.

  • LgsxExtractCubemapsExample sample application demonstrating how to extract cubemap images as bytes, without a need to decode.

  • LgsxSetupIndexExample sample application demonstrating how to read setup index (PM_SETUPIDX) from point data and count points per setup, with subsampling support.

  • Lgsx_ReaderEndTargets() added to finish target enumeration.

  • Lgsx_ReaderEndGeoTags() added to finish geotag enumeration.

  • Lgsx_ReaderEndSitemaps() added to finish sitemap enumeration.

  • Lgsx_ReaderEndAssets() added to finish asset enumeration.

  • Lgsx_ReaderEndSetupCameras() added to finish setup camera enumeration.

  • Lgsx_ReaderEndCoordSystems() added to finish coordinate system enumeration.

  • GeotagAnchorType type added.

  • Lgsx_GeoTagGetId() added for the handle-based GeoTag API.

  • Handle-based sitemap API with new types SitemapHandle, SitemapItemHandle, SitemapItemType, SitemapImageType, and CYSITEMAPIMAGECORNERS2D:

  • Enumeration: Lgsx_ReaderEnumSitemaps(), Lgsx_ReaderGetSitemapHandle(), Lgsx_ReaderEndSitemaps(), Lgsx_SitemapRelease().

  • Per-sitemap accessors: Lgsx_SitemapGetId(), Lgsx_SitemapGetGuid(), Lgsx_SitemapGetName(), Lgsx_SitemapGetOrderingIndex(), Lgsx_SitemapGetIsMaster(), Lgsx_SitemapGetMetadata(), Lgsx_SitemapGetActiveCoordSystemId().

  • Per-item accessors: Lgsx_SitemapEnumItems(), Lgsx_SitemapGetItem(), Lgsx_SitemapItemGetId(), Lgsx_SitemapItemGetType(), Lgsx_SitemapItemGetGuid(), Lgsx_SitemapItemGetPose().

  • Per-image accessors: Lgsx_SitemapHasImage(), Lgsx_SitemapImageGetHandle(), Lgsx_SitemapImageGetMetadata(), Lgsx_SitemapImageRead(), Lgsx_SitemapImageReadBinary(), Lgsx_SitemapImageGetIsBlank(), Lgsx_SitemapImageGetCorners().

  • UCS accessors for current coordinate system during enumeration: Lgsx_ReaderGetCurrentCoordSystemId(), Lgsx_ReaderGetCurrentCoordSystemGuid().

  • Lgsx_AssetHandleReadImageBinary() reads raw encoded image bytes (jpg/png/jxr) from any AssetHandle, stripping SDK metadata. The caller can verify the asset is an image beforehand using Lgsx_AssetGetMimeType().

  • LgsxExtractSitemapsExample sample application demonstrating sitemap enumeration, sitemap item inspection, and decoded sitemap image extraction.

  • Field pose added to CYTRAJECTORYINFO.

  • Lgsx_ReaderRunGetGuid() function to get run GUID.

  • Point cloud file-like access API: Lgsx_ReaderPointCloudFileOpen(), Lgsx_PointCloudFileClose(), Lgsx_PointCloudFileGetSize(), Lgsx_PointCloudFileRead(), PointCloudFileHandle.

  • EnumPointsConfigHandle and associated functions (Lgsx_InitEnumPointsConfig(), Lgsx_ReleaseEnumPointsConfig(), setters) provide a handle-based configuration for point enumeration—including an optional memory-hint to limit reader memory usage.

  • Lgsx_ReaderEnumPointsEx2() now accepts an EnumPointsConfigHandle instead of individual parameters, enabling future extension without signature changes.

  • Lgsx_MetaIsEmpty() function to check if a metadata object contains any entries.

  • SensorInfo handle type SensorInfoHandle and functions Lgsx_ReaderHasSetupSensorInfo(), Lgsx_ReaderGetSetupSensorInfo(), Lgsx_SensorInfoGetGuid(), Lgsx_SensorInfoGetDeviceInfoCaptureTime(), Lgsx_SensorInfoGetManufacturer(), Lgsx_SensorInfoGetScannerType(), Lgsx_SensorInfoGetSerialNumber(), Lgsx_SensorInfoGetArticleNumber(), Lgsx_SensorInfoGetHardwareVersion(), Lgsx_SensorInfoGetFirmwareVersion(), Lgsx_SensorInfoGetDeviceInfoSnapshot(), Lgsx_SensorInfoRelease() to handle sensor info associated with setup.

  • ProcessingInfo handle type ProcessingInfoHandle and functions Lgsx_ReaderEnumSetupProcessingInfos(), Lgsx_ReaderGetSetupProcessingInfo(), Lgsx_ProcessingInfoRelease(), Lgsx_ProcessingInfoGetGuid(), Lgsx_ProcessingInfoGetProcessingTimestamp(), Lgsx_ProcessingInfoGetAppName(), Lgsx_ProcessingInfoGetAppVersion(), Lgsx_ProcessingInfoHasLibraryVersion(), Lgsx_ProcessingInfoGetLibraryVersion(), Lgsx_ProcessingInfoGetOrderIndex(), Lgsx_ProcessingInfoGetPipelineInfo() to handle processing info associated with setup.

  • Run-level SensorInfo functions Lgsx_ReaderHasRunSensorInfo(), Lgsx_ReaderGetRunSensorInfo() to access sensor info through the current run's phantom setup.

  • Run-level ProcessingInfo functions Lgsx_ReaderEnumRunProcessingInfos(), Lgsx_ReaderGetRunProcessingInfo() to access processing info through the current run's phantom setup.

  • Scan handle type ScanHandle and functions Lgsx_ReaderEnumSetupScans(), Lgsx_ReaderGetSetupScan(), Lgsx_ScanRelease(), Lgsx_ScanGetGuid(), Lgsx_ScanGetScanType(), Lgsx_ScanGetScanRole(), Lgsx_ScanGetPointCount(), Lgsx_ScanGetCreationTimestamp(), Lgsx_ScanGetModificationTimestamp(), Lgsx_ScanHasWindow(), Lgsx_ScanGetWindowMinAzimuth(), Lgsx_ScanGetWindowMinElevation(), Lgsx_ScanGetWindowMaxAzimuth(), Lgsx_ScanGetWindowMaxElevation(), Lgsx_ScanGetCaptureTimestamp(), Lgsx_ScanGetScanDensity(), Lgsx_ScanGetCaptureInfoSnapshot() to access scan metadata (type, role, point count, window, capture info) per setup.

  • Run-level Scan functions Lgsx_ReaderEnumRunScans(), Lgsx_ReaderGetRunScan() to access scans through the current run's phantom setup.

  • LgsxSensorProcessingInfoExample sample application demonstrating how to read SensorInfo and ProcessingInfo data associated with setups and runs.

  • String conversion utility functions for safer UTF conversion: bounded-buffer variants LgsxUtil_A2WEx() and LgsxUtil_W2AEx() add explicit output-size parameters for UTF-8/UTF-16 conversion, and allocating variants LgsxUtil_AllocA2W() and LgsxUtil_AllocW2A() allocate the required output buffer and return it to the caller. Buffers returned by the allocating variants must be freed using LgsxUtil_FreeMem().

Changed

  • Lgsx_SitemapImageGetCorners() extended with automatic fixes of corner positions, controlled by flags (pFlags parameter).

  • SDK sample applications were refactored from one monolithic reader example into focused reader examples (LgsxProjectInfoExample, LgsxSetupsExample, LgsxRunsExample, LgsxPointCloudExample, LgsxGeoTagsExample, LgsxAssetsExample, LgsxTargetsExample, and LgsxSitemapsExample). LgsxUcsExample and LgsxSetupIndexExample remain cohesive advanced examples. Package verification scripts, test package execution, and getting-started sample indexing were updated accordingly.

  • Lgsx_ReaderGetProjectInfo() no longer fails if project thumbnail is missing.

  • Sitemap API replaced: the experimental cursor-based functions and structs have been removed (see Removed) and replaced by the handle-based sitemap API (see Added).

  • Lgsx_GeoTagGetSetupIndex() renamed to Lgsx_GeoTagGetAnchor() and extended, as the name was misleading and not providing all required info.

  • WinDllExport.hpp replaced by LgsxExport.h (export macros) and LgsxPlatform.h (platform types). Update includes accordingly.

  • LinearAlgebra.h renamed to LinearAlgebra.hpp.

  • All public C headers (.h) are now valid C11. Struct and enum declarations use typedef form. PROPERTY_NAME_LENGTH is now a #define.

  • LgsxPlatform.h is now a pure C header; C++ standard library includes are no longer provided transitively.

  • M3DPinholeDistortion enum extracted from M3DPINHOLE struct and renamed to M3DPINHOLEDISTORTION. Enum values renamed with M3DPINHOLEDISTORTION_ prefix: e.g. distortionK1 -> M3DPINHOLEDISTORTION_K1, distortionElements -> M3DPINHOLEDISTORTION_COUNT.

Removed

  • Deprecated cursor-based sitemap functions: Lgsx_ReaderMoveNextSitemap(), Lgsx_ReaderMoveNextSitemapImage(), Lgsx_ReaderMoveNextSiteMapImage(), Lgsx_ReaderGetSitemap(), Lgsx_ReaderGetSitemapImage(), Lgsx_ReaderEnumSitemapItems(), Lgsx_ReaderEndSitemapItems(), Lgsx_ReaderMoveNextSitemapItem(). Use the handle-based sitemap API instead.

  • Deprecated structs CYSITEMAP and CYSITEMAPIMAGE. The handle-based API returns individual fields via dedicated getters.

Fixed

  • Lgsx_ReaderGetAssetHandle() now keeps at most one temp file on disk at a time and returns a non-zero error code on extraction failure. More information in documentation for Lgsx_ReaderGetAssetHandle().

  • Lgsx_ReaderEnumPointsEx() now correctly honors the subSample parameter for point cloud subsampling.

  • Lgsx_ReaderEnumTarget() follows the documentation and returns targets for the whole project and not just for current setup.

  • Lgsx_ReaderEnumTargetOfSetup() does not require the setup to be in currently enumerated setup list.

  • Lgsx_ReaderEnumGeoTags() no longer requires prior enumeration of setups and is no longer affected by stage of the setup enumeration.

  • Lgsx_ReaderEnumGeoTagsOfSetup() no longer requires prior enumeration of setups and is no longer affected by context of the setup enumeration.

  • Lgsx_ReaderEnumGeoTagsOfSetup() documentation was clarified that it returns geotags visible or related to setup, not attached to setup.

  • Lgsx_ReaderEnumSetupCamera() documentation was clarified, that it returns cameras for current setup in enumeration and not in the project.

  • Lgsx_ReaderGetLUTImage() and Lgsx_ReaderGetLUTImageOfSetup() documentation corrected: typeName is an output parameter (the SDK writes the type name into the caller-provided buffer), not an input. The stale "no workaround" warnings were updated to reference Lgsx_ReaderGetLUTImage2() and Lgsx_ReaderGetLUTImageOfSetup2() respectively.

  • Multiple documentation fixes across public headers: corrected parameter directions, removed phantom entries referencing non-existent parameters, and fixed recurring typos.

  • GUID contract clarification in API documentation: GUID-returning getters may return an empty string when a source object has no persisted GUID (including Lgsx_AssetGetGuid(), Lgsx_GeoTagGetGuid(), Lgsx_ReaderGetSetupGuid(), and Lgsx_ReaderRunGetGuid()).

Additional Notes

Existing owners of LGS files will need to convert them to the LGSx format before opening or importing the LGSx content. The Leica LGS Converter Tool is available online (free of charge without any license).

Packaging

  1. Windows Package (ZIP) - Made for Windows 10 and 11 (64-bit) using Visual Studio 2022 (19.43.34809.0).

  2. Linux Package (TGZ) - Made for Ubuntu 22.04 LTS version (available on the Microsoft App Store) using gcc11.

Both packages include all applicable libraries, header and source files, sample programs, LGSx dataset, documentation (release notes, API documentation, Getting Started Guide).

Only the new LGSx format is supported. LGSx allows access to HSPC point clouds and other datasets.

The latest documentation is available on the Reality Capture SDK site.

Licensing

The LGSx SDK is available only to partners who have signed up for the Geosystems Partners Network (GPN).

A developer license key will be provided to enable the API, allowing Licensee developers to access the available functionality. The developer key must not be distributed with the integrated product.

A deployment license key will be provided to enable the API in the distributed integrated product.

The Licensee must have the LGSx SDK installed to start coding against the API.


Questions or Comments? Contact LGSx SDK Support



Copyright (c) 2026, Leica Geosystems, Inc.