Releases: adobe/lagrange
Releases Β· adobe/lagrange
Lagrange Release v6.10.0
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 tolagrange::extract_submesh
lagrange::separate_by_components
lagrange::separate_by_facet_groups
- Move
lagrange::RemapVerticesOptions::CollisionPolicy
tolagrange::MappingPolicy
- Move
lagrange::ComonentOptions::ConnectivityType
tolagrange::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
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
andpathlib.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()
andcreate_test_sphere()
- Added compilation tests that are meant to fail at compile-time.
Lagrange Release v6.8.0
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 tolegacy/
subfolder
- Added centroid computation functions in
compute_centroid.h
compute_facet_centroid()
compute_mesh_centroid()
- Old
compute_facet_centroid.h
header moved tolegacy/
subfolder
- Added vertex reordering functions:
permute_vertices()
, for bijective remappings (faster)remap_vertices()
for surjective remappings.reorder_mesh_vertices.h
header moved tolegacy/
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
- Added area computation functions in
- 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.
- A
- 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 thehull
module) - Both winding and volume modules support SurfaceMesh
volume_to_mesh
now outputs quad-dominant meshesmesh_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
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
renamedStackSet
for consistency- Old alias kept for backward compatibility
- Fixed data-races in core module:
unify_index_buffer()
for newSurfaceMesh
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
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 toutils/
quad_to_tri
moved tolegacy/
- Added
AdjacencyList
data structure SurfaceMesh::add_vertices
,SurfaceMesh::add_triangles
, etc. now support initializer listsAttribute::insert_elements
now support initializer lists- New helpers in
views.h
:attribute_matrix_view(mesh, name)
andattribute_vector_view(mesh, name)
- Added a debug check when trying to use an attribute by ID
- New X macros:
LA_ATTRIBUTE_INDEX_X
andLA_ATTRIBUTE_SCALAR_X
- Fixed data race in
compute_normal
- New
AttributeUsage
enum forTangent
/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
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 forcombine_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
andnumpy.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.
- Can be installed via pip:
Lagrange Release v6.4.0
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
toSurfaceMesh::get_corner_edge
. - Add new overload to
SurfaceMesh::create_attribute
. - Add
static_read
andstatic_write
support forcopy_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
andcompute_weighted_corner_normal
support. - Add
normalize_mesh
support. - Start to incrementally move functions based on
Mesh
data structure tolegacy
namespace. - Add
LAGRANGE_ENABLE_LEGACY_FUNCTIONS
option in CMake andlagrange.enable_legacy
option in MetaBuild. This option controls whether to build/include function under legacy namespace. Default isOn
.
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
Infrastructure
- [Emscripten] Fixed build on Windows for Emscripten/Ninja/Clang
- [Doxygen] Fixed header incldue paths for functions
Surface Mesh
- Added
map_attribute
andmap_attribute_in_place
inlagrange/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
Infrastructure
- Renamed old
SmallVector
class toStackVector
- 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 supportsSurfaceMesh
objects - Added
compute_facet_normal()
forSurfaceMesh
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()
andref_facets()
methods to the legacyMesh()
class, to allow wrapping as non-const buffer in the newSurfaceMesh
class. - Added an overload to
SurfaceMesh::initialize_edges()
that uses a callback function to specify an arbitrary ordering. - Added utility functions
reshaped_view
andreshaped_ref
to view a single-channel attribute as a 2D matrix for regular meshes, similar to howfacet_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
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
- Added support to triangulate a polygonal mesh.
- Cleaned up
lagrange::range()
and dropped support forrange_vertices()
,range_facets()
androw_range()
.
IO module
- Added MSH format support via MshIO.
- Clean up polygonal IO.