Skip to content

C++ Exporter [SYNTH-107] - #1290

Merged
PepperLola merged 41 commits into
feat/cpp-exporterfrom
branp/1970/isotope
Jul 9, 2026
Merged

C++ Exporter [SYNTH-107]#1290
PepperLola merged 41 commits into
feat/cpp-exporterfrom
branp/1970/isotope

Conversation

@BrandonPacewic

@BrandonPacewic BrandonPacewic commented Aug 20, 2025

Copy link
Copy Markdown
Member

SYNTH-107

Initial implementation of Isotope, a C++ Fusion 360 add-in that replaces the existing Python exporter.

This is an opinionated PR; please include an opinionated review.

This includes:

  • One-click export experience. No wheel detection yet, so visual verification is the current validation path.
  • A build system that correctly locates and links against your installed Fusion C++ API.
  • A simplified joint parser compared to the Python implementation that produces the same mirabuf output.
  • Full static typing (obviously).
  • Mac and Windows support.

Dependencies

  • Fusion must be installed.
  • CMake and a compiler with C++23 support or later.
  • Windows only: MSVC with the C++ Desktop Development workload installed via Visual Studio.

Testing

  1. Clone the repo and ensure submodules are initialized (git submodule update --init)
  2. From the isotope/ directory, run cmake --workflow --preset build
  3. Run cmake --install build to deploy the add-in to Fusion
  4. Open Fusion 360, open any robot design, and load the add-in via Shift+S > Add-Ins > isotope > Run
  5. Trigger the export and save a .mira file
  6. Open the exported file in Synthesis and verify the robot loads correctly

Next Steps

The following will come in subsequent PRs into this feature branch before it replaces the Python exporter:

  • Readme and proper documentation
  • Updated installers
  • Wheel detection
  • Field export support
  • APS support
  • Logging and error messages

@BrandonPacewic BrandonPacewic self-assigned this Aug 20, 2025
@BrandonPacewic BrandonPacewic added the exporter Related to the Synthesis exporter label Aug 20, 2025
@BrandonPacewic BrandonPacewic changed the title C++ Exporter [AARD-1970] C++ Exporter [SYNTH-107] Jun 16, 2026
@BrandonPacewic
BrandonPacewic changed the base branch from dev to feat/cpp-exporter June 17, 2026 20:06
@BrandonPacewic
BrandonPacewic marked this pull request as ready for review June 17, 2026 20:49
@BrandonPacewic
BrandonPacewic requested review from a team as code owners June 17, 2026 20:49
@BrandonPacewic
BrandonPacewic requested review from PepperLola and azaleacolburn and removed request for a team June 17, 2026 20:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Introduces Isotope, a new C++ Fusion 360 add-in intended to export Fusion robot designs into mirabuf (.mira) as a replacement for the existing Python exporter, including a CMake-based build/install workflow and initial joint/material/component mapping.

Changes:

  • Added Fusion add-in entrypoints (run/stop) and command wiring to trigger export.
  • Implemented initial export pipeline: map materials, parts/components, joints, and joint/part hierarchy into mirabuf::Assembly, then serialize to .mira.
  • Added CMake build configuration (including protobuf generation via submodule) plus manifest and formatting config.

Reviewed changes

Copilot reviewed 24 out of 30 changed files in this pull request and generated 15 comments.

Show a summary per file
File Description
isotope/src/util.cpp GUID helpers and UUID generation used across mappings
isotope/inc/util.h Shared helpers (type-name checks, Info creation, GUID helpers)
isotope/src/parser.cpp End-to-end export flow: build Assembly, prompt save dialog, write .mira
isotope/inc/parser.h Export API declaration
isotope/src/materials.cpp Appearance + physical material mapping into mirabuf
isotope/inc/materials.h Materials mapping API declaration
isotope/src/components.cpp Parts/instances/meshes mapping + rigid group mapping
isotope/inc/components.h Components/parts mapping API declaration
isotope/src/joints.cpp Joint + signal mapping and joint graph creation
isotope/inc/joints.h Joints mapping API declaration
isotope/src/joint_hierarchy.cpp Joint→parts hierarchy construction logic
isotope/inc/joint_hierarchy.h Joint hierarchy API declaration
isotope/src/isotope.cpp Fusion UI integration: adds toolbar panel/button and hooks command handlers
isotope/src/context.cpp Global Fusion app/UI context initialization and validation
isotope/inc/context.h Global context struct declaration
isotope/src/config_command.cpp Command handlers to trigger export
isotope/inc/config_command.h Command handler class declarations
isotope/isotope.manifest Fusion add-in manifest metadata
isotope/CMakeLists.txt CMake project setup, Fusion API linkage, protobuf generation, install step
isotope/CMakePresets.json Configure/build workflows for debug/release
isotope/.clang-format Formatting rules for the new C++ code
isotope/.gitignore Ignore build artifacts/compile commands for the isotope project
.gitmodules Adds protobuf as a submodule dependency

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

Comment thread isotope/inc/util.h
Comment thread isotope/src/isotope.cpp
Comment thread isotope/src/isotope.cpp
Comment thread isotope/src/parser.cpp
Comment thread isotope/src/config_command.cpp
Comment thread isotope/src/joint_hierarchy.cpp
Comment thread isotope/src/components.cpp
Comment thread isotope/src/components.cpp
Comment thread isotope/src/components.cpp
Comment thread isotope/src/components.cpp
@Dhruv-0-Arora

Copy link
Copy Markdown
Collaborator

Testing

I tested isotope and it worked without any issue. We don't need to restart Fusion each time we want to test exporter changes!
I will finish looking through the code tomorrow.

On another note, the exported robot seems to sink into the ground more than the default dozer. I believe this is not an exporter issue however and is rooted in the differences in v9 (right default model) vs v36 (imported left mode) dozer models in fusion.
Screenshot 2026-06-17 at 6 24 21 PM

Comment thread isotope/CMakePresets.json
Comment thread isotope/CMakeLists.txt

@Dhruv-0-Arora Dhruv-0-Arora left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Everything is really well written. There isn't anything that I think is preventing this from getting merged so we can begin to iterate on it.

@PepperLola PepperLola left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't crash for me anymore

@PepperLola
PepperLola merged commit 15dce27 into feat/cpp-exporter Jul 9, 2026
10 checks passed
@PepperLola
PepperLola deleted the branp/1970/isotope branch July 9, 2026 23:52
@PepperLola PepperLola mentioned this pull request Jul 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

exporter Related to the Synthesis exporter

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants