=========================================================================================
By default notification is on, so that Newbies do not complain why FC is deleting that other constraint they have added before.
Power users generally will set it off, as they do not want to be bothered by pop ups and know what they are doing.
================================================================================
fixes#3299 (remaining)
Draw a line. Draw an arc. Make edge to edge tangency. Select endpoints. Try to create a coincident constraint. You now get an Endpoint-to-Endpoint tangency.
==========================================================
partly fixes 3299
Draw a line. Draw an arc. Make one endpoint of each coincident. Select the line. Select the Arc. Hit tangency. You now get an Endpoint-to-Endpoint tangency.
======================================================================
The switch virtual space toolbar button operated just to switch from one virtual space to the other (without any element selected), so switching the "mode".
Now if there is a selection, all the constraints are moved to the alternative virtual space.
It works similar to the toggle buttons for geometry elements and constraints
=======================================================
set/get/toggle python interface to enable to set the virtual space status of a constraint via SketchObject.
=================================================================================
The checkboxes enable a constraint to swap virtual space.
If checked the constraint is visible in the selected space and hidden in the other space (Real Space or Virtual Space).
If unchecked the constraint is visible in the other space and hidden in the selected space.
=====================================================================
The constraint class has been extended so that every constraint knows and serializes whether it is in virtual space or in normal real space.
===========================================================================
Block constraint is naturally redundant/conflicting with almost any other constraint applied to an edge (certainly with constraints operating only on that element).
As such, a block constraint will have very little applicability in absence of a way to handle this redundancy/conflicting. For example, in the case of a BSpline all its
internal geometry (construction circles on poles and its constraints) would have to be removed before locking. This would mean that it is not possible to define the BSpline shape
and then block it, as when removing the internal geometry the shape would be lost. In other cases, like temporally blocking to avoid that a part of the sketch moves while performing some
operation with the idea of afterwards unblocking it, it would mean removing all constraints, to add the block constraint, then perform the action, then remove the block constraint and manually
constraint it again.
Handling this situation in a user expected way means ignoring certain constraints (those causing the redundancy/conflicting), so that the solver is not aware of them and does not complain. However,
generally ignoring those constraints has a negative effect, in that constraints applied by the user on already blocked geometry, or constraints that otherwise lead to a conflicting or redundant
situation as a consequence of actions (further constraining) after the Block constrain is applied are ignored, thereby not properly informing the user of this situation, which is undesirable.
This new mechanism takes account on the position of the constraints relative to the involved blocked constraint(s). As such, redundant/conflicting constraints that were added before the Block
constraint are ignored, whereas those constraints that lead to a redundant/conflicting situation and added AFTER the block constraint was already in place, those are not ignored and are reported
accordingly.
========================================
When writting solver implementations it has to be taken into account that the normal is not to be provided in the sense of the curvature, but to
the left when walking a curve from start to end.
https://forum.freecadweb.org/viewtopic.php?f=10&t=26312#p209486
This commit has impact on all the previous files using bspline and endpoint to endpoint tangency.
A work-around is to delete the tangency and do it again.
=======================================================
fixes#2275https://freecadweb.org/tracker/view.php?id=2275
Deletion of coincidents rely on selected vertex. The original code was trying to delete a coincident without checking whether one was there.
The implementation now relies on checking whether a coincident is present.
========================================================================================
Users generally expect that validate Sketch checks the visible part, perhaps because it is not called from the sketcher's edit view, but from the 3D view, perhaps
because that part is relevant for further construction.
On the other hand the tool's name is Validate Sketch and construction geometry belongs to the sketch.
So a new checkbox is introduced, by default enabled to ignore construction, but still allowing the user to make it operate in one direction or the other.
See:
https://forum.freecadweb.org/viewtopic.php?f=3&t=26139&p=208582#p208693