• Stars
    star
    131
  • Rank 275,867 (Top 6 %)
  • Language
    C++
  • License
    Boost Software Li...
  • Created over 6 years ago
  • Updated 5 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Library for reading & writing the E57 file format

libE57Format

GitHub release (latest by date) Docs GitHub Build

libE57Format is a C++ library which provides read & write support for the ASTM-standard E57 file format on Linux, macOS, and Windows. E57 files store 3D point cloud data (produced by 3D imaging systems such as laser scanners), attributes associated with 3D point data (color & intensity), and 2D images (photos taken using a 3D imaging system).

Documentation

The doxygen-generated documentation may be found here. These docs are generated and saved in the libE57Format-docs repo.

Dependencies/Requirements

Tools:

Libraries:

Installing Dependencies On Linux (Ubuntu)

$ sudo apt install libxerces-c-dev clang-format

Installing Dependencies On macOS (homebrew)

$ brew install ccache clang-format xerces-c

Build, Install, & Test

Here's how you build & install a release version with the defaults:

$ cmake -B E57-build -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=E57-install libE57Format
$ cmake --build E57-build --parallel
$ cmake --install E57-build

If CMake can't find the xerces-c library, you can set CMAKE_PREFIX_PATH to point at it.

$ cmake -B E57-build \
    -DCMAKE_BUILD_TYPE=Release \
    -DCMAKE_INSTALL_PREFIX=E57-install \
    -DCMAKE_PREFIX_PATH=/path/to/xerces-c \
    libE57Format

Once the library is built, you can run the tests like this:

$ cd E57-build
$ ./test/testE57
[==========] Running 36 tests from 8 test suites.
[----------] Global test environment set-up.
[----------] 1 test from TestData
[ RUN      ] TestData.RepoExists
...

See test/README for details about testing and the test data.

๐Ÿด Fork

This is a fork of E57RefImpl. The original source is from E57RefImpl 1.1.332.

The original code had not been touched in years and I wanted to make changes to compile it on macOS. Forking it gave me a bit more freedom to update the code and make changes as required. Everything was stripped out except the main implementation for reading & writing E57 files.

Notes:

  • I changed the name of the project so that it is not confused with the E57RefImpl project.
  • I changed the main include file's name from E57Foundation.h to E57Format.h to make sure there is no inclusion confusion.
  • Versions of libE57Format started at 2.0.
  • I made changes for it to compile and run on macOS.
  • It no longer depends on Boost.
  • It now requires C++14. (Version 2.x required C++11.)

Many, many other changes were made prior to the first release of this fork. See the CHANGELOG and git history for details.

E57Simple API

Jiri Hรถrner added the E57Simple API from the old reference implementation and updated it.

This Simple API has evolved since this original port to fix some problems and to make it more foolproof & easier to use. Please see the CHANGELOG for version 3.

Tools

Ryan Baumann updated the e57unpack and e57validate tools to work with libE57Format. You can find them in the e57tools repo.

Projects Using libE57Format

These projects use hard forks of libE57Format:

There are also some commercial products using libE57Format. If any of them would like to sponsor the project and be listed here, please contact Andy (asmaloney).

How To Contribute

These are some of the things you can do to contribute to the project:

โœ Write About The Project

If you find the project useful, spread the word! Articles, mastodon posts, tweets, blog posts, instagram photos - whatever you're into.

โญ๏ธ Add a Star

If you found this project useful, please consider starring it! It helps me gauge how useful this project is.

โ˜ Raise Issues

If you run into something which doesn't work as expected, raising an issue with all the relevant information to reproduce it would be helpful.

๐Ÿž Bug Fixes & ๐Ÿงช New Things

I am happy to review any pull requests. Please keep them as short as possible. Each pull request should be atomic and only address one issue. This helps with the review process.

Note that I will not accept everything, but I welcome discussion. If you are proposing a big change, please raise it as an issue first for discussion.

Formatting

This project uses clang-format to format the code. There is a cmake target (e57-clang-format) - which runs clang-format on the source files. After changes have been made, and before you submit your pull request, please run the following:

cmake --build . --target e57-clang-format

๐Ÿ“– Documentation

The documentation is a bit old and could use some lovin'. You can submit changes over in the libE57Format-docs repository.

๐Ÿ’ฐ Financial

Given that I'm an independent developer without funding, financial support is always appreciated. If you would like to support the project financially (especially if you sell a product which uses this library), you can use the sponsors page for one-off or recurring support. Thank you!

License

This project as a whole is licensed under the BSL-1.0 license - see the LICENSE file for details.

Individual source files may contain the following tag instead of the full license text:

SPDX-License-Identifier: BSL-1.0

Some files are licensed under the MIT license - see the LICENSE-MIT file for details.

These files contain the following tag instead of the full license text:

SPDX-License-Identifier: MIT

Using SPDX enables machine processing of license information based on the SPDX License Identifiers and makes it easier for developers to see at a glance which license they are dealing with.

More Repositories

1

GDExtensionTemplate

๐Ÿ“œ A template project for building Godot 4 GDExtensions using CMake
C++
214
star
2

asmCrashReport

๐Ÿž Installs signal handlers to capture stack traces for MinGW 32 and macOS builds.
C++
47
star
3

Leaflet_Example

๐Ÿ—บ An example of how to use Leaflet to create an interactive map.
HTML
45
star
4

Leaflet_Cluster_Example

๐Ÿ—บ Example of using the clustering plugin with Leaflet
JavaScript
30
star
5

MeshIO

CloudCompare plugin for loading COLLADA, glTF, and IFC-SPF 3D models
C++
29
star
6

asmOpenCV

Simple methods to convert between OpenCV's cv::Mat and Qt's QImage and QPixmap
C++
25
star
7

gactar

๐Ÿง  A tool for creating & running basic ACT-R models on multiple implementations using a single declarative file format
Go
15
star
8

SpaceThing

A tutorial project for creating vertical scrolling parallax backgrounds in Godot
GDScript
9
star
9

fix_LC_VERSION_MIN_MACOSX

Small program to update LC_VERSION_MIN_MACOSX to 10.9 if it is less than 10.9
C
8
star
10

ACT-R

Mirror of the official ACT-R Lisp implementation
Common Lisp
6
star
11

LASIO

LAS 1.3 file handling plugin for CloudCompare
C++
2
star
12

naming-language-gen

Generate naming languages
Go
2
star
13

CodeCoverageExample

Example of setting up unit tests and code coverage on macOS using QT Creator
C++
1
star
14

libE57Format-docs

Generated docs for the libE57Format library
CSS
1
star
15

magsli

[mirror] Simple MailGun to Slack integration
Go
1
star
16

bbedit-language-txl

Basic syntax highlighting and rule/function/define recognition of TXL for BBEdit/TextWrangler
1
star
17

gactar-vscode

VS Code plugin for gactar
TypeScript
1
star