===============================================
This commit changes the behaviour of expose internal geometry for bsplines and makes it converge with the implementation for other complex forms.
This functionality now does not introduce constraints (the DoF is not affected by its execution).
BSplines, when created, are still created as polynomic. However, exposing previously deleted or otherwise hidden (increase of degree) poles does not
constraint them.
why?
While a priori the old behaviour is advantageous for the user in many situations, it severely breaks NURBS-ized shapes and gets in the way of bsplines after
increasing the degree of the bspline.
===============================================================
The implementation of BSpline differs from previous complex forms.
The BSpline is created constraint to be polynomic (non-rational), with radius of first circle and equality constraints.
Hide unused internal geometry considers as unused the following constraints:
- A pole which has equality constraints with another pole of the same bspline
- Any radius constraint on a pole
Deletion of a BSpline will delete the internal geometry that is unused as per the definition above.
If there is another constraint (other than the Internal alignment constraint) it will leave the internal geometry having such constraint undeleted.
=====================================================================
Extension of Constraint Python code to consider the case with 4 ints, where the last int is InternalAligmentIndex for InternalAligment constraint
===================================
In the unusual event that endpoint knot multiplicity is edited, avoid trying to force the bspline end-point
to match the corresponding control point (aka pole), as this leads to unsolvable sketches.
=====================================================================================
Support for tangency/perpendicularity using angle via point for BSpline with appropriate
endpoint multiplicity so that the endpoints goes thru the first and last poles (control points).
Warning: Not applicable to periodic BSplines.
Warning: Not applicable to any non-periodic BSpline with inappropriate endpoint conditions.
==============================================
This commit is intended to allow to early merging to master of BSpline support. Parts of it will be reverted when a more advanced solver implementation is available.
The intention is to have an advances solver implementation in the future.
This commit cripples part of the potential functionality, but allows a very simplistic solver structure (no de Boor, no recursion).
In particular:
1. Knots are not solver parameters and the solver acts as if such a parameter did not exist.
2. For non-periodic case, the start point and the endpoint coincide with the first pole and the last pole respectively. This is only valid under certain first and last
knot multiplicity. If the user manually changes this multiplicities, the sketch will remain unsolved. For the periodic case, end and start points are not even solver
parameters as an end and start point is an ilusion and we really do not care where that happens. It is not reasonable to ask the user to constrain where this point should
be.
===================================
An additional index for internal geometry elements is introduced, to be stored only Internal Aligment constraint and backwards compatible.
=============================================================
Internal alignment of BSplines requires an extra index for unbounded same-type internal geometry (poles, probably also in the future knots).
Value shall not be used, as it interferes with the update mechanism for constraint values.
An alternative solution would be to add another int to all the constraints just for this case.
As internal geometry does not use Third, it seems reasonable to reuse it for this indexing purpose.
====================================================
Creation of solver geometry definitions from Part::BSpline geometries and update of solved geometry back.
=============================================
multiplicities, degree and periodic are left as non-parameters of the solver, while still allowing certain manipulations to be effected from the solver
in certain situations (for example modifying the multiplicity of start/end nodes when applying G1,G2,G3 constraints between BSplines).