==========================================================================
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
==============
- Zero initialization of the jacobian matrix
- Correct notification of redundant/conflicting in presence of non-driving constraints.
fixes#3529
Apart for the inclusion of the Analysis functionality, SketchObject has been improved to provide:
- A fast painless deleteAllConstraints() function
- A fast painless constraint group deletion, delConstraints(std::vector<int> ConstrIds, bool updategeometry)
A series of algorithms to detect missing constraints and create them.
Each of the algorithms is divided in different steps for maximum flexibility:
/// There is a first type of routines, simple routines, which work in the following order:
/// Detect - (Analyse) - [Get] - [Set] - Make
///
/// The Detect step just identifies possible missing constraints.
///
/// The Analyse, which is not available for all the routines, operates in detected constraints of the same routine, to
/// look for alternatives. For example, a general pointonpoint detection leads to a search for coincident constraints, which
/// can be later run via Analyse if it is intended to convert endpoint coincidence to endpoint perpendicular and tangent constraints.
///
/// The Get retrieves the result of the analysis as a vector of ConstraintIds, indicating the suggested constraints. This step is intended
/// for enabling the user to check the result of the analysis, rather than applying it. If only applying is intended, this step is not necessary
/// as the Make will operate on the result of the Detect - Analyse directly.
///
/// The Set changes the detected result. It modifies the SketchAnalysis object. It only modifies the SketchObject as far as the SketchAnalysis is changed.
/// It does not apply any changes to the sketch. It is intended so as to enable the user to change the result that will be applied.
///
/// Neither the Detect, nor the Analyse, nor the Get steps modify the Sketch geometry.
///
/// Make applies the constraints stored internally in the SketchAnalysis object.
It includes an automatic constraining algorithm for coincidences, horizontals/verticals and equality:
/// A second type of routines, complex routines, are thought for running fully automatic and they Detect, Analyse and Make.
/// They may also apply a variaty of types of Constraints.
It also includes some helper functions, like autoRemoveRedundants
=======================================
The original implementation won't work when the point is already on the line. See:
https://forum.freecadweb.org/viewtopic.php?f=3&t=29115#p237397
The new implementation works on the projections of the vectors linking the two first points with the symmetry point on the vector linking the two first points.
This assures that there is no stability problem when the point is already on the symmetry axis.