==========================================================
Trimming was not considering a case where an ellipse is trimmed with respect to its own internal aligment geometry.
This resulted in Coincident Constraints with PointPos = Sketcher::none, which is invalid.
==========================================================================
Intercurve fillet uses endpoint constraints for improved accuracy, but before this
commit was only considering a coincident constraint. Now it also considers an endpoint
tangency or perpendicular.
delConstraintOnPoint with coincidentonly=false, was not checking endpoint perpendiculars and
would therefore fail to delete them.
https://forum.freecadweb.org/viewtopic.php?f=3&t=31594&start=30#p265731
=========================================
This commit introduces two functions to operate on all datum constraints exclusively:
- Make all datum constraints driving or not driving, depending on the argument.
- Move all datum constraints at the end of the constraint list.
The practical use an ongoing effort towards improving the block constraint behaviour, that will be defered to 0.19
========================================================================
Centralise the knowledge on whether a constraint is dimensional or not within the constraint
=========================================================
This ensures that the exception back in the c++ that invoked python retains the type of exception and can be properly catched.
==============================================
Generally, bounded curves require that the curves are coincident at one point, the vertex to be filleted.
Trimmed curves, like combinations of line segments, arcs of conics, do not require it, as they are able to extend the trimmed
curve using the basis curve. However, they work fine when there is such a coincidence.
=============================================
Angle constraints are internally coded using the diverging points of the segments (PointPos != none) in normal 2 segment angle constraints.
This creates a problem with the mechanism to transfer enpoints on angle deletion.
fixes#3589
========================================
Now the Grid is calculated based on the maximum semiaxis length. Grid is recalculated on every redraw of the Sketcher.
========================================
Axes size was bounded to the boundingbox of the underlaying 2D shape. However, this does not even get updated in no update mode and provides unreliable values.
The axes calculation now:
- is coded to be the same size and fully symmetric.
- is coded to be minimum 100 mm semiaxis, which gives a good impresion for empty sketches with default zoom.
- is coded to grow with the largest of the semiaxes.
fixes#3334
=========================================================
Before this commit equality line to circle is allowed although the solver can not process it.
Similar happens for several combinations of incompatible edges.
===============================================
It is a long felt need that redundant constraints are not generated while autoconstraining.
The solver sketcher in v0.17 is überpicky with redundants due to the new popularity contest algorithm. The former behaviour is exhacerbated.
This new mode enables automatic redundant constraint removal.
In UI operations IN EDIT MODE, upon detection of redundancy by the solver, the Sketcher will remove all redundant constraints detected by that solve.
This makes the sketcher much less annoying.
How to test this?
The easiest example is to create a vertical line. Then make the endpoints symmetric with respect to the horizontal axis. Without this mode,
the vertical constraint and the symmetry constraint are redundant. With this mode, the vertical constraint gets automatically removed by the Sketcher.
==============
- Zero initialization of the jacobian matrix
- Correct notification of redundant/conflicting in presence of non-driving constraints.
fixes#3529
+ add signal showFormulaDialog to QuantitySpinBox in order to indicate whether the formula dialog opens or closes
+ when formula dialog opens then hide the button box in the parent dialog, show it again when the formula dialog closes