All checks were successful
Build and Test / build (pull_request) Successful in 32m17s
Copy QuickNav and ZTools source trees into reference/ for developer reference during the UI/UX rework. These are plain directories (not submodules) and are not included in the build. - reference/quicknav/ — QuickNav addon source - reference/ztools/ — ZTools addon source Part of the UI/UX rework preparation. See #346.
386 lines
12 KiB
Markdown
386 lines
12 KiB
Markdown
# Kindred Create Integration Guide
|
|
|
|
This document outlines the requirements, options, and steps for integrating the ztools workbench into Kindred Create as a native workbench.
|
|
|
|
---
|
|
|
|
## Table of Contents
|
|
|
|
1. [Current Architecture Overview](#current-architecture-overview)
|
|
2. [Integration Options](#integration-options)
|
|
3. [Files Requiring Modification](#files-requiring-modification)
|
|
4. [Branding Changes](#branding-changes)
|
|
5. [FreeCAD API Dependencies](#freecad-api-dependencies)
|
|
6. [Recommended Integration Path](#recommended-integration-path)
|
|
7. [Testing Checklist](#testing-checklist)
|
|
|
|
---
|
|
|
|
## Current Architecture Overview
|
|
|
|
### Directory Structure
|
|
|
|
```
|
|
ztools-0065/
|
|
├── package.xml # FreeCAD addon metadata
|
|
├── CatppuccinMocha/ # Preference pack (theme)
|
|
└── ztools/ # Main addon directory
|
|
├── Init.py # Pre-GUI initialization
|
|
├── InitGui.py # Workbench class definition
|
|
└── ztools/ # Python package
|
|
├── __init__.py
|
|
├── commands/ # GUI commands
|
|
│ ├── __init__.py
|
|
│ ├── datum_commands.py
|
|
│ ├── datum_viewprovider.py
|
|
│ ├── pattern_commands.py
|
|
│ ├── pocket_commands.py
|
|
│ ├── assembly_pattern_commands.py
|
|
│ └── spreadsheet_commands.py
|
|
├── datums/ # Datum creation logic
|
|
│ ├── __init__.py
|
|
│ └── core.py
|
|
└── resources/ # Icons and theming
|
|
├── __init__.py
|
|
├── icons.py
|
|
└── theme.py
|
|
```
|
|
|
|
### Module Statistics
|
|
|
|
| Component | Files | Commands | Description |
|
|
|-----------|-------|----------|-------------|
|
|
| Datum Tools | 3 | 2 | 15 attachment modes, DatumCreator + DatumManager |
|
|
| Pattern Tools | 1 | 1 | Rotated linear pattern |
|
|
| Pocket Tools | 1 | 1 | Enhanced pocket with face selection |
|
|
| Assembly Tools | 1 | 2 | Linear and polar assembly patterns |
|
|
| Spreadsheet Tools | 1 | 9 | Formatting and quick alias |
|
|
| Resources | 2 | - | 33 SVG icons, theme colors |
|
|
|
|
### External Dependencies
|
|
|
|
- **Python Standard Library Only** - No pip dependencies
|
|
- **FreeCAD Modules**: FreeCAD, FreeCADGui, Part, PartDesign, Sketcher, Assembly (1.0+), Spreadsheet
|
|
- **Qt/PySide**: QtCore, QtGui, QtWidgets (via FreeCAD's bundled PySide)
|
|
|
|
---
|
|
|
|
## Integration Options
|
|
|
|
### Option A: Addon-Style Integration (Minimal Changes)
|
|
|
|
**Effort**: Low
|
|
**Compatibility**: Maintains upstream FreeCAD compatibility
|
|
|
|
Bundle ztools as a pre-installed addon in Kindred Create's addon directory.
|
|
|
|
**Pros**:
|
|
- Minimal code changes
|
|
- Can still be distributed as standalone addon
|
|
- Easy to update independently
|
|
|
|
**Cons**:
|
|
- Not truly "native" - still appears as addon
|
|
- Users could accidentally uninstall
|
|
|
|
**Changes Required**:
|
|
- Update `package.xml` metadata with Kindred Create branding
|
|
- Optionally rename workbench display name
|
|
|
|
### Option B: Native Workbench Integration (Moderate Changes)
|
|
|
|
**Effort**: Medium
|
|
**Compatibility**: Kindred Create specific
|
|
|
|
Move ztools into FreeCAD's `Mod/` directory as a first-party workbench.
|
|
|
|
**Pros**:
|
|
- Appears alongside PartDesign, Assembly, etc.
|
|
- Cannot be uninstalled via Addon Manager
|
|
- Full integration with Kindred Create identity
|
|
|
|
**Cons**:
|
|
- Requires maintaining fork-specific code
|
|
- Branding changes throughout codebase
|
|
|
|
**Changes Required**:
|
|
- Rename all `ZTools_*` commands to `KindredCreate_*` or similar
|
|
- Update workbench class name and identifiers
|
|
- Modify directory structure to match FreeCAD conventions
|
|
- Update all user-facing strings
|
|
|
|
### Option C: Full Workbench Replacement (Major Changes)
|
|
|
|
**Effort**: High
|
|
**Compatibility**: Kindred Create only
|
|
|
|
Replace existing PartDesign/Assembly workbenches with unified Kindred workbench.
|
|
|
|
**Pros**:
|
|
- Unified user experience
|
|
- Complete control over workflow
|
|
|
|
**Cons**:
|
|
- Significant development effort
|
|
- Diverges heavily from upstream FreeCAD
|
|
- Harder to merge upstream improvements
|
|
|
|
---
|
|
|
|
## Files Requiring Modification
|
|
|
|
### Critical Files
|
|
|
|
| File | Changes Needed |
|
|
|------|----------------|
|
|
| `package.xml` | Package name, description, workbench name, classname |
|
|
| `ztools/InitGui.py` | Class name, MenuText, ToolTip, Icon, console messages |
|
|
| `ztools/Init.py` | Console messages |
|
|
| `ztools/ztools/commands/__init__.py` | No changes (internal imports) |
|
|
|
|
### Command Registration (All Command Files)
|
|
|
|
Each command file registers commands with `Gui.addCommand("ZTools_*", ...)`. These need renaming:
|
|
|
|
| File | Commands to Rename |
|
|
|------|-------------------|
|
|
| `datum_commands.py` | `ZTools_DatumCreator`, `ZTools_DatumManager` |
|
|
| `pattern_commands.py` | `ZTools_RotatedLinearPattern` |
|
|
| `pocket_commands.py` | `ZTools_EnhancedPocket` |
|
|
| `assembly_pattern_commands.py` | `ZTools_AssemblyLinearPattern`, `ZTools_AssemblyPolarPattern` |
|
|
| `spreadsheet_commands.py` | `ZTools_SpreadsheetStyleBold`, `ZTools_SpreadsheetStyleItalic`, `ZTools_SpreadsheetStyleUnderline`, `ZTools_SpreadsheetAlignLeft`, `ZTools_SpreadsheetAlignCenter`, `ZTools_SpreadsheetAlignRight`, `ZTools_SpreadsheetBgColor`, `ZTools_SpreadsheetTextColor`, `ZTools_SpreadsheetQuickAlias` |
|
|
|
|
### Internal References
|
|
|
|
Custom properties use `ZTools_` prefix for disambiguation:
|
|
|
|
| File | Properties |
|
|
|------|-----------|
|
|
| `datums/core.py` | `ZTools_SourceRefs`, `ZTools_Params`, `ZTools_DatumMode` |
|
|
| `datum_viewprovider.py` | Same properties accessed |
|
|
|
|
**Note**: These property names are stored in FreeCAD documents. Renaming them would break backward compatibility with existing documents. Consider keeping these internal or implementing migration.
|
|
|
|
---
|
|
|
|
## Branding Changes
|
|
|
|
### User-Visible Strings
|
|
|
|
| Location | Current | Suggested |
|
|
|----------|---------|-----------|
|
|
| `InitGui.py` MenuText | `"ztools"` | `"Kindred Design"` or similar |
|
|
| `InitGui.py` ToolTip | `"Extended PartDesign replacement..."` | Kindred-specific description |
|
|
| `InitGui.py` console messages | `"ztools workbench..."` | `"Kindred Design workbench..."` |
|
|
| `Init.py` console messages | `"ztools addon loaded"` | `"Kindred Design loaded"` |
|
|
| Toolbar names | `"ztools Datums"`, etc. | `"Kindred Datums"`, etc. |
|
|
| Menu names | `"ztools"` | `"Kindred"` |
|
|
|
|
### Command Prefixes
|
|
|
|
Current: `ZTools_*`
|
|
Suggested: `KindredCreate_*`, `Kindred_*`, or `KC_*`
|
|
|
|
### Class Names
|
|
|
|
| Current | Suggested |
|
|
|---------|-----------|
|
|
| `ZToolsWorkbench` | `KindredDesignWorkbench` |
|
|
| `ZToolsDatumObject` | `KindredDatumObject` |
|
|
| `ZToolsDatumViewProvider` | `KindredDatumViewProvider` |
|
|
|
|
---
|
|
|
|
## FreeCAD API Dependencies
|
|
|
|
### Core APIs Used
|
|
|
|
```python
|
|
# Application
|
|
import FreeCAD as App
|
|
import FreeCADGui as Gui
|
|
|
|
# Part/PartDesign
|
|
import Part
|
|
import PartDesign
|
|
|
|
# Workbench patterns
|
|
Gui.Workbench # Base class
|
|
Gui.addCommand() # Command registration
|
|
Gui.Control.showDialog() # Task panels
|
|
Gui.Selection # Selection observer
|
|
|
|
# Document operations
|
|
App.ActiveDocument
|
|
doc.openTransaction()
|
|
doc.commitTransaction()
|
|
doc.abortTransaction()
|
|
doc.recompute()
|
|
|
|
# Feature Python
|
|
Part.makeCompound()
|
|
doc.addObject("Part::FeaturePython", name)
|
|
doc.addObject("PartDesign::Plane", name)
|
|
doc.addObject("PartDesign::Line", name)
|
|
doc.addObject("PartDesign::Point", name)
|
|
doc.addObject("App::Link", name)
|
|
```
|
|
|
|
### Assembly Workbench APIs (FreeCAD 1.0+)
|
|
|
|
```python
|
|
# Assembly operations
|
|
asm.TypeId == "Assembly::AssemblyObject"
|
|
App.Link objects for component instances
|
|
```
|
|
|
|
### Spreadsheet APIs
|
|
|
|
```python
|
|
sheet.set(cell, value)
|
|
sheet.getContents(cell)
|
|
sheet.setStyle(cell, style)
|
|
sheet.setAlignment(cell, alignment)
|
|
sheet.setBackground(cell, (r, g, b))
|
|
sheet.setForeground(cell, (r, g, b))
|
|
sheet.setAlias(cell, alias)
|
|
```
|
|
|
|
### Qt/PySide APIs
|
|
|
|
```python
|
|
from PySide import QtCore, QtGui, QtWidgets
|
|
|
|
# Dialogs
|
|
QtWidgets.QColorDialog.getColor()
|
|
|
|
# Task panels
|
|
QtWidgets.QWidget subclasses
|
|
|
|
# Selection from table views
|
|
QTableView.selectionModel()
|
|
QItemSelectionModel.selectedIndexes()
|
|
```
|
|
|
|
### Preference System
|
|
|
|
```python
|
|
App.ParamGet("User parameter:BaseApp/Preferences/Mod/Spreadsheet")
|
|
params.SetUnsigned(key, value)
|
|
params.GetUnsigned(key)
|
|
```
|
|
|
|
---
|
|
|
|
## Recommended Integration Path
|
|
|
|
### Phase 1: Branding Update (Option B)
|
|
|
|
1. **Fork the repository** for Kindred Create
|
|
2. **Rename package and workbench**:
|
|
- `package.xml`: Update name, description
|
|
- `InitGui.py`: Update class name, MenuText, ToolTip
|
|
- `Init.py`: Update log messages
|
|
3. **Rename command prefixes**:
|
|
- Global find/replace: `ZTools_` → `Kindred_`
|
|
- Update all `Gui.addCommand()` calls
|
|
- Update all toolbar/menu references in `InitGui.py`
|
|
4. **Update toolbar/menu labels**:
|
|
- `"ztools Datums"` → `"Kindred Datums"`
|
|
- etc.
|
|
5. **Keep internal property names** (`ZTools_SourceRefs`, etc.) for document compatibility
|
|
|
|
### Phase 2: Directory Restructure
|
|
|
|
1. **Move to FreeCAD's Mod directory**:
|
|
```
|
|
freecad-source/src/Mod/KindredDesign/
|
|
├── Init.py
|
|
├── InitGui.py
|
|
└── KindredDesign/
|
|
├── commands/
|
|
├── datums/
|
|
└── resources/
|
|
```
|
|
2. **Update CMakeLists.txt** in FreeCAD source to include new module
|
|
3. **Add to default workbench list** if desired
|
|
|
|
### Phase 3: Theme Integration
|
|
|
|
1. **Move CatppuccinMocha** to Kindred Create's default themes
|
|
2. **Optionally set as default theme** for new installations
|
|
3. **Update `apply_spreadsheet_colors()`** to use Kindred theme colors
|
|
|
|
---
|
|
|
|
## Testing Checklist
|
|
|
|
### Functional Tests
|
|
|
|
- [ ] Workbench activates without errors
|
|
- [ ] All toolbars appear with correct icons
|
|
- [ ] All menus appear with correct structure
|
|
- [ ] Datum Creator: All 15 modes work
|
|
- [ ] Datum Manager: Opens (stub functionality)
|
|
- [ ] Rotated Linear Pattern: Creates patterns correctly
|
|
- [ ] Enhanced Pocket: Face selection works
|
|
- [ ] Assembly Linear Pattern: Creates component arrays
|
|
- [ ] Assembly Polar Pattern: Creates circular arrays
|
|
- [ ] Spreadsheet Bold/Italic/Underline: Toggle correctly
|
|
- [ ] Spreadsheet Alignment: Left/Center/Right work
|
|
- [ ] Spreadsheet Colors: Dialogs open, colors apply
|
|
- [ ] Spreadsheet Quick Alias: Creates aliases from labels
|
|
- [ ] Undo/Redo works for all operations
|
|
|
|
### Integration Tests
|
|
|
|
- [ ] Existing FreeCAD documents open correctly
|
|
- [ ] New documents created with Kindred tools save/load properly
|
|
- [ ] PartDesign features work alongside Kindred datums
|
|
- [ ] Assembly joints work with Kindred patterns
|
|
- [ ] Spreadsheet aliases work in PartDesign expressions
|
|
|
|
### Theme Tests
|
|
|
|
- [ ] Catppuccin Mocha preference pack loads
|
|
- [ ] Spreadsheet text colors are correct (light on dark)
|
|
- [ ] Icons render with correct theme colors
|
|
- [ ] QSS styling applies to all custom widgets
|
|
|
|
---
|
|
|
|
## Migration Notes
|
|
|
|
### Document Compatibility
|
|
|
|
Documents created with ztools will contain:
|
|
- Objects with `ZTools_*` custom properties
|
|
- References to `ZTools_*` in expressions (unlikely but possible)
|
|
|
|
**Recommendation**: Keep internal property names unchanged, or implement a document migration script that updates property names on load.
|
|
|
|
### User Preference Migration
|
|
|
|
If users have existing FreeCAD installations:
|
|
- Spreadsheet color preferences are stored per-user
|
|
- Consider running `apply_spreadsheet_colors()` on first Kindred Create launch
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
The ztools workbench is well-structured for integration into Kindred Create. The recommended path is **Option B (Native Workbench Integration)** which provides:
|
|
|
|
- Native appearance alongside other FreeCAD workbenches
|
|
- Kindred Create branding throughout
|
|
- Maintained document compatibility
|
|
- Reasonable development effort
|
|
|
|
Key points:
|
|
- **No external dependencies** - clean integration
|
|
- **Standard FreeCAD APIs** - future-compatible
|
|
- **Modular structure** - easy to extend
|
|
- **33 custom icons** - complete visual identity ready for recoloring
|
|
|
|
Estimated effort for full integration: 2-4 hours for branding changes, additional time for build system integration depending on Kindred Create's structure.
|