v0.22.0

Release date: 2025-11-10

Early Access

The Luminary Cloud API and Python SDK are Early Access features that are still under development. View the Luminary Cloud Early Access Terms. The interface may change, and you may need to migrate or discard scripts and configuration files multiple times before v1.0.0 is released. In the future, migrations may also be necessary when upgrading to new major versions of the SDK (e.g. v2.0.0).

Release Notes

This release includes a few new features and improvements and two breaking changes.

Breaking Changes

  • To match the web app behavior, the default strategy in MeshGenerationParams has been changed from MaxCount to Minimal.

  • Setting the angle of VolumeSelection.circular_pattern() to 360 degrees no longer distributes the volume evenly throughout the circle (instead, it places the last copy at the starting position; the old behavior is now behind the full_rotation parameter).

Features

  • Added a new stitch method to VolumeSelection. Stitching no longer happens automatically at import (see the platform release notes for details).

  • VolumeSelection.circular_pattern() now accepts parameters full_rotation: bool and symmetric: bool which are used to request a full 360-degree rotation or a symmetric pattern, respectively.

  • Boolean operations on VolumeSelection (union, subtract, intersection, chop) now accept keep, keep_source_bodies, and keep_tool_bodies options, which were previously present in the web app.

  • Added a new Geometry.delete() method to allow deletion of geometry entities.

Deprecations

None.

Bug Fixes / Improvements

  • Improvement: All methods of a Geometry that add or modify tags will now return the updated Tag object.

Migration Guide

  • If you have code that constructs MeshGenerationParams without specifying a sizing strategy, you must now pass sizing_strategy=lc.meshing.sizing_strategy.MaxCount(10_000_000) to MeshGenerationParams to preserve existing behavior.

  • If you have code that calls circular_pattern() with an angle of 360 degrees, you must now pass full_rotation=True to preserve existing behavior.