Project icon

com.io7m.smfj

Build status Maven Central Codacy Codecov

The com.io7m.smfj package provides a minimalist format for storing mesh data.

Contents

Features

  • Strongly-typed generic non-interleaved storage format.
  • Carefully designed binary format that allows for mapping sections of files into memory for direct upload to the GPU. All data is strictly aligned for performance.
  • Rich integer types: Store named arrays of 1-4 component 8/16/32/64-bit signed and unsigned integer vectors.
  • Rich floating point types: Store named arrays of 1-4 component 16/32/64-bit floating-point vectors.
  • Text and binary encodings.
  • Blender plugin to export directly to the text format.
  • Event-based parsers for near zero-allocation parsing.
  • Extensible filter system for processing and transforming mesh data.
  • OSGi-ready
  • High-coverage automated test suite.
  • ISC license.

Releases

The current release is 0.15.0.

Source code and binaries are available from the repository.

Documentation

Documentation for the 0.15.0 release is available for reading online.

Documentation for current and older releases is archived in the repository.

User documentation

JavaDoc

See the JavaDoc.

Specification

The specification for the format is available for reading online.

Maven

The following is a complete list of the project's modules expressed as Maven dependencies:

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.blender</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.cmdline</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.core</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.documentation</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.format.binary2</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.format.obj</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.format.support</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.format.text</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.format.xml</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.frontend</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.parser.api</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.probe.api</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.processing.api</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.processing.main</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.serializer.api</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.specification</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.tests</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.validation.api</artifactId>
  <version>0.15.0</version>
</dependency>

<dependency>
  <groupId>com.io7m.smfj</groupId>
  <artifactId>com.io7m.smfj.validation.main</artifactId>
  <version>0.15.0</version>
</dependency>

Each release of the project is made available on Maven Central within ten minutes of the release announcement.

Changes

Subscribe to the releases atom feed.

2017-06-21 Release: com.io7m.smfj 0.14.0
2017-06-20 Change: Correctly handle a lack of triangles and vertex data in the byte buffer packer. (tickets: 51 )
2017-06-20 Change: (Backwards incompatible) Require parsers to fail on missing triangles and vertices.
2017-06-18 Release: com.io7m.smfj 0.13.0
2017-06-18 Change: (Backwards incompatible) Replace the attribute_offset field. (tickets: 49 )
2017-06-18 Release: com.io7m.smfj 0.12.0
2017-06-15 Change: Add a "resample" filter command to provide lossy resampling of vertex data.
2017-06-15 Change: Add application information. Export application metadata in the Blender plugin, and add a filter command to generate application info as metadata.
2017-06-15 Release: com.io7m.smfj 0.11.0
2017-04-25 Change: Implement version probing. (tickets: 42 )
2017-04-27 Change: Add convenient SMFFilterCommandChecks class for developing filters.
2017-04-28 Change: (Backwards incompatible) Move SMFSchemaValidator into the API package as it defines the semantics of validation.
2017-04-28 Change: (Backwards incompatible) Make parsers use URIs instead of Paths for diagnostic messages. (tickets: 43 )
2017-04-28 Change: Fail in the correct way when failing to parse files during mesh processing. (tickets: 44 )
2017-06-14 Change: (Backwards incompatible) Complete redesign of formats for forward and backwards compatibility. (tickets: 46 45 41 )
2017-06-14 Change: (Backwards incompatible) Rename the "formats" command to "list-formats".
2017-04-09 Release: com.io7m.smfj 0.10.0
2017-01-30 Change: Use the new jtensors [8.0.0, 9.0.0) release.
2017-01-31 Change: Fix yet another Maven Shade issue. (tickets: 40 )
2017-04-09 Change: Rename project. Use the new primogenitor POM and 2017 project conventions.
2017-01-29 Release: com.io7m.smfj 0.9.0
2017-01-29 Change: Enable Javaslang encodings for memory meshes.
2017-01-29 Change: Add a delegating metadata listener. (tickets: 39 )
2017-01-27 Release: com.io7m.smfj 0.8.0
2017-01-24 Change: (Backwards incompatible) Change bytebuffer API to allow failures; introduce a codebase-wide general error type. (tickets: 37 )
2017-01-25 Change: Correct triangle size calculation for ByteBuffer cursors. (tickets: 38 )
2017-01-27 Change: (Backwards incompatible) Abstract header triangle information into its own SMFTriangles type.
2017-01-27 Change: (Backwards incompatible) The byte buffer event method onAllocateTriangleBuffer() now takes an SMFTriangles value.
2017-01-23 Release: com.io7m.smfj 0.7.1
2017-01-23 Change: Adjust OSGi annotations and dependencies.
2017-01-23 Release: com.io7m.smfj 0.7.0
2017-01-23 Change: Use jcoords 0.1.3 to fix OSGi.
2017-01-23 Change: Add metadata-add and metadata-remove commands. (tickets: 20 34 )
2017-01-23 Change: Add OSGi annotations. (tickets: 33 )
2017-01-15 Change: Add ByteBuffer packed meshes.
2017-01-15 Change: (Backwards incompatible) SMFParserEventsMetaType no longer extends SMFParserEventsErrorType.
2017-01-15 Change: Add SMFParseErrorType#fullMessage()
2017-01-15 Change: Add validation API
2017-01-16 Change: Add a schema language for the validation API
2017-01-10 Release: com.io7m.smfj 0.6.0
2017-01-10 Change: Reduce severity of line parser log messages. (tickets: 31 )
2017-01-10 Change: Zero pad schema ID values. (tickets: 30 )
2017-01-10 Change: (Backwards incompatible) Allow redundant use of the metadata command. (tickets: 29 )
2017-01-09 Change: (Backwards incompatible) Add context values to the filter interface. This is an API breaking change.
2017-01-09 Change: (Backwards incompatible) Integrate immutables-javaslang. This is an API breaking change. (tickets: 17 )
2017-01-03 Release: com.io7m.smfj 0.5.1
2017-01-03 Change: Add the ability to list the available filter commands. (tickets: 28 )
2017-01-03 Change: Update to the latest versions of all dependencies.
2017-01-03 Change: Insert the project version into the Blender plugin sources at compile time. (tickets: 27 )
2017-01-03 Release: com.io7m.smfj 0.5.0
2017-01-03 Change: Allow the publication of new filter commands via a simple modular ServiceLoader-based resolution system. (tickets: 26 )
2016-12-29 Change: The io7m-smfj-format-obj module was exporting the wrong OSGi package.
2016-12-29 Release: com.io7m.smfj 0.4.0
2016-12-29 Change: Add schema-set and schema-check commands. (tickets: 19 )
2016-12-29 Change: Add trim command. (tickets: 21 )
2016-12-29 Change: (Backwards incompatible) Update the random access parser API to deliver metadata. (tickets: 23 )
2016-12-29 Change: Add an adapter that can deliver parser events from an SMFMemoryMesh. (tickets: 18 )
2016-12-29 Change: (Backwards incompatible) Add an optional exception to parse and processing errors. (tickets: 22 )
2016-12-29 Change: Fix a major issue with 8-bit data not being serialized. (tickets: 24 )
2016-12-29 Change: (Backwards incompatible) Make the SMFMetadata vendor/schema fields into long values to ease the use of them as unsigned 32 bit values.
2016-12-28 Release: com.io7m.smfj 0.3.0
2016-12-28 Change: (Backwards incompatible) Change serialization API to make implementations easier to write.
2016-12-28 Change: Add API and tools to process meshes. (tickets: 5 )
2016-12-27 Change: Export SMFImmutableStyleType.
2016-11-30 Release: com.io7m.smfj 0.2.0
2016-11-30 Change: The Blender plugin may now export all meshes, or just the selected meshes. (tickets: 8 )
2016-11-29 Change: Allow for the inclusion of arbitrary metadata in files. (tickets: 12 )
2016-11-29 Change: (Backwards incompatible) Allow for separately parsing the header and data sections of files in sequential parsers. (tickets: 11 )
2016-11-28 Change: Add coordinate system metadata to SMF files. (tickets: 2 )
2016-11-18 Change: Add the ability to read Wavefront OBJ files for conversion.
2016-11-22 Release: com.io7m.smfj 0.1.0
2016-11-22 Change: Initial release.

Sources

This project uses Git to manage source code.

Repository: https://github.com/io7m/smf

$ git clone https://github.com/io7m/smf

License

Copyright © 2020 Mark Raynsford <code@io7m.com> http://io7m.com

Permission to use, copy, modify, and/or distribute this software for
any purpose with or without fee is hereby granted, provided that the
above copyright notice and this permission notice appear in all copies.

THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL
WARRANTIES WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED
WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR
BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES
OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
SOFTWARE.

Bug Tracker

The project uses GitHub Issues to track issues.