Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
7b38ba7
Fix return types and color band range (#5)
osinjoku Sep 12, 2025
cb5f8d1
point to pypi (#3)
osinjoku Sep 22, 2025
de531bf
Bring relevant changes to the v26 release branch (#24)
osinjoku Oct 10, 2025
c8e0789
Fix readme links on pypi release 26 (#28)
osinjoku Oct 28, 2025
86035b8
Expose GeomType enum in package __init__.py and Enum Value correction…
sankalps0549 Dec 11, 2025
a999607
Fix cad_mesh_grading_factor to accept float values and remove incorre…
Copilot Dec 12, 2025
9fb0b05
Introduce Sphinx Versioning (#58)
sankalps0549 Jan 14, 2026
a2a423e
Updating publish workflow (#59)
sankalps0549 Jan 14, 2026
48ec7ad
Support local builds for a single version and redirect root to latest…
sankalps0549 Jan 16, 2026
6db44da
Squashed internal changes from origin/internal/main into public/main\…
Jan 19, 2026
60f6630
fix version
osinjoku Jan 19, 2026
3ebf9f2
docs: Update CHANGELOG for PR #62 — document removal of GradingFactor…
osinjoku Jan 19, 2026
67c63c7
docs: Expand Unreleased changelog to reflect all changes in PR #62
osinjoku Jan 19, 2026
a1a202f
docs: Restore original changelog section headings and organize new en…
osinjoku Jan 19, 2026
0c5986d
docs: Add deprecations from PRs 110 and 97 to Unreleased section
osinjoku Jan 19, 2026
5856076
update cl
osinjoku Jan 19, 2026
3a1a512
docs version
osinjoku Jan 19, 2026
059c76a
docs: Normalize CHANGELOG after merge with release/26
osinjoku Jan 20, 2026
907378b
docs: Normalize CHANGELOG (remove duplicated block after merge with r…
osinjoku Jan 20, 2026
50ec64f
docs: Fix CHANGELOG duplication and indentation
osinjoku Jan 20, 2026
f44b819
docs: Tidy CHANGELOG formatting
osinjoku Jan 20, 2026
79d3d5b
normalise deprecations
osinjoku Jan 20, 2026
c171a1a
Update CHANGELOG.md
osinjoku Jan 20, 2026
3e31cc8
Remove duplicate CHANGELOG entry from Unreleased section (#63)
Copilot Jan 20, 2026
b6da6d5
Update src/moldflow/helper.py
osinjoku Jan 20, 2026
54a963b
Update src/moldflow/mesh_editor.py
osinjoku Jan 20, 2026
78fc0ef
remove changelog duplicates
osinjoku Jan 20, 2026
07bebb7
Merge branch 'internal/publish/20260119T083059Z' of https://github.co…
osinjoku Jan 20, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
62 changes: 60 additions & 2 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,41 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0

### Added
- Python 3.14 support
- New wrapper and documentation for `AnimationExportOptions` (`src/moldflow/animation_export_options.py` and docs/source/components/wrapper/animation_export_options.rst).
- New wrapper and documentation for `ImageExportOptions` (`src/moldflow/image_export_options.py` and docs/source/components/wrapper/image_export_options.rst).
- Added `CADDiagnostic` wrapper and documentation (`src/moldflow/cad_diagnostic.py`, docs/source/components/wrapper/cad_diagnostic.rst).
- Added and updated unit tests covering animation/image export options, CAD diagnostic, import options, mesh editor, plot manager, study document handling, synergy, and viewer (tests/api/unit_tests/* and tests/core/test_helper.py).

### Changed
- API improvements and helper additions across mesh editing, plotting, study documents, Synergy integration, and the viewer (`src/moldflow/mesh_editor.py`, `src/moldflow/plot_manager.py`, `src/moldflow/study_doc.py`, `src/moldflow/synergy.py`, `src/moldflow/viewer.py`).
- Added/updated component enum docs and wrapper docs (docs/source/components/enums/*, docs/source/components/wrapper/*) and updated project readme (docs/source/readme.rst).

### Deprecated
- Deprecated several legacy Viewer functions and MeshGenerator/ImportOptions properties in preparation for Synergy 2027.0.0:
- `Viewer.save_image_legacy`
- `Viewer.save_image`
- `Viewer.save_animation`
- `ImportOptions.mdl_kernel`
- `MeshGenerator.automatic_tetra_optimization`
- `MeshGenerator.element_reduction`
- `MeshGenerator.use_fallbacks`
- `MeshGenerator.use_tetras_on_edge`
- `MeshGenerator.tetra_max_ar`
- Added deprecation warnings and clarified FillHole API redesigns

### Removed
- N/A

### Fixed
- N/A

### Security
- N/A

## [26.0.5]

### Added
- N/A

### Changed
- `MeshGenerator.cad_mesh_grading_factor` now accepts `float` values in range 0.0 to 1.0 instead of enum/integer-coded options
Expand All @@ -20,12 +55,33 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- `GradingFactor` enum - incorrectly restricted the API to discrete values when the COM API accepts continuous float values from 0.0 to 1.0

### Fixed
- Fixed `GeomType` enum not being exposed in package `__init__.py` - users can now import it directly with `from moldflow import GeomType`
- Fixed `MeshGenerator.cad_mesh_grading_factor` to properly accept float/double values matching the COM API signature instead of restricting to enum values

### Security
- N/A

## [26.0.4]

### Added
- N/A

### Changed
- N/A

### Deprecated
- N/A

### Removed
- N/A

### Fixed
- Fixed `GeomType` enum not being exposed in package `__init__.py` - users can now import it directly with `from moldflow import GeomType`
- Fixed invalid `DUAL_DOMAIN` enum value in `GeomType` - replaced with `FUSION = "Fusion"` to match valid Moldflow API values
- Fixed missing `-> bool` return type annotations for `MeshGenerator.generate()` and `MeshGenerator.save_options()` methods

### Security
- N/A

## [26.0.3]

### Added
Expand Down Expand Up @@ -94,7 +150,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- Initial version aligned with Moldflow Synergy 2026.0.1
- Python 3.10-3.13 compatibility

[Unreleased]: https://github.com/Autodesk/moldflow-api/compare/v26.0.3...HEAD
[Unreleased]: https://github.com/Autodesk/moldflow-api/compare/v26.0.5...HEAD
[26.0.5]: https://github.com/Autodesk/moldflow-api/releases/tag/v26.0.5
[26.0.4]: https://github.com/Autodesk/moldflow-api/releases/tag/v26.0.4
[26.0.3]: https://github.com/Autodesk/moldflow-api/releases/tag/v26.0.3
[26.0.2]: https://github.com/Autodesk/moldflow-api/releases/tag/v26.0.2
[26.0.1]: https://github.com/Autodesk/moldflow-api/releases/tag/v26.0.1
Expand Down
12 changes: 9 additions & 3 deletions docs/source/_static/switcher.json
Original file line number Diff line number Diff line change
@@ -1,9 +1,15 @@
[
{
"version": "v27.0.0",
"name": "v27.0.0 (latest)",
"url": "../v27.0.0/",
"is_latest": true
},
{
"version": "v26.0.5",
"name": "v26.0.5 (latest)",
"name": "v26.0.5",
"url": "../v26.0.5/",
"is_latest": true
"is_latest": false
},
{
"version": "v26.0.4",
Expand Down Expand Up @@ -35,4 +41,4 @@
"url": "../v26.0.0/",
"is_latest": false
}
]
]
4 changes: 4 additions & 0 deletions docs/source/components/enums/capture_modes.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CaptureModes
============

.. autoclass:: moldflow.common::CaptureModes
4 changes: 0 additions & 4 deletions docs/source/components/enums/mdl_kernel.rst

This file was deleted.

4 changes: 4 additions & 0 deletions docs/source/components/wrapper/animation_export_options.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
AnimationExportOptions
======================

.. automodule:: moldflow.animation_export_options
4 changes: 4 additions & 0 deletions docs/source/components/wrapper/cad_diagnostic.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
CADDiagnostic
=============

.. automodule:: moldflow.cad_diagnostic
4 changes: 4 additions & 0 deletions docs/source/components/wrapper/image_export_options.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ImageExportOptions
==================

.. automodule:: moldflow.image_export_options
3 changes: 1 addition & 2 deletions docs/source/readme.rst
Original file line number Diff line number Diff line change
Expand Up @@ -692,7 +692,7 @@ Configure Import Options Before CAD Import
.. code-block:: python

from moldflow import Synergy
from moldflow.common import MeshType, ImportUnits, MDLKernel
from moldflow.common import MeshType, ImportUnits

synergy = Synergy()
io = synergy.import_options # ImportOptions
Expand All @@ -701,7 +701,6 @@ Configure Import Options Before CAD Import
io.mesh_type = MeshType.MESH_FUSION
io.units = ImportUnits.MM
io.use_mdl = True
io.mdl_kernel = MDLKernel.PARASOLID
io.mdl_mesh = True
io.mdl_surfaces = True
io.mdl_auto_edge_select = True
Expand Down
5 changes: 4 additions & 1 deletion src/moldflow/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,15 +7,18 @@
A Python wrapper for the Autodesk Moldflow Synergy API.
"""

from .animation_export_options import AnimationExportOptions
from .boundary_conditions import BoundaryConditions
from .boundary_list import BoundaryList
from .cad_diagnostic import CADDiagnostic
from .cad_manager import CADManager
from .circuit_generator import CircuitGenerator
from .data_transform import DataTransform
from .diagnosis_manager import DiagnosisManager
from .double_array import DoubleArray
from .ent_list import EntList
from .folder_manager import FolderManager
from .image_export_options import ImageExportOptions
from .import_options import ImportOptions
from .integer_array import IntegerArray
from .layer_manager import LayerManager
Expand Down Expand Up @@ -53,6 +56,7 @@
from .common import AnimationSpeed
from .common import CADBodyProperty
from .common import CADContactMesh
from .common import CaptureModes
from .common import ClampForcePlotDirection
from .common import ColorScaleOptions
from .common import ColorTableIDs
Expand All @@ -79,7 +83,6 @@
from .common import Mesher3DType
from .common import MoldingProcess
from .common import MDLContactMeshType
from .common import MDLKernel
from .common import MeshType
from .common import ModulusPlotDirection
from .common import NurbsAlgorithm
Expand Down
198 changes: 198 additions & 0 deletions src/moldflow/animation_export_options.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,198 @@
"""
Usage:
AnimationExportOptions Class API Wrapper
"""

from .logger import process_log, LogMessage
from .helper import (
check_type,
check_is_non_negative,
get_enum_value,
check_range,
check_file_extension,
)
from .common import AnimationSpeed, CaptureModes
from .constants import MP4_FILE_EXT, GIF_FILE_EXT, ANIMATION_SPEED_CONVERTER


class AnimationExportOptions:
"""
Wrapper for AnimationExportOptions class of Moldflow Synergy.
"""

def __init__(self, _animation_export_options):
"""
Initialize the AnimationExportOptions with a AnimationExportOptions instance from COM.

Args:
_animation_export_options: The AnimationExportOptions instance.
"""
process_log(__name__, LogMessage.CLASS_INIT, locals(), name="AnimationExportOptions")
self.animation_export_options = _animation_export_options

@property
def file_name(self) -> str:
"""
The file name.

:getter: Get the file name.
:setter: Set the file name.
:type: str
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="file_name")
return self.animation_export_options.FileName

@file_name.setter
def file_name(self, value: str) -> None:
"""
Set the file name.

Args:
value (str): The file name to set.
"""
process_log(__name__, LogMessage.PROPERTY_SET, locals(), name="file_name", value=value)
check_type(value, str)
value = check_file_extension(value, (MP4_FILE_EXT, GIF_FILE_EXT))
self.animation_export_options.FileName = value

# Remove the function when legacy support is removed.
def _convert_animation_speed(self, speed: AnimationSpeed | int | str) -> str:
"""
Convert animation speed to string for legacy support.
"""
speed = get_enum_value(speed, AnimationSpeed)
return ANIMATION_SPEED_CONVERTER[speed]

@property
def animation_speed(self) -> int:
"""
Animation speed (Slow=0, Medium=1, Fast=2).

:default: Medium(1)
:getter: Get the animation speed.
:setter: Set the animation speed.
:type: int
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="animation_speed")
return self.animation_export_options.AnimationSpeed

@animation_speed.setter
def animation_speed(self, value: AnimationSpeed | int) -> None:
"""
The animation speed.

Args:
value (int): The animation speed to set.
"""
process_log(
__name__, LogMessage.PROPERTY_SET, locals(), name="animation_speed", value=value
)
if isinstance(value, AnimationSpeed):
value = self._convert_animation_speed(value)
else:
check_type(value, int)
check_range(value, 0, 2, True, True)
self.animation_export_options.AnimationSpeed = value

@property
def show_prompts(self) -> bool:
"""
Whether to show prompts during the export process.

:default: True
:getter: Get show_prompts.
:setter: Set show_prompts.
:type: bool
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="show_prompts")
return self.animation_export_options.ShowPrompts

@show_prompts.setter
def show_prompts(self, value: bool) -> None:
"""
Set whether to show prompts during the export process.

Args:
value (bool): Show prompts or not.
"""
process_log(__name__, LogMessage.PROPERTY_SET, locals(), name="show_prompts", value=value)
check_type(value, bool)
self.animation_export_options.ShowPrompts = value

@property
def size_x(self) -> int:
"""
The X size (width) of the image.

:default: 800
:getter: Get the X size.
:setter: Set the X size.
:type: int (positive)
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="size_x")
return self.animation_export_options.SizeX

@size_x.setter
def size_x(self, value: int) -> None:
"""
Set the X size (width) of the image.

Args:
value (int): The X size to set (must be positive).
"""
process_log(__name__, LogMessage.PROPERTY_SET, locals(), name="size_x", value=value)
check_type(value, int)
check_is_non_negative(value)
self.animation_export_options.SizeX = value

@property
def size_y(self) -> int:
"""
The Y size (height) of the image.

:default: 600
:getter: Get the Y size.
:setter: Set the Y size.
:type: int (positive)
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="size_y")
return self.animation_export_options.SizeY

@size_y.setter
def size_y(self, value: int) -> None:
"""
Set the Y size (height) of the image.

Args:
value (int): The Y size to set (must be positive).
"""
process_log(__name__, LogMessage.PROPERTY_SET, locals(), name="size_y", value=value)
check_type(value, int)
check_is_non_negative(value)
self.animation_export_options.SizeY = value

@property
def capture_mode(self) -> int:
"""
The capture mode.

:default: Active View(0)
:getter: Get the capture mode.
:setter: Set the capture mode.
:type: int
"""
process_log(__name__, LogMessage.PROPERTY_GET, locals(), name="capture_mode")
return self.animation_export_options.CaptureMode

@capture_mode.setter
def capture_mode(self, value: CaptureModes | int) -> None:
"""
Set the capture mode.

Args:
value (CaptureModes | int): Capture mode to set.
"""
process_log(__name__, LogMessage.PROPERTY_SET, locals(), name="capture_mode", value=value)
value = get_enum_value(value, CaptureModes)
check_range(value, 0, 2, True, True)
self.animation_export_options.CaptureMode = value
Loading