forbes-0023 7535a48ec4 feat(gui): add origin abstraction layer for unified file operations
Implements Issue #9: Origin abstraction layer

This commit introduces a foundational abstraction for document origins,
enabling FreeCAD to work with different storage backends (local filesystem,
Silo PLM, future cloud services) through a unified interface.

## Core Components

### FileOrigin Abstract Base Class (FileOrigin.h/cpp)
- Defines interface for document origin handlers
- Identity methods: id(), name(), nickname(), icon(), type()
- Workflow characteristics: tracksExternally(), requiresAuthentication()
- Capability queries: supportsRevisions(), supportsBOM(), supportsPartNumbers()
- Connection state management with fastsignals notifications
- Document identity: documentIdentity() returns UUID, documentDisplayId() for display
- Property sync: syncProperties() for bidirectional database sync
- Core operations: newDocument(), openDocument(), saveDocument(), saveDocumentAs()
- Extended PLM operations: commitDocument(), pullDocument(), pushDocument(), etc.

### LocalFileOrigin Implementation
- Default origin for local filesystem documents
- ownsDocument(): Returns true if document has NO SiloItemId property
- Wraps existing FreeCAD file operations (App::GetApplication())

### OriginManager Singleton (OriginManager.h/cpp)
- Follows WorkbenchManager pattern (instance()/destruct())
- Manages registered FileOrigin instances
- Tracks current origin selection with persistence
- Provides document-to-origin resolution via findOwningOrigin()
- Emits signals: signalOriginRegistered, signalOriginUnregistered,
  signalCurrentOriginChanged
- Preferences stored at: User parameter:BaseApp/Preferences/General/Origin

### Python Bindings (FileOriginPython.h/cpp)
- Adapts Python objects to FileOrigin C++ interface
- Enables Silo addon to implement origins in Python
- Thread-safe with Base::PyGILStateLocker
- Static addOrigin()/removeOrigin() for registration

### Python API (ApplicationPy.cpp)
- FreeCADGui.addOrigin(obj) - Register Python origin
- FreeCADGui.removeOrigin(obj) - Unregister Python origin
- FreeCADGui.getOrigin(id) - Get origin info as dict
- FreeCADGui.listOrigins() - List all registered origin IDs
- FreeCADGui.activeOrigin() - Get current origin info
- FreeCADGui.setActiveOrigin(id) - Set active origin

## Design Decisions

1. **UUID Tracking**: Documents tracked by SiloItemId (immutable UUID),
   SiloPartNumber used for human-readable display only

2. **Ownership by Properties**: Origin ownership determined by document
   properties (SiloItemId), not file path location

3. **Local Storage Always**: All documents saved locally; origins change
   workflow and identity model, not storage location

4. **Property Syncing**: syncProperties() enables bidirectional sync of
   document metadata with database (Description, SourcingType, etc.)

## Files Added
- src/Gui/FileOrigin.h
- src/Gui/FileOrigin.cpp
- src/Gui/FileOriginPython.h
- src/Gui/FileOriginPython.cpp
- src/Gui/OriginManager.h
- src/Gui/OriginManager.cpp

## Files Modified
- src/Gui/CMakeLists.txt - Added new source files
- src/Gui/Application.cpp - Initialize/destruct OriginManager
- src/Gui/ApplicationPy.h - Added Python method declarations
- src/Gui/ApplicationPy.cpp - Added Python method implementations

Refs: #9
2026-02-05 13:17:23 -06:00
2026-01-19 22:34:15 +01:00
2025-11-23 10:54:51 -03:00
2025-11-11 13:45:27 +01:00
2025-11-23 10:54:51 -03:00
2024-07-14 09:24:22 +02:00
2025-10-06 11:43:26 -05:00

Kindred Create

An engineering-focused parametric 3D CAD platform built on FreeCAD 1.0+

Website | Downloads | Issue Tracker

Kindred Create is in active development. Features and interfaces may change.


What is Kindred Create?

Kindred Create is a fork of FreeCAD that adds integrated tooling for professional engineering workflows. It ships two custom workbenches and a purpose-built dark theme on top of FreeCAD's parametric modeling core.

ztools -- A unified workbench that consolidates part design, assembly, and sketcher tools into a single interface. Adds custom datum creation (planes, axes, points with 16 creation modes), pattern tools for assemblies, an enhanced pocket with flip-side cutting, and spreadsheet formatting commands.

Silo -- A parts database system for managing CAD files, part numbers, revisions, and bills of materials across teams. Includes a Go REST API server backed by PostgreSQL and MinIO, with FreeCAD commands for opening, saving, and syncing files directly from the application. A dock panel provides in-viewport browsing and search.

Catppuccin Mocha theme -- A dark theme applied across the entire application, including the 3D viewport, sketch editor, spreadsheet view, and tree view. Uses spanning-line branch indicators instead of disclosure arrows.

Kindred Create is maintained by Kindred Systems LLC.


Installing

Prebuilt packages (Linux)

Download from the releases page.

Debian/Ubuntu:

sudo apt install ./kindred-create_*.deb

AppImage:

chmod +x KindredCreate-*.AppImage
./KindredCreate-*.AppImage

Building from source

Kindred Create uses pixi for dependency management and CMake for building.

git clone --recursive ssh://git@git.kindred-systems.com:2222/kindred/create.git
cd create
pixi run configure
pixi run build
pixi run install
pixi run freecad

Debug and release variants are available (pixi run build-debug, pixi run build-release). See CMakePresets.json for platform-specific presets covering Linux, macOS, and Windows.

For general FreeCAD compilation guidance, see the FreeCAD wiki for Linux, Windows, or macOS.


Usage

Kindred Create is compatible with standard FreeCAD workflows. The FreeCAD wiki covers general usage.

ztools

Select the ztools workbench from the workbench selector. It presents consolidated toolbars from PartDesign, Sketcher, Assembly, and Spreadsheet in a single interface. ZTools commands are also injected into the PartDesign workbench menus and toolbars automatically.

See mods/ztools/ for workbench-specific documentation.

Silo

Silo requires a running server instance. See mods/silo/README.md for server deployment instructions.

The FreeCAD workbench reads configuration from:

  • SILO_API_URL -- Server API endpoint (default: http://localhost:8080/api)
  • SILO_PROJECTS_DIR -- Local projects directory (default: ~/projects)

On first launch, Kindred Create prompts for Silo server configuration. Silo commands (Open, Save, Commit, Pull, Push, BOM) are available in the File menu across all workbenches.


Project structure

create/
├── src/
│   ├── App/                    # Core application (C++)
│   ├── Base/                   # Base classes (C++)
│   ├── Gui/                    # GUI framework and stylesheets (C++)
│   ├── Mod/                    # FreeCAD modules (PartDesign, Assembly, Sketcher, ...)
│   │   └── Create/            # Kindred bootstrap module -- loads ztools and Silo
│   └── 3rdParty/              # Vendored dependencies (OndselSolver, GSL)
├── mods/                       # Kindred addon workbenches (git submodules)
│   ├── ztools/                # ztools workbench
│   └── silo/                  # Silo parts database
├── resources/preferences/      # Default preferences and theme
├── package/                    # Packaging (Debian, AppImage, Windows installer, RPM)
├── .gitea/workflows/           # CI/CD (build and release pipelines)
├── docs/                       # Architecture and integration docs
├── CMakeLists.txt              # Root build configuration
├── CMakePresets.json           # Platform build presets
└── pixi.toml                  # Pixi environment and tasks

The mods/ workbenches are git submodules. If you cloned without --recursive, initialize them with:

git submodule update --init --recursive

Contributing

Contributions follow the FreeCAD Contribution Process (FCP). Submit changes as pull requests against the main branch.

Code quality tools are configured and enforced via pre-commit hooks:

  • C/C++: clang-format, clang-tidy
  • Python: black (100-char lines), pylint

Install pre-commit hooks locally:

pip install pre-commit
pre-commit install

Reporting issues

Report issues at the issue tracker. When reporting:

  1. Note whether the issue involves Kindred Create additions (ztools, Silo, theme) or base FreeCAD
  2. Include version info from Help > About FreeCAD > Copy to clipboard
  3. Provide reproduction steps and attach example files (FCStd as ZIP) if applicable

For base FreeCAD issues, also check the FreeCAD issue tracker.


License

LGPL-2.1-or-later, consistent with FreeCAD.

Acknowledgments

Built on FreeCAD and its ecosystem: OpenCASCADE, Coin3D, Qt, Python. Theme colors from Catppuccin.

Description
No description provided
Readme LGPL-2.1 7.9 GiB
2026-02-27 16:25:02 +00:00
Languages
C++ 51.5%
Python 45.8%
C 1.3%
CMake 0.8%
NSIS 0.2%
Other 0.2%