Skip to content

Releases: adobe/lagrange

Lagrange Release v6.0.0

06 Apr 20:52
Compare
Choose a tag to compare

Highlights

  • Generic mesh API that works in 2D, 3D, triangles/quad/hybrid mesh using the same mesh type.
  • Simple API based on std::span<> (assumes continuous memory buffers)
  • Generic copy-on-write attributes (per vertex, facet, edge, etc.)
  • Separate views.h provides Eigen "views" over mesh buffers.
  • Mesh header only pulls STL headers (, <string_view>, and -- last one can be avoided easily).
  • Efficient memory storage: regular meshes only need 2 buffers (vertex pos, facet indices), while hybrid meshes uses an additional offset buffer.
  • Use PIMPL idiom to hide internal mesh attribute manager.
  • Mesh attribute can wrap external buffers (including const buffers). Policies determine write/growth behavior.
  • Efficient buffer growth via std::vector<>.
  • Use explicit template instantiation to enforce strict separation of declaration/definition (faster compile times)
  • Use X macros to facilitate explicit template instantiation of predetermined types
  • Export attributes into shared_ptr for lifetime management.
  • Full Doxygen documentation.
  • Zero compiler warnings with much stricter warning flags than before.
  • C++17 is now the minimum required standard.

Features

Attributes

  • Generic attribute class, templated only by scalar type.
  • Versatile, low-level but safe interface based on std::span<>.
  • Use explicit template instantiation to separate .cpp and .h
  • Support wrapping external buffers (const and non-const). A policy controls write behavior to const buffers.
  • Support wrapping external buffers with larger capacity. A policy controls growth behavior of external buffers.
  • Support various attribute usage tags. VertexIndex, FacetIndex, etc. will remap indices accordingly when resizing/reordering.
  • Indexed attributes as a pair of (indices, value) attributes
  • Set default value used for attribute growth (e.g. invalid index, -1, etc.).
  • Unit tests with 100% coverage

Mesh

  • Copy-on-write allows the new mesh class to have efficient "pass-by-value" semantic (a mesh can be copied/moved efficiently).
  • Generic mesh API supporting arbitrary dimension & arbitrary polygonal facets.
  • Dynamic mesh supporting insertion & deletion of vertices/facets.
    • Add vertices/facets extend existing attribute buffers.
    • Efficient batch element removal (using either a list/mask of elements to remote).
    • Efficient in-place reordering/reindexing after element removal.
    • Methods to clear vertices/facets
  • Mesh attributes
    • Access attributes via names (<string_view>) or attribute ids (avoid a hash map lookup).
    • Easy read/write references to mesh vertices and facets indices.
    • Prevent creation of reserved attribute names (starting with "$").
    • Export attribute buffer into a shared_ptr.
  • Mesh edges
    • Initialize mesh edges using user-given ordering.
    • Additional connectivity attribute for navigation.
    • Preserve attributes when resizing/reindexing mesh elements
  • Mesh IO for .obj files
    • Basic mesh IO for positions + indices
    • Extended mesh IO with uv and normals

Views

  • Convenient "Eigen" map views over mesh attributes: compatible with libigl functions (V, F).
  • Convenient views for mesh vertices/facets + generic views for custom attributes.

Visitors

  • Provide foreach_attribute methods to visit all mesh attributes.
  • Sequential and parallel iteration.
  • BitField for iterating over attributes of a certain type.
  • Filter indexed and non-indexed attributes via if constexpr or template args.
  • foreach_xxx_around visitors use function_ref<> rather than templated functions.

Lagrange Release v5.9.0

06 Apr 02:30
Compare
Choose a tag to compare

Infrastructure

  • CMake updates
    • Only include LagrangeOptions.cmake when building a top-level library.
    • Reorganized modules in IDE folders.
  • Updated warning ignore setting.
  • Added test coverage support.
  • Dropped docker support.

Core

  • Cleaned up safe_cast function.
  • Renamed INVALID to invalid.
  • Update to ensure core module is C++14 compatible.
  • Cleaned up logger and doc.
  • Added indexed attribute tracking in split_long_edges.
  • Moved array serialization code from serialization module to core.

UI

  • Misc bug fixes and dependency updates.
  • Updated UI documentation and tutorial.

Lagrange Release v5.8.0

01 Mar 19:29
Compare
Choose a tag to compare

Infrastructure

  • Renamed CMake module options:
    • LAGRANGE_X -> LAGRANGE_MODULE_X
    • e.g. LAGRANGE_UI -> LAGRANGE_MODULE_UI
    • Reminder: Rather than using CMake options to enable additional Lagrange module, users should now prefer to call the helper functions lagrange_include_module(io ui ...) to import additional Lagrange module in client projects.
  • Assert & breakpoints
    • Enabled debugger breakpoints when Lagrange is built as toplevel project
    • Added utility functions to enable/disable this behavior at runtime
    • Add wrapper LA_REQUIRE_THROWS to test exception behavior without triggering a debugger breakpoint

Dependencies

  • CLI11 updated to v2.1.2
  • OneTBB updated to 2021.6.0-rc1
  • [UI] ImGui updated to v1.87

Bugfixes

  • Fixed OneTBB static linking issues on Linux

UI module

  • IBL performance improvements
    • Lowering default ibl resolution to speed up loading time
    • Removing all default ibls except one (studio011) to reduce binary size
    • Added save_ibl function and a save button in ibl widget
    • Texture::save_to supports mip levels now

Lagrange Release v5.7.0

02 Feb 19:59
Compare
Choose a tag to compare

Infrastructure

  • CMake: use stricter warning flags on macOS/Linux​ (enabled for toplevel builds, disabled for subproject builds)
  • Updated CMake integration. Rather than using CMake options to enable additional Lagrange module, users should now prefer to call the helper functions lagrange_include_module(io ui ...) to import additional Lagrange module in client projects.
  • Updated assert macros​
    • LA_ASSERT() --> la_runtime_assert(x[, msg])
    • LA_ASSERT_DEBUG --> la_debug_assert(x[, msg])​
    • Behaves as a function (la_runtime_assert(x) && x)​
    • Optional break into debugger on assert failure (CMake option: LAGRANGE_ASSERT_DEBUG_BREAK)​

Dependencies

  • [Core] Updated Eigen to 3.4.0
  • [IO] Updated tinyobjloader version
  • [UI] Native File Dialog replaced by Portable File Dialogs

Bugfixes

  • [Core] Fix non-finite weights in compute_vertex_normal​
  • [IO] Preserve attributes when combining obj meshes​

Lagrange Release v5.6.0

13 Dec 23:49
Compare
Choose a tag to compare

Dependencies

  • Updated TBB to 2021.4

Infrastructure

  • Cleanup

Lagrange Release v5.5.0

10 Nov 20:07
Compare
Choose a tag to compare

Features/bugfixes

  • Thicken mesh: add segments along stitch
  • Colorspace fixes in the UI module

Dependencies

  • Updated ImGui to 1.85

Infrastructure

  • Migrate binary unit test data to msgpack
  • Hide slow tests in Debug mode
  • Fix CMake options for subproject use
  • Add CMake option to use ccache (ON by default if ccache is found)​

Lagrange Release v5.4.0

06 Oct 17:46
Compare
Choose a tag to compare

Core/Infrastructure

  • Add CMake preset support.
  • Update CMake and python scripts to use presets.
  • Compilation speed reduction via better precompiled headers and smaller common headers.

UI

  • Add support to allow user to add shader file.
  • Multiple bug fixes in gizmo bounds, shadowmaps, widget code for Material and aspect ratio.
  • Performance optimization.
  • Adding extra outputs to glsl shadow/shading utility functions.
  • Shadow map filter radius is parametrized now.
  • Allow depth map export.
  • Added ability for threads to enqueue work for main thread.
  • Added an ability to pass shader #define when creating a Material.

Lagrange Release v5.3.0

02 Sep 01:12
Compare
Choose a tag to compare

Breaking Changes

  • Removed deprecated edge API. Methods using the new edge API no longer have the _new suffix added to their name.
  • offset_and_close_mesh has been renamed thicken_and_close_mesh

Infrastructure

  • Support for Apple M1 and Universal Binaries
  • Fix warnings on macOS
  • Minor CMake improvements
    • Allow/block-list of Lagrange modules
    • Show FS backend options in CMake-GUI
  • Generalize the offset function to work off vertex normals

Lagrange Release v5.2.0

04 Aug 15:47
Compare
Choose a tag to compare

Infrastructure

  • Added support for OneTBB, updated Embree/OpenVDB. New CMake flag LAGRANGE_WITH_ONETBB=On
  • Various CMake bugfixes and improvements
  • Improved Emscripted support
  • Performance tests are now OFF by default
  • Fix for open-source repo

Core

  • Added support for mapping vertex, facet, and corner attribute in unify_index_buffer
  • Removed size_t from serializable types
  • Refactored warning-suppression macros
  • Added support to clear edge data: mesh->clear_edge_data_new();

IO

  • Added support for saving UV as SVG

UI Module

  • Documentation
  • Metabuild can now build UI
  • Customizable .ini location and better default
  • Events for hover and selection
  • User can now edit default systems

Lagrange Release v5.1.0

23 Jul 02:55
Compare
Choose a tag to compare

Core/Infrastructure

  • Add CMake option to disable floating point exception.

UI Module

  • Correct handling of empty input.
  • Bug fix related auto and Eigen.
  • Moved main loop callback to allow imgui calls.
  • Remove unused variable.