Commit Graph

568 Commits

Author SHA1 Message Date
Billy Huddleston
c2d8077d96 CAM: Fix CAM Sanity Report
Fix base template substitution and improve tool/op formatting in sanity report, also update HTML/CSS and image handling.

- Major HTML/CSS refactor for CAM Sanity Report template:
  - Rewrote HTMLTemplate.py with modern, responsive CSS, semantic HTML, and accessibility improvements.
  - Added CSS reset, responsive image handling, and improved table/list styling.
  - Introduced .heading-container and .top-link for right-aligned "Top" navigation links on all major sections and tool headers (hidden in print).
  - Updated all section and tool headers to use new navigation and layout.
  - Cleaned up legacy markup, removed inline styles, and standardized variable substitution using string.Template syntax (${key}, ${val}).
  - Updated base_template in HTMLTemplate.py to use string.Template syntax (${key}, ${val}) instead of %{key}, %{val} for correct variable substitution.

- Enhanced image generation and embedding:
  - Updated ImageBuilder to support high-DPI (800x800) images and direct byte output for embedding.
  - All report images (base, stock, datum, tool) now use in-memory bytes for embedding when possible.
  - Tool images support a toggle for using toolbit thumbnails or fallback head-on renders.
  - ReportGenerator now embeds images as base64 when requested, with correct HTML tags.

- Improved squawk, tool, and operation data formatting:
  - Squawk dates now use localized string formatting.
  - Tool diameter and feedrate now use .UserString for better display.
  - Spindle speed now formatted as integer with "rpm" suffix.
  - Operation feed and speed values also use .UserString and "rpm" formatting.
  - Fixed _format_bases in ReportGenerator.py to iterate over base_data.items() and pass {"key": key, "val": val} to the template, ensuring all bases are listed correctly.
  - General code cleanup and improved maintainability throughout the CAM Sanity reporting stack.
2025-09-22 13:44:53 -04:00
sliptonic
c9e7da359a Fixes #23015
The standard in FreeCAD is that workbench preference pages get loaded when the module gets loaded.
That behavior was altered by PR 21981 which attempted to load CAM preference pages at startup even if CAM was not loaded.
The result was that pages were only partially loaded and the result was a confusing mess.

There is some discussion about future enhancements to allow workbench preferences to be loaded early.
When that is implemented, CAM will adjust to be compliant with FreeCAD standard.

This effectively revertts PR #21981
2025-09-17 18:21:16 -05:00
sliptonic
12a7151806 Merge pull request #23724 from davidgilkaufman/adaptive_reenable_profile
[CAM] regression fix: re-enable adaptive profile mode
2025-09-17 16:41:51 -05:00
sliptonic
a8c1c2f9dd Merge pull request #23902 from deimi/fix-import-snapmaker-post
CAM: fix library import in snapmaker postprocessor
2025-09-17 15:43:50 -05:00
Chris Hennes
29c69a4689 Update translations 2025-09-15 2025-09-16 09:55:13 +02:00
sliptonic
e2ca3cce4b Merge pull request #23916 from davidgilkaufman/remove_qsignalblocker
[CAM] bugfix: replace python uses of QSignalBlocker
2025-09-15 14:10:54 -05:00
sliptonic
15eeb8ab1f Merge pull request #23776 from davidgilkaufman/fix_missing_tool_proxy
[CAM] regression fix: migrate old tools to new system
2025-09-15 14:08:47 -05:00
sliptonic
c7936ddcf4 Merge pull request #22500 from jffmichi/drilling_select_line
CAM: select rows instead of cells in drilling panel
2025-09-15 10:46:52 -05:00
sliptonic
768cbbc85b Merge pull request #23856 from Connor9220/library-editor
CAM: Replace the main library editor dialog and add copy & paste & drag & drop support
2025-09-15 10:37:19 -05:00
David Kaufman
2cb86f259e also add qt5 compatibility for checkbox state change signal 2025-09-14 14:59:21 -04:00
David Kaufman
9ce9c6b99a [CAM] replace python uses of QSignalBlocker 2025-09-13 22:13:55 -04:00
Matthias Deimbacher
c0c9212c97 CAM: fix library import in postprocessor 2025-09-13 21:33:31 +02:00
Billy
60bcf64a01 CAM: Consistently rename "Tool" to "Toolbit" in UI and code
- Updated all user-facing strings from "Tool" to "Toolbit" for clarity and consistency.
- Changed combo box filtering logic to use index for "All Toolbit Types" (localization-safe).
- Improved visual distinction for "All Toolbits" in library editor (bold/italic).
- Reduced default SVG icon size in ShapeWidget for a more compact display.
- Updated window titles, labels, tooltips, and placeholder texts to use "Toolbit".
- Removed obsolete string comparisons in filtering logic.
- Change the Menu item from "Toolbit Library Editor" to "Toolbit Library Manager"
2025-09-12 18:04:57 -04:00
sliptonic
4ae36283d0 Ensure Qt5 compatibility with enums
Correct LGPL headers

rework bullnose  Fixes #19050
2025-09-12 15:24:16 -04:00
sliptonic
db5117e1ae Update src/Mod/CAM/Gui/Resources/panels/LibraryProperties.ui
Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>

Update src/Mod/CAM/Gui/Resources/panels/ToolBitLibraryEdit.ui

Co-authored-by: Max Wilfinger <6246609+maxwxyz@users.noreply.github.com>
2025-09-12 14:19:30 -04:00
sliptonic
78bd46f815 fixes
fix duplicate toolbits
add tools to 'all tools'
context menus and deletion
/CamAssets/Tool/  directory structure
Assets and preferences
2025-09-12 14:19:30 -04:00
Billy
81faf7727c CAM: Remove hardcoded style for Tool Number, Fix TestPathToolBitSerializer
Fix issue with toolshapes
Renamed fillet to radius
Added Tool Type Filter to library
Fix units so that they honor user preference
Remove the QToolBox widget from the Shape Selector page and combine into a single page.
Fix issue with PropertyBag so that CustomPropertyGroups as a string is converted to enum and enums are handled correctly.
Update TestPathPropertyBag test for enum changes.
Update TestPathToolBitListWidget
Update TestPathToolLibrarySerializer to match new LinuxCNC output
Fix LinuxCNC export too handle ALL tool types, use user preferences for units, and include all lcnc fields
2025-09-12 14:18:33 -04:00
tarman3
34f4f16383 CAM: Clean DogboneDressup after PR#22250 (#23752) 2025-09-12 09:43:18 -05:00
tarman3
0336185ec1 CAM: Improve SelectLoop (#23275) 2025-09-12 09:42:20 -05:00
Connor9220
fff2e2daf9 CAM: Reorder the Clearance height and Safe Height spinners in task panel (#23727)
Co-authored-by: Billy <billy.huddleston@preparis.com>
2025-09-12 09:40:08 -05:00
Markus Reitböck
749ac36615 do not use precompiled header for setting global compiler definitions and to disable compiler warnings
only 4 of these warnings are still relevant, CMake shall be used to disable them

Compiler definitions:

  NOMINMAX:
    * is already globally defined in SetGlobalCompilerAndLinkerSettings.cmake

  WIN32_LEAN_AND_MEAN:
    * use CMake target_compile_options on relevant targets

Warnings that still occur:

  C4251, C4273, C4275: all related to dllimport / export
    * use CMake target_compile_options on relevant targets

  C4661: no suitable definition provied for explicit template instantiation request
    * triggered in Mesh because of Vector3D in Base - not all functions are defined in header
    * use CMake target_compile_options on relevant targets

Warnings that are Currently not triggered (fix code if they appear again):

  C4005: macro redefinition

  C4244: argument conversion, possible loss of data

  C4267: conversion from size_t to type, possible loss of data

  C4305: truncation from type1 to type2
    * only occurrence disabled in Reader.cpp

  C4522: multiple assignment operator specified

  C5208: unnamed class in typedef name

Obsolete Compiler warnings:

  C4181: not mentioned in Microsoft docs anymore

  C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
    * throw(optional_type_list)  deprecated in C++17

  C4482: nonstandard extension used: enum 'enumeration' used in qualified name
    * not generated for compilers that support C++11

  C4503: 'identifier': decorated name length exceeded, name was truncated
    * obsolete since Visual Studio 2017

  C4786: not mentioned in Microsoft docs anymore
2025-09-11 20:21:04 -05:00
sliptonic
10d1031e9b Make default postprocessor empty string. (#23706)
* Make default postprocessor empty string.

Default post when creating a job is now not set.  This will cause the user to be prompted for a post instead
This PR also cleans up some unit tests to avoid loading from disk

* [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>
2025-09-11 16:07:38 -05:00
Samuel Abels
2168e3cd99 CAM: Add AssetManager.copy() and .deepcopy()
CAM: Add copy/paste support for the ToolBitBrowser

CAM: Move library dropdown and sort order combo to dedicated row to give them more space

CAM: Fix: PathAssetManagerTest failed

CAM: Add YamlSerializer

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

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

CAM: Fix CodeQL complaints

CAM: add LibraryProperties dialog

CAM: Replace the LibraryEditor

CAM: allow for editing tool number in the tool editor dialog

CAM: Remember last selected library and sort order in preferences

CAM: support natural sort order in tool and library lists

CAM: Fix CodeQL complaints

CAM: Fix: not all attributes included in YAML serialization

CAM: Fix: UTF8 chars not included in LinuxCNC export

Fix: tool library not displayed when loading it for the first time

CAM: Fix: custom shape class not found

CAM: Check dependencies on import for friendlier error messages

CAM: Open file dialogs in home by default

CAM: Show "All Tools" entry in library list in the library editor

CAM: fix: error on sorting tools with no tool number

CAM: Fix: traceback if library contained tool number as string

CAM: Fix: Linter errors in manager.py

CAM: Fix: separator between library and tool buttons

CAM: Add drag & drop support to the library editor

CAM: Fix numerous linter errors on the AssetManager

CAM: Show current library in library editor window title

CAM: Add dedicated icons for library add + remove

CAM: Support F2 key in library editor

CAM: library editor handles delete key when library list is in focus; focus search field by default

CAM: fix: tool list in dock initially not loading

CAM: Fix: library editor did not open from "all tools" list

CAM: Increase precision of parameters in tool summary to 3 digits

fix TestToolBitListWidget
2025-09-11 10:45:41 -05:00
Chris Hennes
3d65ae46d5 Merge pull request #23746 from 3x380V/cmake
CMake: Use scoped include and library directories
2025-09-10 21:54:51 -05:00
Chris Hennes
58a8d589a7 Update translations 2025-09-09 2025-09-10 08:53:41 +02:00
David Kaufman
874fe54053 [CAM] migrate old tools to new system 2025-09-09 11:49:55 -04:00
wmayer
93db4c7d8a CMake: Replace include_directories with target_include_directories 2025-09-08 19:04:34 +02:00
zophon
1f32565819 Update KineticNCBeamicon2_post.py (#23602)
Added a return in the postamble to separate M05 and M09 GCode as beamicon2-basic doesn't like having both M-code on the same line.
2025-09-08 11:07:01 -05:00
Chris Hennes
84c810dc4a Merge pull request #23521 from z0r0/python-interface-bindings-final
Core: Python interface bindings cleanup
2025-09-08 10:58:15 -05:00
tarman3
d87fe5084a CAM: Dogbone - fix for Pocket (#22250) 2025-09-08 10:52:03 -05:00
luzpaz
d9da6c8def Fix various typos
Found via codespell
2025-09-08 00:21:16 -05:00
David Kaufman
24c382232a [CAM] re-enable adaptive profile mode 2025-09-07 10:55:24 -04:00
David Kaufman
2aac5f6b33 [CAM] fix to ensure tool change command is issued forsame tool number, new spindle speed (#23691) 2025-09-06 10:00:37 -05:00
David Kaufman
e5e1732896 [CAM] change default TC name to 5mm endmill (#23692) 2025-09-06 09:56:52 -05:00
David Kaufman
6d71a564d5 [CAM] create adaptive epic (#23414)
* [CAM] create adaptive epic

* update adaptive epic
2025-09-05 11:49:51 -05:00
David Kaufman
51f49d92d4 [CAM] LeadInOut new features (#22669)
* CAM: Improve LeadInOut

* rebuild/fix task panel UI

* migrate old LeadInOut parameters to the new properties

* Keep original Lead-in and/or Lead-out

* LeadInOut Rename None/Original to No Retract/None

* merge in changes from tarman/leadovertravel

* LeadInOut update names to No Change/Suppress Retraction

* Remove IncludeLayers option from LeadInOut (always true)

* [CAM] Fix offset entrance UI string

* [CAM] improve handling of step angle on lead in/out ArcZ

* resolve merge conflicts

* finish pulling in tarman's updates

* switch back from 'No Change' style to enable checkbox

* 'Suppress Retraction' -> 'No Retract'

* fix documentation string for lead in/out dressup

---------

Co-authored-by: tarman3 <joice501790018@tutamail.com>
2025-09-05 11:24:42 -05:00
J-Dunn
97c41149ba CAM: fix G0 regression in drilling (#22602)
* CAM: fix G0 regression in drilling

At some point the initial rapid to Safe Height got dropped from drilling cycles. 
This leads to excessive air drilling.
It also alters "OLD_Z" which sets the Retraction plane under G98.

The defect is causing much confusion and time wasting in the roadmap discussions

This PR fixes the G0 regression.

* [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>
2025-09-05 11:14:58 -05:00
Chris Hennes
fd20bdd6d8 Update translations 2025-09-03 2025-09-04 11:37:11 +02:00
sliptonic
0020057f83 [CAM] Make sure CAMAsset location exists (#23618)
* Fixes #22858

Ensure that the default CAM asset location exists and is created in the user data location

* Update src/Mod/CAM/Path/Preferences.py

Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>

---------

Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
2025-09-03 15:32:33 -05:00
tarman3
e248f98097 CAM: Fix Task panels for expression in App::PropertyLink (#22955) 2025-09-02 11:22:32 -05:00
tarman3
4fc408910c CAM: Fix uccnc postprocessor for G2|G3 (#23194) 2025-09-02 11:20:14 -05:00
J-Dunn
96f32cae5a CAM: correct grbl_post retract heights (#23010)
* CAM: correct grbl_post retract heights

Some small corrections to retraction heights in expansion of G8x drilling cycles for GRBL machines. 

Add comment blocks from NIST definitions to aid maintenance and understanding. 
Rename some variables for clarity and ease of future maintenance.

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

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

* correct typo which prevented final retract move

* [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>
2025-09-02 11:15:37 -05:00
tarman3
dfcaeaa5d2 CAM: Fix missed gcode save dialog (#23517) 2025-09-02 11:02:24 -05:00
David Kaufman
f156e467c9 [CAM] Fix ramp dressup performance (#21944)
* [CAM] fix biggest performance problems in ramp dressup

key items:

- finding the index of the current edge with edeges.index(edge) was very
  expensive; fixed by tracking the index while looping

- checking which edges were rapids with edge equality was also
  expensive; fixed by keeping a list of indexes of rapid input edges,
and tagging output edges with whether or not they are rapids

* [CAM] comment out Path.Log.debug in hot segments of ramping code

Even when low level logs are supposed to be suppressed, Path.Log.debug
takes take invoking traceback.extract_stack. This time adds up if logs
are invoked in frequently run loops.

* Fix CAM test

* [CAM] reimplment ramp method 1 with faster code

* [CAM] reimplement ramp methods 2, 3, and helix

* [CAM] patch to make output match original

* [CAM] ramping full performance + functionality fix
2025-09-02 10:32:03 -05:00
David Kaufman
540ce39cb1 [CAM] Add UI elements for viewing and editing tool controller parameters from within the operation edit UI (#23180)
* [CAM] extract tool controller ui elements into their own file

* [CAM] make the changes in the tool controller UI only apply when ok is clicked

* [CAM] Add tool controller edit panel to the Profile operation

* [CAM] Add copy button to in-operation tool controller editor

* [CAM] clean up changes

* [CAM] Add tool controller edit UI to all operations

Notes on changes that were not a simple copy/paste job from the changes
I made for Profile:

- Deburr: changed TC/coolant rows from 1 and 2 to 0 and 1

- Probe: didn't work at all initially due to bug in main where ShapeName
  changed to ShapeType. I added a utility for reading either a ShapeType
or a ShapeName (check for both properties, convert ShapeType to lower
case) and applied it to probe and camotics

- Drilling: moved Keep Tool Down checkbox up from row 8 to row 2 (all
  intermediate rows were missing) and added the edit checkbox in row 3
below it

- VBit, Probe (or anything else that requires a specific tool type): in
  Base.py setupToolController(), I added a check to see if the currently
selected tool is an invalid type, and if so and there is a valid tool,
then change to that one. This fixes two UI bugs. Plausibly pre-existing,
if there is one valid tool and an invalid tool is selected, it's
impossible to switch to the valid one because you can't generate a combo
box change event for the new tool. Definitely new: if an invalid tool is
selected and there are no valid tools, the combo box will be empty but
the new tool controller edit utility will let you edit the current TC
anyway.

- Thread Milling: replaced the Tool Controller GroupBox with the
  standard QFrame layout, and added the checkbox. Note that this
operation doesn't have a UI element for coolant -- likely a bug, but I
didn't look into it

- Surface: Changed from form layout to grid layout. Deleted an old
  SurfaceEdit.ui file -- it was replaced with PageOpSurfaceEdit.ui in
2017 but not deleted (commit 8637831132)

- Waterline: Changed from form layout to grid layout

* [CAM] Bug fixes

setupUi() wasn't called on the tool controller editor, preventing
changes in its UI from being written back to the object immediately.
This caused weird behavior where if you edited a field twice it would
reset the second time it was focused

Added a hook to automatically update the TC combo box when the TC name
(or anything else about it, since that was easier) changes

* Fix usage of QSignalBlockers

* [CAM] Block scroll events on tool number and spindle direction when not
focused

Specifically, if you mouse over either of these UI elements and use the
scroll wheel, it used to focus the element and change its value. This
commit makes it do neither of those things, for these specific elements,
as a measure against users accidentally changing these values.

* disable tcNumber edit field in operations panel

* Add "New tool controller" option to TC combo box

When selected, it opens (toggles, technically) the tool bit dock and
returns to the previous selection. Adding a new tool controller using
the dock (already, before this commit) automatically switches the
operation's tool controller to the new one

* Add "Copy" option to tool controller combo box

* Copy TC function only in combo box, no button

* [CAM] update in-operation "new tool controller" function to use a dialog

* [CAM] make the tool selector always a dialog and never a dock

* remove spacer from ToolControllerEdit.ui to fix exces white space

* [CAM] change tool dialog default sizing/spacing

* [CAM] fix bug where copying tool controller doesn't copy all values
2025-09-02 10:19:33 -05:00
Ian 'z0r0' Abreu
0217c1ef97 updating docblock locations. 2025-09-02 08:28:47 -04:00
Ian 'z0r0' Abreu
8d56e3e529 reverting author metadata 2025-09-02 08:25:37 -04:00
Ian 'z0r0' Abreu
b24040ee52 Adding license documentation to interface class docblocks. 2025-09-01 21:50:59 -04:00
jffmichi
a353ef9307 CAM: use dict constructor for Command in VCarve 2025-09-01 11:24:32 -05:00
Chris Hennes
e706122bbb Update translations 2025-08-30 2025-09-01 17:44:54 +02:00