Skip to content

Releases: adobe/lagrange

Lagrange Release v6.10.0

04 Apr 21:06
ef0bd48
Compare
Choose a tag to compare

Infrastructure

  • Dependencies
    • Updated spdlog to v1.11.0
    • Updated nanobind to v1.0.0

Build system

  • CMake:
    • Fix stb installation issue

Core module

  • Add SurfaceMesh support to
    • lagrange::extract_submesh
    • lagrange::separate_by_components
    • lagrange::separate_by_facet_groups
  • Move lagrange::RemapVerticesOptions::CollisionPolicy to lagrange::MappingPolicy
  • Move lagrange::ComonentOptions::ConnectivityType to lagrange::ConnectivityType

IO module

  • Add support for saving to and loading from stream
  • Memory bug fix in gltf io
  • Avoid creating temporary files in unit tests

Testing module

  • Add command line logging level control (e.g. --log-level 2) to all unit tests

Lagrange Release v6.9.0

09 Mar 23:59
d47c7aa
Compare
Choose a tag to compare

Infrastructure

  • Dependencies
    • Updated nlohmann/json to 3.11.2
    • Updated stb
    • Updated Dear ImGui to 1.89.3
    • Updated TinyGLTF to 2.8.3
    • Updated CLI11 to v2.3.2
    • Updated Embree to v3.13.5
    • Updated span-lite

Build system

  • CMake
    • Improved stb recipe
    • Fixed an issue with MKL on linux and MacOS with static linking
  • Added /permissive- flag on windows, for top-level build

Core module

  • Fixed unify_index_buffer
  • Fixed many warnings, added -Werror to core tests
  • Added SurfaceMesh support for compute_uv_distortion. Supports dirichlet, inverse dirichlet, symmetric dirichlet, area ratio, and MIPS.

Python bindings

  • Added python bindings to IO module
  • Added conversion between lagrange::fs::path and pathlib.Path
  • Added SurfaceMesh.get_matching_attribute_ids

Testing

  • Added mesh equivalence check: ensure_approx_equivalent_mesh(), ensure_approx_equivalent_usage(), attribute_is_approx._equivalent()
  • Added SurfaceMesh creation functions create_test_cube() and create_test_sphere()
  • Added compilation tests that are meant to fail at compile-time.

Lagrange Release v6.8.0

08 Feb 23:57
0f83ddf
Compare
Choose a tag to compare

Infrastructure

  • Requirements
    • Updated minimum CMake version to 3.24
    • Updated minimum macOS deployment target to 10.15
    • FS module now defaults to std::fileystem backend
  • Dependencies
    • OpenSubdiv updated to 3.4.4
    • Assimp updated to 5.2.5
    • Spdlog updated to 1.10.0
    • Fmt updated to 8.1.1

Build System

  • [build] Fixed compilation warnings
  • [cmake] Use official target name for ghc filesystem
  • [cmake] Set CMP0135 default to NEW (extracted content timestamp)
  • [cmake] On Windows, build OpenVDB as shared lib
  • [cmake] Enable warning as error for top level builds (core, scene, decimation & python modules)

New Open-Source Modules

  • scene: Simple data structure representing a simple scene with instanced meshes.
  • winding: A wrapper over the reference implementation of fast winding numbers for robust interior queries.

Core Module

  • SurfaceMesh support
    • Added area computation functions in compute_area.h:
      • compute_facet_area()
      • compute_mesh_area()
      • Old compute_facet_area.h header moved to legacy/ subfolder
    • Added centroid computation functions in compute_centroid.h
      • compute_facet_centroid()
      • compute_mesh_centroid()
      • Old compute_facet_centroid.h header moved to legacy/ subfolder
    • Added vertex reordering functions:
      • permute_vertices(), for bijective remappings (faster)
      • remap_vertices() for surjective remappings.
      • reorder_mesh_vertices.h header moved to legacy/ subfolder
    • Imlemented SurfaceMesh::compress_if_regular().
      This method compresses the storage of regular meshes with hybrid storage.
    • Attribute views now return a const Eigen::Map<...>.
      This allows using range-based for loops on rows/cols of attribute views.
    • Fixed a bug in surface mesh validity check in unit tests
  • New header <lagrange/utils/hash.h> providing:
    • A hash_combine() function based on Boost's eponymous function.
    • A OrderedPairHash helper class for hashing pairs and tuples in unordered sets/maps.
  • New utility function segment_segment_squared_distance()
  • Moved the following headers to the utils/ subfolder:
    • point_on_segment.h
    • point_segment_squared_distance.h
    • point_triangle_squared_distance.h
  • Deprecated get_opposite_edge() function

Python Bindings

  • Python module requires CMake option TBB_PREFER_STATIC to be off.
  • Lagrange wheel binary will ship with TBB dynamic library.
  • lagrange-python-example repo is updated.
  • New python constants:
    • lagrange.invalid_index
    • lagrange.invalid_scalar
  • New python functions:
    • lagrange.compute_facet_area
    • lagrange.compute_facet_centroid
    • lagrange.compute_mesh_centroid
    • lagrange.permute_vertices
    • lagrange.remap_vertices
  • New scene python module: import lagrange.scene

Raycasting Module

  • Restored RaycasterMesh-related methods
    • EmbreeRayCaster::add_raycasting_mesh()
    • EmbreeRayCaster::update_raycasting_mesh()
    • Made those methods public

IO Module

  • Deprecated legacy mesh IO (moved to legacy/ subfolder)
  • Added support for SurfaceMesh IO
  • Improved attribute support
  • Consistent save/load API across the IO module
  • Fix OBJ loading attribute indexing for files with multiple shapes
  • Added glTF import and export for mesh and scenes
  • Added SimpleScene load and save methods

Winding Module

  • New open-source winding module for fast winding number (previously: part of the hull module)
  • Both winding and volume modules support SurfaceMesh
    • volume_to_mesh now outputs quad-dominant meshes
    • mesh_to_volume inputs can be quad-dominant meshes
  • Added robust volume signing method for mesh_to_volume()

UI Module

  • Made Viewer::get_config_folder() public for downstream apps.
  • Expose select() function to implement new types of selection.
  • Fix compilation issues with recent fmt version.

Lagrange Release v6.7.0

08 Dec 01:57
b520676
Compare
Choose a tag to compare

Infrastructure

  • Continuous Integration
    • Added GitHub Actions to open-source repository
  • Dependencies
    • Updated Clipper2 to v1.0.6 (new header location)
    • Updated oneTBB version for macOS universal build
    • Updated ImGui to v1.89
    • Updated FontAwesome from 5 to 6.2
    • Updated GLFW key codes -> ImGuiKey codes in the Lagrange UI

Core Module

  • SmallSet renamed StackSet for consistency
    • Old alias kept for backward compatibility
  • Fixed data-races in core module:
    • unify_index_buffer() for new SurfaceMesh
    • compute_vertex_vertex_adjacency()
    • Fixed problematic copy_on_write_ptr implementation
  • Bugfix in internal::find_or_create_attribute() function

Documentation

  • Updated page groups in Doxygen documentation
  • Added bibtex references to markdown website
  • Updated Mesh Utilities + General Utilities pages

Lagrange Release v6.6.0

01 Nov 20:21
Compare
Choose a tag to compare

Infrastructure

  • Dependency updates:
    • Mshio
    • OpenVDB to 10.0.0
    • nanobind
    • OneTBB to 2021.7.0

SurfaceMesh

  • Added tangent space computation support for SurfaceMesh
    • Added unit test comparing results with mikktspace implementation
  • Added support for SurfaceMesh in:
    • compute_components (support both vertex-based and edge-based adjacency)
    • dijkstra (internal function)
    • compute_vertex-valence
    • compute_vertex_vertex_adjacency
  • DisjointSets moved to utils/
  • quad_to_tri moved to legacy/
  • Added AdjacencyList data structure
  • SurfaceMesh::add_vertices, SurfaceMesh::add_triangles, etc. now support initializer lists
  • Attribute::insert_elements now support initializer lists
  • New helpers in views.h: attribute_matrix_view(mesh, name) and attribute_vector_view(mesh, name)
  • Added a debug check when trying to use an attribute by ID
  • New X macros: LA_ATTRIBUTE_INDEX_X and LA_ATTRIBUTE_SCALAR_X
  • Fixed data race in compute_normal
  • New AttributeUsage enum for Tangent/Bitangent

Python Bindings

Added support for more functions: compute_vertex_normal, compute_facet_normal, compute_normal, combine_meshes, unify_index_buffer, triangulate_polygonal_facets, compute_tangent_bitangent, compute_vertex_valence, compute_components, map_attribute, map_attribute_in_place.

UI Module

  • Fixed path for ImGui config file
  • Added option to disable top bar menu
  • Added option to turn off panels or entities from the Scene panel
  • Customize the silhouette color of selected objects
  • Customize (remove some of) the selection tools
  • Added support for back-face shading

Lagrange Release v6.5.0

04 Oct 20:48
Compare
Choose a tag to compare

Infrastructure

  • Dependency updates
    • Updated libigl to latest (v2.4.0+)
    • Updated OneTBB to v2021.6.0
  • Added VERSION file (used by CMake/Python package)
  • CMake
    • Fix overwrite of TBB_DIR in embree.cmake
    • Use official libigl CMake targets (allows using igl::glfw for the viewer)

Core Module

  • Minor bugfix in map_attribute.
  • Added AttributeCopyPolicy to specify behavior when CoW external buffers (default: copy).
  • Added options to recompute & discard intermediate results in compute_normal.
  • Added SurfaceMesh support for combine_meshes
    • Comparable performances with legacy code
    • Support edge attributes and custom edge ordering
    • Support attributes with VertexIndex/FacetIndex/... usages
  • SurfaceMesh attributes now support tracking ownership of external buffers

Python Bindings

  • New python bindings for our SurfaceMesh class:
    • Can be installed via pip:
      pip install [email protected]:adobe/lagrange.git
      
    • Passing data between C++ and Numpy without copy.
      • Extensive use of Nanobind's tensor API.
      • Both SurfaceMesh and numpy.ndarray are able to wrap around external buffers.
    • Built-in memory ownership tracking mechanism.
      • Memory managed by python: tracked with Attribute's external buffer ownership tracking.
      • Memory managed by C++: tracked using Nanobind's tensor ownership setting.
    • Pythonic API.
      • Designed to interop with native python objects.
      • Getter/setter are exposed as properties.

Lagrange Release v6.4.0

08 Sep 01:39
Compare
Choose a tag to compare

Infrastructure

  • Update Catch2 to v3.
  • Fix empty string warning in CMake.

Core module

  • Remove libigl dependency in core module.
  • Ensure la_debug_assert has no side effect.
  • Fix NaN issue in internal_angle.

SurfaceMesh updates

  • Rename SurfaceMesh::get_edges_from_corner to SurfaceMesh::get_corner_edge.
  • Add new overload to SurfaceMesh::create_attribute.
  • Add static_read and static_write support for copy_on_write_ptr.
  • Fix wrong attribute name in output of map_attribute_in_place
  • Fix function signature for vector_view.
  • Add compute_normal, compute_vertex_normal and compute_weighted_corner_normal support.
  • Add normalize_mesh support.
  • Start to incrementally move functions based on Mesh data structure to legacy namespace.
  • Add LAGRANGE_ENABLE_LEGACY_FUNCTIONS option in CMake and lagrange.enable_legacy option in MetaBuild. This option controls whether to build/include function under legacy namespace. Default is On.

File system module

  • Fix missing include when using std::filesystem backend.

New modules

  • bvh: computing boundary volumn hierarchies.
  • partitioning: paritioning mesh vertices based on METIS.
  • raycasting: ray casting based on Embree.
  • subdivision: subdivision surfaces based on OpenSubdiv.
  • volume: volumetric data based on OpenVDB.

Lagrange Release v6.3.0

12 Jul 22:58
Compare
Choose a tag to compare

Infrastructure

  • [Emscripten] Fixed build on Windows for Emscripten/Ninja/Clang
  • [Doxygen] Fixed header incldue paths for functions

Surface Mesh

  • Added map_attribute and map_attribute_in_place in lagrange/map_attribute.h

UI

  • Fixed assimp importer for importing scene nodes
  • Updated ImGui to 1.88
  • Updated ImGuizmo to the latest version

Lagrange Release v6.2.0

08 Jun 16:52
Compare
Choose a tag to compare

Infrastructure

  • Renamed old SmallVector class to StackVector
  • Added new SmallVector class in core that can grow beyond the initial stack allocation by using the heap.
  • Update NanoSVG CMake recipe
  • Update MshIO to fix linking warning
  • Update PortableFileDialog to fix macOS file filtering bug
  • Fix Doxygen documentation

New SurfaceMesh Features

  • Function unify_index_buffer() now supports SurfaceMesh objects
  • Added compute_facet_normal() for SurfaceMesh objects
  • New mesh conversion utilities in <lagrange/mesh_convert.h>:
    • to_surface_mesh_copy()
    • to_surface_mesh_wrap()
    • to_legacy_mesh() (will always copy)
  • Added ref_vertices() and ref_facets() methods to the legacy Mesh() class, to allow wrapping as non-const buffer in the new SurfaceMesh class.
  • Added an overload to SurfaceMesh::initialize_edges() that uses a callback function to specify an arbitrary ordering.
  • Added utility functions reshaped_view and reshaped_ref to view a single-channel attribute as a 2D matrix for regular meshes, similar to how facet_view works.

UI Module

  • Open + save file dialogs now support WebAssembly
  • New abstract class representing path object. This class uses RAII to transparently handle cleanup operations required by the WebAssembly implementation of open/save dialogs, e.g.:
    • Remove object from tmp file system on destruction
    • Download output file on destruction

Lagrange Release v6.1.0

03 May 15:59
Compare
Choose a tag to compare

Infrastructure

  • Added documentation for open source repo.
  • Minor cmake and documentation cleanup.

Core module

  • Update to polygonal mesh API:
    • Added SurfaceMesh::get_attribute_name() .
    • Released requirement for Attribute::get()
  • Added support to triangulate a polygonal mesh.
  • Cleaned up lagrange::range() and dropped support for range_vertices(), range_facets() and row_range().

IO module

  • Added MSH format support via MshIO.
  • Clean up polygonal IO.