Commit Graph

33754 Commits

Author SHA1 Message Date
64edae4c04 refactor: migrate ztools and Silo to kindred-addon-sdk (#250)
Some checks failed
Build and Test / build (pull_request) Failing after 1m51s
Route platform API calls through kindred_sdk wrappers:

ZTools:
- Replace hardcoded MOCHA dict with kindred_sdk.get_theme_tokens()
- Add sdk dependency to package.xml

Silo:
- Replace FreeCADGui.registerEditingOverlay() with kindred_sdk.register_overlay()
- Replace FreeCADGui.addOrigin()/removeOrigin() with kindred_sdk wrappers
- Replace hardcoded _MOCHA palette subset with kindred_sdk.get_theme_tokens()
- Add sdk dependency to package.xml

Create module:
- Replace dock panel boilerplate with kindred_sdk.register_dock_panel()

Behavior is identical before and after — this is a refactor only.

Closes #250
2026-02-17 08:59:56 -06:00
e667aceead feat(addon-system): create kindred-addon-sdk package (#249)
Some checks failed
Build and Test / build (pull_request) Failing after 1m40s
Add mods/sdk/ with the kindred_sdk Python package providing a stable
API layer for addon integration with Kindred Create platform features.

Modules:
- context: editing context/overlay registration wrappers
- theme: YAML-driven palette system (Catppuccin Mocha)
- origin: FileOrigin registration helpers
- dock: deferred dock panel registration
- compat: version detection utilities

The SDK loads at priority 0 (before all other addons) via the existing
manifest-driven loader. Theme colors are defined in a single YAML
palette file instead of hardcoded Python dicts, enabling future theme
support and eliminating color duplication across addons.

Closes #249
2026-02-17 08:36:27 -06:00
34964066a0 Merge pull request 'feat(addon-system): add <kindred> package.xml extensions and schema docs' (#257) from feat/package-xml-schema into main
Some checks failed
Deploy Docs / build-and-deploy (push) Successful in 46s
Build and Test / build (push) Failing after 2m1s
Reviewed-on: #257
2026-02-17 13:15:47 +00:00
forbes
9dd43a7cc3 feat: addon registry with runtime introspection API (#253)
All checks were successful
Build and Test / build (pull_request) Successful in 44m33s
Add FreeCAD.getAddonRegistry() function for runtime addon introspection.

Changes to addon_loader.py:
- Add contexts field to AddonManifest for tracking context IDs
- Add register_context() method for addons to declare contexts at runtime
- Add contexts() method returning {context_id: [addon_names]} mapping
- Parse <contexts> element from <kindred> in package.xml
- Add getAddonRegistry() function returning the registry singleton

Changes to Init.py:
- Expose getAddonRegistry as FreeCAD.getAddonRegistry after loading

Usage:
  registry = FreeCAD.getAddonRegistry()
  registry.get('ztools')        # AddonManifest for ztools
  registry.loaded()             # list of loaded addons
  registry.is_loaded('silo')    # True/False
  registry.contexts()           # {context_id: [addon_names]}

Closes #253
2026-02-16 17:33:28 -06:00
98d1877472 feat(addon-system): add <kindred> package.xml extensions and schema docs
Some checks failed
Build and Test / build (pull_request) Failing after 2m59s
Add <kindred> elements to ztools (priority=50) and silo (priority=60)
package.xml files declaring min_create_version, load_priority,
pure_python, and context metadata.

Fix addon_loader.py topological sort to use level-by-level processing
with (priority, name) sorting within each level, replacing
static_order() which did not guarantee deterministic ordering.

Add docs/src/development/package-xml-schema.md documenting the full
field reference, schema example, and backward compatibility notes.

Closes #252
2026-02-16 14:21:27 -06:00
60ceb47e4f feat(bootstrap): replace exec()-based addon loading with manifest-driven loader
All checks were successful
Build and Test / build (pull_request) Successful in 34m4s
Add addon_loader.py implementing a six-stage pipeline: scan mods/ for
package.xml files, parse standard fields and optional <kindred>
extensions via ElementTree, validate version compatibility, resolve
load order via graphlib.TopologicalSorter (with legacy fallback),
exec() Init.py/InitGui.py, and populate a runtime AddonRegistry
exposed as FreeCAD.KindredAddons.

Replace hard-coded addon lists in Init.py and InitGui.py with calls
to addon_loader.load_addons(). All QTimer-based Silo integration code
in InitGui.py is unchanged.

Backward compatible: addons without <kindred> elements load with no
constraints using the existing ztools-then-silo order.

Closes #248
2026-02-16 13:13:46 -06:00
forbes
2fa1672edf fix(assembly): guard onChanged against solver during document restore
Some checks failed
Build and Test / build (pull_request) Has been cancelled
During document restore, PropertyLinkList::Restore sets the Group property
on AssemblyObject, triggering onChanged → updateSolveStatus → solve →
validateNewPlacements. At this point joints reference objects that haven't
been restored yet, causing a null pointer dereference (SIGSEGV).

Add an isRestoring() guard to skip solver invocation during restore,
matching the existing pattern in AssemblyLink::onChanged().
2026-02-15 18:45:00 -06:00
forbes
128d7e0710 fix: re-add Create module to CMake build
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The Create module (src/Mod/Create/) was lost from src/Mod/CMakeLists.txt
during the rebase onto upstream FreeCAD 1.2.0-dev. Without it:
- Mod/Create/ is never installed, so the bootstrap that loads ztools
  and silo never runs
- mods/ztools/ and mods/silo/ are never installed
- Startup shows 'Ignoring unknown SiloWorkbench/ZToolsWorkbench'

Also adds kc_format.py to the Create install list (was missing).
2026-02-15 17:03:38 -06:00
forbes
1dbeff7758 fix(ui): rebalance Auth/Activity dock panel sizes
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Use resizeDocks() to give Database Activity 80% of the vertical space
in the right dock area, keeping Database Auth compact at 120px.

Closes #190, Closes #191
2026-02-15 09:43:31 -06:00
forbes
4a54e9b7cd feat(silo): update silo submodule — DAG API methods (#215)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Adds push_dag() and get_dag() to SiloClient:
- push_dag: PUT /api/items/{pn}/dag with nodes + edges
- get_dag: GET /api/items/{pn}/dag with optional revision filter

Closes #215
2026-02-14 15:09:08 -06:00
forbes
8f02c0d6f2 fix: Insert Component uses Silo browser when available
All checks were successful
Build and Test / build (pull_request) Successful in 40m7s
When the silo workbench is loaded, Insert Component now opens the
Silo part browser (OpenItemWidget) instead of the OS file dialog.
Users can search both the Silo database and local files to find
components to insert.

Falls back to the OS file dialog if silo-mod is not installed.
Also adds .kc file support to the fallback file dialog filter.

Closes #202
2026-02-14 15:03:13 -06:00
forbes
bae7c22e60 fix: add Create module to CMake build
Some checks failed
Build and Test / build (pull_request) Has been cancelled
The Create module (src/Mod/Create/) was never included in the build
because src/Mod/CMakeLists.txt did not call add_subdirectory(Create).

This meant:
- Mod/Create/InitGui.py was never installed, so the workbench loader
  (setup_kindred_workbenches) that loads silo and ztools never ran
- The install rules for mods/silo/freecad/ and mods/silo/silo-client/
  never executed, leaving the silo workbench files missing
- kc_format.py was also not listed in the Create install rule

Fixes the 'Ignoring unknown SiloWorkbench' error on startup.
2026-02-14 14:46:51 -06:00
forbes
04835c3629 feat: .kc Layer 1 — manifest auto-creation and platform file associations
Some checks failed
Build and Test / build (pull_request) Has been cancelled
kc_format.py:
- Auto-create silo/manifest.json with default fields (UUID, timestamps,
  username) when saving a .kc file that lacks one
- Update modified_at timestamp on each save
- KC_VERSION = 1.0

Platform integration:
- kindred-create.desktop: add application/x-kindred-create MIME type
- kindred-create.xml: register .kc glob patterns with dedicated MIME type
  (application/x-kindred-create), separate from .fcstd type
2026-02-14 12:47:01 -06:00
forbes
444aaac1ee fix: start page always closes on document open (#192)
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Remove the closeStart preference check so the start page MDI tab
always closes when a document is opened or created. Re-enable
QListView updates before closing to prevent Qt hang during widget
destruction.

Add hideEvent override as a safety net to re-enable disabled
QListView updates whenever the start page is hidden.
2026-02-14 12:42:17 -06:00
forbes
531526e70d fix: add missing Qt/Gui includes for ThemeSelectorWidget
Some checks failed
Build and Test / build (pull_request) Has been cancelled
Build and Test / build (push) Successful in 1h10m43s
Add #include <QApplication> (for qApp macro), #include <QEvent> (for
QEvent::LanguageChange), and #include <Gui/Application.h> (for
Gui::Application::Instance) which were transitively available in
FreeCAD 1.0 but not in 1.2.
2026-02-14 11:21:54 -06:00
forbes
9809ff852c feat: .kc file format — Layer 1 (format registration)
Cherry-picked from feat/kc-file-format-layer1 (723a8c98d5).
- Document.cpp: checkFileName() accepts .kc extension
- FreeCADInit.py: register .kc import type
- Dialog filters: Save As, Save Copy, Merge, Project Utility
- kc_format.py: DocumentObserver preserves silo/ entries across saves
- InitGui.py: register kc_format observer on startup
2026-02-13 14:10:36 -06:00
forbes
54f8006e24 cherry-pick #32: MDI pre-document tab for Silo new item (70118201b0) 2026-02-13 14:09:44 -06:00
forbes
b37667d56d cherry-pick #4: startup theme selector fix (e85162947b) 2026-02-13 14:06:09 -06:00
forbes
630b08ea23 cherry-pick #3: dock task panel right, remove non-Kindred themes (bb3f3ac6d6) 2026-02-13 14:06:01 -06:00
forbes
9be9f9420a cherry-pick #1: initial Kindred branding + assembly joint fix
Cherry-picked 316d4f4b52 with conflict resolution:
- CMakeLists.txt: merged Kindred version vars with upstream 1.2.0-dev base
- src/Main/*.cpp: applied Kindred branding (banner, copyright, license)
- Resolved add/add conflicts for files already copied in Phase 1
- Includes assembly joint flip overconstrain fix
2026-02-13 14:05:31 -06:00
forbes
87a0af0b0f phase 1: copy Kindred-only files onto upstream/main (FreeCAD 1.2.0-dev)
Wholesale copy of all Kindred Create additions that don't conflict with
upstream FreeCAD code:

- kindred-icons/ (1444 Catppuccin Mocha SVG icon overrides)
- src/Mod/Create/ (Kindred Create workbench)
- src/Gui/ Kindred source files (FileOrigin, OriginManager,
  OriginSelectorWidget, CommandOrigin, BreadcrumbToolBar, EditingContext)
- src/Gui/Icons/ (Kindred branding and silo icons)
- src/Gui/PreferencePacks/KindredCreate/
- src/Gui/Stylesheets/ (KindredCreate.qss, images_dark-light/)
- package/ (rattler-build recipe)
- docs/ (architecture, guides, specifications)
- .gitea/ (CI workflows, issue templates)
- mods/silo, mods/ztools submodules
- .gitmodules (Kindred submodule URLs)
- resources/ (kindred-create.desktop, kindred-create.xml)
- banner-logo-light.png, CONTRIBUTING.md
2026-02-13 14:03:58 -06:00
Loke Strøm
5d81f8ac16 Sketcher: Fix: Arc of ellipse when first and second X coordinates are the same (#27327) 2026-02-13 11:57:27 -06:00
Roy-043
a8757f7947 Draft: fix depency of patharray normal on view direction
Change normal calculation to use get_shape_normal
2026-02-13 11:47:44 -06:00
Chris Hennes
9e042ff480 PD: Improve error handling for RevolMethod::ToFirst 2026-02-13 17:48:13 +01:00
Paweł Biegun
1752fd59f9 Measurement: Add on the fly measurement unit change (#27462)
Enables the user to change the unit of the measurement temporarily to convert to a different unit. This is useful when the user sometimes needs to get a dimension of the model in a different unit than the one it was designed in.
2026-02-12 14:35:54 +00:00
Roy-043
7912f84136 BIM+Draft: fix Placement task panel issue for Arch_SectionPlane and Draft_WorkingPlaneProxy (#27101)
* BIM+Draft: fix Placement Task Panel issue for Arch_SectionPlane and Draft_WorkingPlaneProxy

* BIM+Draft: fix Placement Task Panel issue for Arch_SectionPlane and Draft_WorkingPlaneProxy
2026-02-12 12:39:46 +00:00
Roy-043
db5fff6ccc BIM: fix BuildingPart issues with Arch_Reference 2026-02-12 11:35:55 +00:00
PaddleStroke
6abb2b447f Assembly: Isolate grounded objects on selection (#24952)
* Assembly: Isolate grounded objects on selection

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

* Update ViewProviderAssembly.cpp

* Update ViewProviderAssembly.cpp

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
2026-02-12 09:43:46 +01:00
Chris Hennes
076c5916b5 Sketcher: Remove unneeded parameters from seekConstraintPosition 2026-02-11 19:49:31 +01:00
Yash Suthar
3d14203fa4 Draft: fix Draft_Label MaxChars property (#27478)
* Draft: fix Draft_Label MaxChars property

Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>

* Minor tweak: moved/replaced call to self.onChanged

---------

Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>
Co-authored-by: Roy-043 <70520633+Roy-043@users.noreply.github.com>
2026-02-11 17:58:42 +00:00
Chris Hennes
ecbe21ca03 Sketcher: Annotate unused parameter 2026-02-10 19:10:36 +01:00
Roy-043
54c0c2f83c Draft: fix ghost preview of Draft_Labels
Draft_Labels have a unique Placement implementation. A ghost preview therefore cannot be generated in the standard manner. This was missed in #18795 (my bad).
2026-02-10 11:43:22 -06:00
Yash Suthar
2cd45b07f7 Sketcher: Fix snap while drag and fix drag for arc
Signed-off-by: Yash Suthar <yashsuthar983@gmail.com>
2026-02-10 10:20:11 -06:00
Roy-043
0eaf14373f BIM: fix case of some titles (#27474) 2026-02-10 15:41:05 +00:00
PaddleStroke
3d0df45cd4 Assembly: BOM: take mirrored state of links in account. (#26113) 2026-02-10 09:10:03 -06:00
Caio Venâncio do Rosário
bf51a00dfd Draft: Fix switchUi method bug (#27422)
* Draft: Fix switchUi method bug

* [pre-commit.ci] auto fixes from pre-commit.com hooks

for more information, see https://pre-commit.ci

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2026-02-10 10:33:35 +01:00
Christoph Niethammer
1046c3682a Fix typos (#26576)
* Fix typos in code documentation

Signed-off-by: Christoph Niethammer <christoph.niethammer@gmail.com>

* Update tool tip for links 'copyOnChange' property

The tool tip for the copyOnChange property was missing the "tracking"
option and had some typos. For details see the wiki documentation at
https://wiki.freecad.org/Std_LinkMake and commit
d1b6bb78d1.

Signed-off-by: Christoph Niethammer <christoph.niethammer@gmail.com>

---------

Signed-off-by: Christoph Niethammer <christoph.niethammer@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
2026-02-09 19:15:50 -06:00
sliptonic
4497ce0146 Merge pull request #22204 from jffmichi/camsim
CAM: integrate new simulator as MDI widget into main window
2026-02-09 11:40:06 -06:00
tarman3
353459f1fe CAM: Profile - fix _getCutAreaCrossSection() 2026-02-09 11:12:11 -06:00
drwho495
72b1076788 Remove hasher check and migrate CAM files 2026-02-09 11:00:23 -06:00
Chris Hennes
6a1da227cd Merge pull request #27346 from TomPcz/sketcher-label-offset
Sketcher: Fix dimension label alignment and inactive strikethrough
2026-02-09 10:58:39 -06:00
Billy Huddleston
6e34b79da4 CAM: Update SVG annotation IDs for tool shapes
Renamed several SVG text element IDs in tool shape files that did not
match the expected naming conventions used. This ensures that the tool
parameters are correctly recognized and utilized by the Tool library
editor.

src/Mod/CAM/Tools/Shape/bullnose.svg:
- Changed text element id from "torus_radius" to "corner_radius"

src/Mod/CAM/Tools/Shape/radius.svg:
- Changed text element id from "cutting_edge_height-7" to
"cutting_radius"
- Changed text element id from "diameter-9" to "tip_diameter"

src/Mod/CAM/Tools/Shape/svg_source/bullnose.svg:
- Changed text element id from "torus_radius" to "corner_radius"

src/Mod/CAM/Tools/Shape/svg_source/radius.svg:
- Changed text element id from "cutting_edge_height-7" to
"cutting_radius"
- Changed text element id from "diameter-9" to "tip_diameter"
2026-02-09 10:55:53 -06:00
sliptonic
3f84746a5c Merge pull request #27247 from Daniel-Khodabakhsh/fix-0-step-down
CAM: Fix case when CAM operation `Start depth` equal to `Final depth` and `Step down` is zero
2026-02-09 10:06:04 -06:00
chris jones @ipatch
c4317f88f8 sketcher: fixes #27281 fix access out of bounds crash with "remove axes alignment" 2026-02-09 09:52:02 -06:00
freecad-gh-actions-translation-bot
e5d0e5316d Update translations from Crowdin 2026-02-09 05:39:43 +01:00
Daniel Khodabakhsh
8d3c786656 Fix case when CAM operation start = stop and step down is zero. 2026-02-08 15:30:19 -08:00
Captain
3237a21580 PartDesign: add interactive gizmos for box, cylinder and sphere operations (#23700) 2026-02-08 14:36:04 -06:00
Joe
a79a22185d Materials: Add Copper Alloys to Material-Metals (#25832)
* Add Copper Alloys to Material-Metals

Added a set of Copper Alloys presented in Application Data Sheet
'cda144-8-mechanical-low-temperature.pdf, Nov1974'
Permission and Credit to the 'Copper Distributor's Association (CDA)'
These cards follow values for 295°K

Colours approximate values found by general search of images and
descriptions found on the internet and use FreeCAD's appearances.

* Add Copper Alloy general/generic information

This additional information appears as general info not affected by
anneal or cold drawn or aging factors.
Information found from pages C10200, C12200, C15000, C22000, C23000,
C44300, C46400, C51000, C61400, C64700, C65500, C70600, C71500, C95500

Also followed suggestions of adding tagging and description mentioned
in pull request.

* Add Copper Alloy source URL

Added the URL for the source Application Data Sheet
'cda144-8-mechanical-low-temperature.pdf, Nov1974'
This pdf is hosted by the 'Copper Distributor's Association (CDA)'

Here is the source URL for this pull request in case it's needed:
https://github.com/FreeCAD/FreeCAD/pull/25832

* Add Copper Alloy UltimateStrain for 102,122a,122b at 295°K

102=2.8%, 122a=39.7%, 122b=1.46%

* Add Copper Alloy UltimateStrain for remaining cards 150...955 at 295°K

105=4.13%, 220=41.5%, 230=40.4%, 443=82%, 464=31.8%, 510=3.6%, 614=27%
647=9.9%, 655=10.4%, 706=28.4%, 715=39.9%, 955=10.6%.

Removed spaces between IACS = nn%, so that it all stays on same line.

Added C95500 compressive MPa.
Added C64700 Si and IACS ranges.

Also looked at 'KindOfMaterial' for Steel and made similar edits based
on Table 2 info shown in brackets () to try keep a bit of consistency.

* Fix Ultimate Strain Description and Units

Ultimate Strain is the maximum stretch you can do to a material before it
gives up. This is associated with Ultimate Tensile Strength, which is the
maximum stress you can apply before the material starts to fail, elongate
and eventually fracture.

Units are of the type ΔL/L, such as, stretched 0.10in per 1.0in (10%), or
stretched 0.15mm per 1.0mm (15%). To avoid confusion, use 0.1 or 0.15 and
avoid using 10 as for 10% or 15 as with 15%, and just call it a fraction.

* Add Copper Alloy Elongation, Reduction of Area, Yield Strain, Toughness

Impact Charpy and Notch Tensile Strength are both considered as Toughness
There is currently no use for these in FreeCAD, but maybe a future use as
these are part of the Table 2 and better to add them now vs forget adding
them later. The Charpy test is a fast cost-effective standardized method,
and there are other more sophisticated impact tests that can be "better".
There are other tests than the notch tensile strength test, but it's also
a simple, fast, cost-effective method to create fracture toughness data.

While adding 'Elongation' and 'Reduction of Area' both these are referred
to as percentages (preferred over fraction), it seemed best to change the
'Ultimate Strain' to percentages too for consistency even though this has
was referred to as fraction or percentage when searching for definitions.

Added Yield Strain, probably not important now because the elastic region
is pretty small, but with smart metals that can do up to 5% bends then it
seems something worth adding it for that category of future metal alloys.

* Add Copper Alloy Isotropic, Linear, Toughness Temperature Arrays

* Add Copper Alloy Elastic & Toughness arrays and reduce model wordiness

Reduced wordiness of array models by cutting-out Metal and Temperature
as these are somewhat redundant words.

Added remaining ElasticProperties and PlasticTriaxialProperties.

* Add Copper Alloy Linear Elastic Temperature Arrays

Moved Elongation and ReductionOfArea after YieldStrain/Strength and added
FractureStrength so these are grouped together on the cards since they're
all related (Note: Material viewer resorts these alphabetically).

Linear Elastic arrays are set in the order of strain/strength for Tensile
then strain/strength for Yield, and then Elongation/FractureStrength, and
then ReductionOfArea.

Reviewed pdf again and corrected a few errors missed/made earlier.
2026-02-08 12:04:28 -06:00
William Skellenger
5f952812c3 Fix tooltips on mirror checkboxes in sketcher (#27131) 2026-02-08 10:03:37 +00:00
Chris Hennes
0f23770ad7 Merge pull request #27064 from ScholliYT/addObjectNameTo3mfExport
Mesh: Add object name attribute to 3MF export
2026-02-08 03:22:56 -06:00