* Fix SpecialFilter Handling for selected and associated constraints
Fix show constraints in 3d view if no constraints in list and filter to only show selected is disabled
---------
Co-authored-by: Matthias Danner <28687794+matthiasdanner@users.noreply.github.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>
* Do not scale dimension's position if it is a radius or diameter
* Update src/Mod/Sketcher/Gui/EditDatumDialog.cpp
Sketcher: spell checking
---------
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
* Sketcher: Extend InputHints infrastructure to constraint tools
- Implement DrawSketchHandler::getToolHints() for constraint workflows
- Add centralized hint table mapping constraint commands to step-specific InputHints
- Integrate hint lookup in DrawSketchHandlerGenConstraint and dimension handler
- Provide step-by-step user guidance for:
- Coincident, PointOnObject, Distance (X/Y)
- Horizontal, Vertical, HorVer, Lock, Block
- Equal, Symmetric, Radius, Diameter, Angle
- Tangent, Perpendicular, Parallel
This continues the InputHints work started for drawing tools by enabling consistent, contextual guidance for constraint creation, including multi-step workflows like tangent-via-point.
* Call updateHint() after selection reset to re-arm the first-step prompt
when the tool stays active after apply.
* Add comments to hints table structure
* Sketcher: Update constraint hint text to use "pick" instead of "Select"
Change constraint hint text from "Select" to "pick" to maintain consistency
with existing FreeCAD UI style. This affects the DrawSketchHandlerGenConstraint
hint system for various constraint operations including coincident, distance,
horizontal/vertical, block, lock, symmetry, tangent, perpendicular, parallel,
and distance constraints.
The hints now follow the pattern:
- "%1 pick first point or edge"
- "%1 pick second point or edge"
- "%1 pick line or two points"
etc.
This provides consistent terminology throughout the sketcher constraint
creation workflow.
* - Remove redundant 'first' from initial selection hints
- Improve consistency in hint text formatting per Developer Guidelines
- Add consistent spacing in comment sections"
* Per PR feedback for DrawSketchHandlerDimension hints:
* Change 'Click to' to "pick"
* Simplify hint wording
* Combine redundant else
* Use direct return pattern instead of building hints list
* Update lookupConstraintHints() to use C++20 std:ranges::find_if form per PR review feedback
* Sketcher: Refine constraint hints per PR feedback
- Use consistent 'point or edge' phrasing in Distance and DistanceX/Y tools
- Reword Horizontal/Vertical step 0 to avoid misleading 'two points'
- Generalize Tangent and Perpendicular hints to 'edge' with optional point
- Simplify legacy Distance to 'point or edge'
* Add dynamic hint handling for PointOnObject constraint
- Implemented contextual hints in getToolHints() to generate an appropriate step 2 hint based on step 1 selection type
- Preserved static lookupConstraintHints() for all other tools
* Sketcher: Convert constraint hint table to C++20 designated initializer syntax
- Refactored static constraint hint table to follow Sketcher hint development guidelines
- Uses C++20 designated initializers for clarity and maintainability
- No changes to hint logic or behavior; content is identical to previous version
* Add hints to symettry tool
* Add hint system for transform tools
- Design decision: Keep hints simple and focused on primary mouse actions
- Avoid redundancy with dialog UI which already shows keyboard shortcuts clearly
- Implements progressive hints for multi-state tools (Rotate, Scale, Translate)
using declarative hint tables, and focused hints for single-state tools
(Symmetry, Offset) using direct return implementations.
* Cleanup unused declarative hint decls
* Change hint to 'pick axis, edge, or point" per PR feedback
This patch adds/changes a couple of things:
* if you press enter on a label now, it moves you to another label and
adds the label and lock on the previous label, instead of previous behavior
where it was accepting whole dimension
* if you press enter and have lock state on both labels then you move to
next stage
* if you press ctrl+enter it's as is if you'd press enter on both labels
(the object becomes constrained with whatever dimensions that were in
both labels)
* tab still works the same way
* you can remove "Lock" state from the label by typing something
additional or removing the dimension at all
As the title says - since there is pending PR for better SoDatumLabel
constraints interactivity, this patch now prioritizes geometry lines
over constraints, so constraints will be rendered below lines.
This patch changes rendering order of constraint lines to be below
geometry lines, so now selection and rendering will be prioritized for
geometry lines instead of constraints.
This is done by changing depth buffer values and removal of SoAnnotation
node which was disabling depth buffer checks on constraints at all.
- Fix comment for mid-point
- Use in-class member initializers instead of constructor
- Remove redundant default constructor (got redundant after initializers)
- Made comments doxygen compatible
* Add input hints to fillet and chamfer tools
* Add hints to trimming tool
* Add hints to splitting tool
* Implement hints for extend tool
* Add hints to external geometry
* Add hints to Carbon Copy tool
* Hint updates to align with developer guidelines
* change "click to set" to "set" per PR comments
* Use enum (or declare one) to be type safe per PR comments
* For "trivial" one-step / one-state tools, refactor with direct hint return rather than using declarative / table pattern.
* Refactor hint tables initializers with C++20 features per PR feedback
- Use designated initializers (.state = , .hints = ) for clearer structure
- Add 'using enum Gui::InputHint::UserInput' to eliminate repetitive prefixes
- Applied to DrawSketchHandlerExtend and DrawSketchHandlerFillet
* Refactor Splitting tool hint implementation with direct return (trivial) pattern
* For fillet change "vertex" to "point" per PR feedback
* Change hint to "pick location on edge to split" per PR feedback
Fixes the problem where if user has selected `Position and dimensions`
mode in Preferences, then after first keystroke on 2nd label after
typing something in 1st label before, the input is being accepted
without allowing them to enter a number with more than 2 digits.
Stupid mistake of mine from previous refactor - some of the OVPs do not
contain those elements and thus should not be accessed prematurely.
This patch moves access to the OVPs when it's actually needed so it
won't go out of bounds.
As the title says. I think personally this increases readability just a
little bit and I thought it's low effort to refactor.
Instead of checking the OVPs through array everytime, since we access
them multiple times in different scenarios - just cache them on the
beginning of state and access the variable, instead of array.
* Working scale prototype
* Call viewAll to fit geometries in the viewport post-scaling
* Exclude angle dimensions
* Scale the viewport rather than calling viewAll
* Scale dimension annotation along geometries
* Early return when counting more than one dimensional constraint
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Disable sketch autoscale if there are external geometries in the sketch
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Add a setting to disable the feature _ and eventually parametrize
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Check for objects in the viewport in the sketch's ancestry to decide wheter or not to autoscale
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* More consistent camera scaling
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Check for visual indicator in the whole document
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Find visible items in nested assemblies
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Check visual elements in assemblies nested in assemblies
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Set the dimension even if the scaling fails
* Allow constraints that interact with the origin axis/root
* Remove unused variable
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Misc fixes from review
* [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>
Currently if user tries to reset OVP, they can only do that by entering
"0" for example, and then the parameters will get unset in
unsetOnViewParameter. But that will only happen if user types a value
that's under confusion point (typically 1e^-7). In my opinion, it would
be cool to reset that state if user deletes all content in the label, to
allow them to specify coordinates with mouse once again.
Also, this patch fixes a regression with backspace, where deleting stuff
from OVP was working on unix systems, but seems like on Windows it
doesn't pass the check.
* Reorder ellipse major/minor radius assignment when scaling down
* [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>
Quantity is often queried for Unit just to see if it has a dimension.
Ask Quantity directly using isDimensionless() method and modify that
method not to care about Quantity value validity; no user was ever
asking for value validity.
* Sketcher: Do not allow mouse interruption while entering dimensions
So, currently user has an option to enter dimensions to different
Sketcher elements like circle, line, or hexagon, whatever else. But, if
they move mouse during entering of those parameters, they are gone.
This is because we are currently allowing for constant
`QAbstractSpinBox` value change during mouse move, it stops changing
ONLY AFTER value is being set (user enters number and presses ENTER
or TAB).
So, this patch introduces one more state for `EditableDatumLabel` which
is `hasFinishedEditing` which is being triggered by ENTER or TAB key,
and still keeping old `isSet` state, which disallows mouse movement
disruption and dynamically updates the edited element on viewport.
This means, that all objects now wait for `hasFinishedEditing` state to
actually finish editing.
* Sketcher: Avoid out of boundary access by checking onViewParameters size
* Sketcher: Add missing Qt headers for CI
* Sketcher: Allow using TAB to switch between labels without accepting
* Sketcher: Change to or statement, so enter will accept both labels
* Sketcher: Apply review comments
* used casting directly in if statement and auto to keep linter happy
* added comments for flags used for describing EditableDatumLabel states
* Implement hints for arc
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Change hint text to lower case per comments and style guide
* Sketcher: Add input hint to Point tool
Adds a structured input hint ("🖱 pick point location") to the Point tool
using Gui::InputHint. Hint appears immediately upon tool activation
and uses the new `%1` icon injection pattern with MouseLeft.
* Sketcher: Add structured input hints for Polyline (LineSet) tool
- Adds context-sensitive input hints to the Polyline (LineSet) tool using Gui::InputHint.
- Shows "pick first point" and "pick next point" with MouseLeft, and "right-click to finish" with MouseRight, updating as the tool state changes.
- Hints appear in the status area to guide users through polyline creation.
* Cleanup 'using' and short form of syntax per PR comment
* Cleanup 'using' and short form of syntax per PR comment
* Add Escape Key to cancel hints
* Add MouseRight to cancel hint
* MouseRight and Escape Key hints for all states
* Sketcher: Add context-sensitive input hints to Line tool
- Implements updateHints() for DrawSketchHandlerLine to show "pick first point" and "pick second point" actions with appropriate mouse icons.
- Hints update dynamically based on tool state for improved user guidance.
* Sketcher: Add context-sensitive input hints to Circle tool
- Implements updateHints() for DrawSketchHandlerCircle to show appropriate hints for center and 3-rim construction methods.
- Hints update dynamically based on tool state to guide user actions.
* Remove cancel hints per PR/Discord feedback discussion
* Sketcher: Refine Arc tool input hints for construction method
- updateHints() now explicitly distinguishes between Center and ThreeRim construction methods.
- Shows accurate context-sensitive hints for both arc creation modes.
- Removes generic else for future-proofing and clarity.
* Remove cancel hints per Discord discussion
* Refactor to use using and short form of class names per PR feedback
* Sketcher: Refactor Polygon tool to use new input hints mechanism
- Replaces legacy getToolHints() with updateHints() following the modern pattern by @kadet
- Ensures consistent, context-sensitive hints for Polygon tool, matching Arc, Line, and Circle tools
- Removes cancel hints per maintainer feedback
* Sketcher: Refactor Circle tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerCircle
- Provides context-sensitive hints for both center and 3-rim construction methods
- Ensures consistency with Arc, Line, and Polygon tools
* Sketcher: Update Rectangle tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerRectangle
- Provides context-sensitive hints for all supported rectangle construction methods
- Ensures consistency with Arc, Line, Circle, and Polygon tools
Note: All rectangle construction modes are supported and can be cycled after tool activation, even if not all are directly shown in the UI.
* Sketcher: Refactor Slot tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerSlot
- Provides context-sensitive hints for all slot drawing steps
- Ensures consistency with other Sketcher tools
* Sketcher: Refactor Arc Slot tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerArcSlot
- Provides context-sensitive hints for both ArcSlot and RectangleSlot construction methods
- Ensures consistency with other Sketcher tools
* Sketcher: Refactor B-spline tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerBSpline
- Provides context-sensitive hints for all B-spline drawing steps
- Ensures consistency with other Sketcher tools
* Sketcher: Refactor Arc of Parabola tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerArcOfParabola
- Provides context-sensitive hints for each step of arc of parabola creation
- Ensures consistency with other Sketcher tools
* Sketcher: Refactor Arc of Ellipse tool to use new input hints mechanism
- Implements updateHints() for DrawSketchHandlerArcOfEllipse
- Provides context-sensitive hints for each step of arc of ellipse creation
- Ensures consistency with other Sketcher tools
* Sketcher: Add input hints to Arc of Hyperbola tool
- Implements updateHints() for DrawSketchHandlerArcOfHyperbola
- Provides context-sensitive hints for each step of arc of hyperbola creation
- Ensures consistency with other Sketcher tools
- Note: This only adds hints to the existing tool code; no refactor to controller/state machine pattern
* Sketcher: Add M key hint to polyline tool
- Adds a hint for the M key ("change mode") in the polyline (lineset) tool when drawing subsequent segments.
- Improves discoverability of cycling segment/transition modes while drawing.
* Merge branch 'sketcher-hints-circle' into sketcher-hints-all-drawing-tools
* Restore updateHints() for Circle from sketcher-hints-circle branch
* Refactor Sketcher tools to use getToolHints() for input hints (most tools updated, a few pending fine-tuning)
* Sketcher: Ensure input hints update after every state change in LineSet tool
- Explicitly call updateHint() after all Mode/state transitions in DrawSketchHandlerLineSet.
- Fixes missing or stale input hints when using the polyline/lineset tool with custom state machine.
- Brings hint update behavior in line with other Sketcher drawing tools.
* Sketcher: Refactor Slot tool to use new input hints mechanism
* Call updateHint() after setting mode
* Sketcher: Add getToolHints() override to Rectangle handler for unified input hints
- Revert inccorect previous inadvertent deletions (reverted to main)
- Implements getToolHints() in DrawSketchHandlerRectangle to provide context-sensitive input hints.
- Brings Rectangle tool in line with other Sketcher handlers using the standard input hint system.
- No changes to controller or parameter adaptation logic.
* Sketcher: Remove redundant 'click' from Point tool hint text
- Change '%1 click to place a point' to '%1 place a point'
- Mouse cursor already indicates clicking is needed
- Makes hint text more concise and focused on the action
* - Change remove implied 'click to finish" to just 'finish'
- Mouse cursor already indicates clicking is needed
- Makes hint text more concise and focused on the action"
* Refactor all handlers to modern compact enum pattern per PR feedback
- Use 'using enum Gui::InputHint::UserInput;' for cleaner enum usage
- Direct return statements instead of intermediate variables
- QObject::tr() for concise translation calls
- Consistent modern pattern across all handlers
- Improved readability and maintainability
- Also implmemented getToolHints() in ArcSlot.
* Add M key hint functionality to tools with multiple construction methods:
- Circle: Center ↔ 3-point modes
- Arc: Center ↔ 3-point modes
- Rectangle: Diagonal → Center → 3-corner → Center+2-corner modes
- Line: Point+length+angle → Point+width+height → 2-point modes
- B-Spline: Control points ↔ Knots modes (+ construction-method-aware hints)
Features:
- Add 'M switch mode' hints to make mode switching discoverable
- Add doConstructionMethodChanged() template specializations to update hints
- Use generic 'switch mode' text for initial implementation (vs specific mode names)
- Maintain consistent hint patterns across all tools
- Preserve existing functionality while adding discoverability
Users can now press M to cycle through construction methods in any multi-mode
drawing tool and see the mode switching option in the hints panel.
This first implementation uses generic 'switch mode' hint to avoid the complexity of tracking mode cycles with drop downs, etc. This would be where integrating hints into the underlying state machine might help
* Per PR review feedback, replace repeated inline 'switch mode' hint definitions with const variables:
- Define 'const InputHint switchModeHint' once per tool function
- Use variable reference in all hint lists instead of inline creation
- Reduces code duplication from 30+ repetitions to 5 clean definitions
Affected tools: Circle, Arc, Rectangle, Line, B-Spline
Improves maintainability - hint text changes only need updates in one
location per tool. Follows DRY principle and reviewer feedback.
No functional changes - same hints displayed to users.
* Per PR feedback, remove repetitive 'arc slot' prefix from hint messages:
- 'pick arc slot center' → 'pick slot center'
- 'pick arc slot radius' → 'pick slot radius'
- 'pick arc slot angle' → 'pick slot angle'
- 'pick arc slot width' → 'pick slot width'
Context is already clear from the active tool. Follows reviewer
feedback to make hints more concise and less verbose.
Improves readability while maintaining clarity
* per PR feedback, Change 'change mode' to 'switch mode' to match all other drawing tools.
* remove hanging Claude
* per PR review, restore accidentally deleted Rectangle adaptParameters method
Add back DSHRectangleController::adaptParameters template specialization
that was accidentally removed during manual file reconstruction.
This method handles parameter updates during Rectangle tool interaction,
including checkbox synchronization for M key mode switching and proper
state management when transitioning between construction methods.
Without this method, mode switching leaves the tool in an inconsistent
state with misaligned parameters and out-of-sync checkboxes.
Addresses reviewer feedback - this functionality should not be removed.
* Clean up placeholder comment per PR review feedback
* Refactor Arc hints to declarative data-driven architecture
Inspired by early feedback regarding separation of code and data, this
refactors the Arc tool hints from functional logic to a pure declarative
table-driven system.
Key improvements:
- Pure data-driven hint lookup via static table
- Complete separation of hint data from control logic
- Elimination of nested if/switch complexity
- Establishes reusable pattern for other drawing tools
- Maintains identical functionality with a cleaner architecture
This creates a scalable template that other sketcher tools and workbenches can adopt,
demonstrating proper usage of the InputHint framework through
declarative configuration rather than imperative code."
* Convert Point tool to declarative hint system
Apply the proven declarative pattern to Point tool:
- Replace functional getToolHints() with table lookup
- Single state tool demonstrates pattern scalability
- Maintains identical functionality with cleaner architecture
* Convert Line tool to declarative hint system
Apply declarative pattern to Line tool with 3 construction methods:
- OnePointLengthAngle, OnePointWidthHeight, TwoPoints
- All method/state combinations properly handled
- Maintains identical functionality with cleaner architecture
* Refine Arc tool declarative hints - address maintainer feedback
- Use camelCase naming convention (switchModeHint, getArcHintTable)
- Move tr() calls to runtime to fix translation caching issues
- Preserve declarative table structure with runtime generation
- Add structure comments for maintainability
- Maintains identical functionality with cleaner implementation
* Refine Point tool declarative hints - address feedback
- Use camelCase naming (getPointHintTable)
- Move tr() calls to runtime to fix translation issues
- Preserve simple declarative structure
- Point tool has no construction methods, keeps single-state simplicity
* Refine Line tool declarative hints - address feedback
- Use camelCase naming (switchModeHint, getLineHintTable)
- Move tr() calls to runtime to fix translation issues
- Preserve declarative table structure with 3 construction methods
- Maintains all functionality for OnePointLengthAngle, OnePointWidthHeight, TwoPoints modes
* Convert Arc of Ellipse to declarative hint system
- Replace functional switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- Maintains 4-state workflow: center, axis, start, end points
- Consistent with refined declarative pattern used in Arc/Point/Line tools
* Convert Circle to declarative hint system
- Replace nested if/switch statements with declarative table approach
- Use camelCase naming and runtime tr() calls
- Support both Center and ThreeRim construction methods
- Maintains all state transitions: center/rim points
- Consistent with refined declarative pattern
* Convert Polygon to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- Simple 2-state tool: center selection and rotation/size
- Preserves polygon-specific hints (U/J keys for side count)
- Consistent with refined declarative pattern
* Convert Slot to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- Simple 3-state tool: start point, end point, radius
- Consistent with refined declarative pattern
* Convert Arc Slot to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- 4-state tool: center, radius, angle, width
- Consistent with refined declarative pattern
* Convert Arc of Hyperbola to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- 4-state tool: center, axis, start point, end point
- Consistent with refined declarative pattern
* Convert Parabola to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- 4-state tool: focus point, axis, starting point, end point
- Consistent with refined declarative pattern
* Convert B-spline to declarative hint system
- Replace nested if/switch statements with declarative table approach
- Use camelCase naming and runtime tr() calls
- Support both ControlPoints and Knots construction methods
- Preserves special finish functionality (MouseRight)
- Consistent with refined declarative pattern
* Convert Ellipse to declarative hint system
- Replace nested if/switch statements with declarative table approach
- Use camelCase naming and runtime tr() calls
- Support both Center and ThreeRim construction methods
- 3-state workflow for each method
- Consistent with refined declarative pattern
* Convert LineSet to declarative hint system
- Replace switch statement with declarative table approach
- Use camelCase naming and runtime tr() calls
- 2-mode tool: first point, then multi-point with finish/switch
- Preserves finish and mode switching functionality
- Consistent with refined declarative pattern
* Convert Rectangle to declarative hint system
- Replace nested switch statements with declarative table approach
- Use camelCase naming and runtime tr() calls
- Support all 4 construction methods: Diagonal, CenterAndCorner, ThreePoints, CenterAnd3Points
- Each method has 4-state workflow with switch mode functionality
- Consistent with refined declarative pattern
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>