A buildable starter repository for a commercial virtual assembly platform.
This delivery is intentionally honest about scope:
- It is not a full Siemens Process Simulate / DELMIA replacement.
- It is a production-oriented foundation that cleanly separates domain model, validation, planning, execution, export/reporting, optional desktop UI, and future geometry/collision adapters.
- It compiles, runs, tests, and packages in its current form.
- Assembly domain model: parts, occurrences, mate constraints, resources, zones, scenario expectations, and process steps
- Physical/process metadata: part mass, resource payload capacity, resource nominal linear speed, resource nominal angular speed, and resource selection priority
- Occurrence collision groups for process-aware collision filtering
- Step-level collision filtering with explicit ignored occurrences and ignored collision groups
- Scenario loading from a simple text-based format (
.vaasm) - Validation pipeline for broken references, dependency issues, resource mismatches, invalid sample counts, and invalid collision-ignore references
- Planning pipeline that resolves target transforms and propagates sequential step state
- Execution pipeline separated from planning
- Static feasibility analysis for resource work-envelope checks and zone checks before execution
- Broad-phase / narrow-phase simplified collision checking using a replaceable collision backend boundary with a current yaw-aware AABB implementation
- Straight-line and yaw-interpolated motion simulation with configurable interpolation samples
- Absolute target moves (
step_move), mate-based moves (step), two-stage guided inserts (step_insert), authored path moves (step_path), and screw-style mate moves (step_screw) - Deterministic CLI execution for batch verification
- Simulation replay trace capture
- JSON trace export
- Markdown report export
- Suite execution with expected success/failure classification
- Optional Qt desktop shell with linked tree, viewport, properties, timeline, and log panes
- Dual-view desktop shell with a productive OpenGL viewport and a parallel OCCT backend seat
- Toolbar and menu commands for OpenGL/OCCT backend switching and step preview scrubbing
- Runtime geometry catalog with analytic box geometry and cached OBJ wireframe import
- Scene-model layer for visual occurrences and step-target preview
- Unit tests
- CMake presets
- Linux and Windows build/package scripts
- CPack packaging
- vcpkg manifest for future optional dependencies
include/va/*- public platform headerssrc/*- core implementationapps/virtual_assembly_cli- batch and regression-friendly command line front endapps/virtual_assembly_desktop- optional Qt desktop shellsamples/*.vaasm- sample assembly scenariossamples/meshes/*- sample external mesh assetsdocs/*.md- architecture and delivery documentationscripts/*- Linux and Windows build/package automation
cmake --preset linux-debug
cmake --build --preset linux-debug
ctest --preset linux-debug
./out/build/linux-debug/virtual_assembly_cli samples/ignored_fixture_transfer.vaasm --plan --replay --export-trace out/reports/ignored_fixture_transfer_trace_v8.json --export-report out/reports/ignored_fixture_transfer_report_v8.md
./out/build/linux-debug/virtual_assembly_cli --suite-dir samples --export-suite-report out/reports/sample_suite_report_v12.md
cpack --config out/build/linux-debug/CPackConfig.cmake -B out/package/linux-debugOr use:
./scripts/linux/build.sh
./scripts/linux/package.shscripts\windows\build_vs2022.bat
scripts\windows\package_vs2022.batThe Windows scripts now switch to the repository root before invoking cmake --preset ..., so they can be launched directly from scripts\windows without failing on CMakePresets.json path resolution.
The desktop shell now includes a productive OpenGL scene viewport, a parallel OCCT backend seat, linked tree/properties/timeline panes, and toolbar/menu buttons for backend switching. Load samples/mesh_transfer_demo.vaasm after building to verify external OBJ geometry preview and linked step-target visualization.
cmake -S . -B out/build/linux-qt -G Ninja -DVA_BUILD_QT_DESKTOP=ON -DVA_ENABLE_OCCT_VIEWER=ON
cmake --build out/build/linux-qtIf OpenCASCADE is not available, the OpenGL backend still builds and runs while the OCCT page remains present as an isolated backend seat with explicit status messaging rather than a fake fallback renderer.
virtual_assembly_cli <scenario.vaasm> [options]
virtual_assembly_cli --suite-dir <directory> [options]
Options:
--list-model
--validate
--plan
--replay
--export-trace <file.json>
--export-report <file.md>
--export-suite-report <file.md>
expect failure codes=step.workspace.out_of_bounds
occurrence gripper_inst gripper 0 0 0 fixed groups=fixture,gripper
step_move carry_part part_inst 2 0 0 0.0 8 resource=robot_01 ignore_occurrences=gripper_inst
step_move carry_part_2 part_inst 2 0 0 0.0 8 resource=robot_01 ignore_groups=fixture
See docs/ScenarioFormat.md for the full grammar.
This repository optimizes for:
- clean architecture,
- zero-friction compilation,
- deterministic testing,
- CI-friendly trace and report generation.
The collision backend is isolated behind ICollisionBackend / CollisionEngine, so it can be replaced by OCCT+BRep, FCL, Bullet, or GPU distance-field backends without rewriting the process layer.
- Added step contact policy (
strict,allow_touch_at_target) - Added candidate resource selection and planner auto-assignment
- Added reusable step profiles in
.vaasmscenarios - Added profiled touch-fit sample and tests
- Added part mass metadata (
part ... mass=) - Added resource payload / speed / priority metadata (
resource ... payload= speed= priority=) - Added step payload margin semantics (
payload_margin=) - Planner now performs payload-aware resource selection and computes estimated duration
- Reports and suite summaries now expose payload margins and estimated cycle-time KPIs
- Added payload-ranked transfer sample and tests
- Added yaw-aware transforms for occurrences, mate targets, absolute targets, and path waypoints
- Added
resource ... angular_speed=and duration estimation from both linear and angular travel - Added
mate ... yaw_offset=andoccurrence ... yaw= - Added
step_screwwith extra revolutions along a mate-constrained motion - Upgraded the collision broad phase to use yaw-aware world AABBs for rotated box-like parts
- Added threaded fastener sample and new orientation / screw-step tests
- Added
va_geometryruntime geometry catalog - Added OBJ wireframe import and cache
- Added
va_scenevisual occurrence model with step target preview - Rebuilt the Qt desktop shell into a linked workstation layout with tree, properties, timeline, log, and viewport
- Added
geom/colorscenario directives and a mesh-backed demo scenario
- Kept the OpenGL viewport as the productive scene renderer
- Added a parallel OCCT backend seat and explicit backend availability messaging
- Added menu and toolbar actions for OpenGL/OCCT switching
- Added previous-step / next-step / clear-preview navigation in the desktop timeline workflow
- Upgraded the desktop shell CMake path to use
Qt6::OpenGLWidgetsand optionalVA_ENABLE_OCCT_VIEWERdiscovery
The Qt desktop build now treats the OpenGL viewport as the default production path. The OCCT backend is opt-in only and is never auto-discovered from arbitrary machine-global CMake package locations.
Build the Qt desktop with OpenGL only:
scripts\windows�uild_qt_vs2022.batBuild the Qt desktop with an explicit OCCT package directory:
scripts\windows�uild_qt_vs2022.bat --with-occt D:\ThirdParty\occt\cmakeBuild the Qt desktop with OpenGL only:
./scripts/linux/build_qt_with_vcpkg.shBuild the Qt desktop with an explicit OCCT package directory:
./scripts/linux/build_qt_with_vcpkg.sh --with-occt /opt/occt/lib/cmake/opencascadeThis policy prevents accidental pickup of stale or incomplete OpenCASCADEConfig.cmake files from unrelated machines or projects.
The Windows build scripts now remove stale build caches before configuring. This package also ships without embedded out/build artifacts.
The desktop target should not be launched as a raw Debug executable unless the Qt debug plugin tree is available. Use these scripts instead:
scripts\windows\run_qt_debug_vs2022.batfor an in-tree debug runscripts\windows\package_qt_vs2022.batfor a deployable Release app-local package
The packaged application is generated under:
out\package\windows-qt-vs2022\AliceVirtualAssemblyDesktop