View Issue Details
|ID||Project||Category||View Status||Date Submitted||Last Update|
|0002281||Sketcher||Bug||public||2015-09-26 21:16||2015-10-22 22:27|
|Fixed in Version||0.16|
|Summary||0002281: Tangent and coincident constraint on 2 lines cause issues|
|Description||When adding tangent constraint by selecting 2 lines and after adding additional coincident constraint to the line end points sketcher starts to misbehave.|
|Steps To Reproduce||- Add two lines|
- Select them and add tangent constraint
- Add coincident constraint between end points and observe the result (try to move line)
The problem is with redundant constraint detection in QR decomposition. With the default 1E-13 pivot threshold, it results in the described behaviour. Parameters 8, constraints 4, rank=4.
If the default threshold is changed to 1E-15, then the rank of the QR matrix is reported as 3 (the reality, as the coincidence only reduced one DoF, as the other is determined by the tangency).
This ticket remains open and tagged with "solver", so as to further develop solvers (it would make a beautiful unit test).
Funny enough, without changing the threshold to 1E-15 (this is with the threshold at 1E-13), if you click "solve" in the advanced solver dialog, then the setupSketch reevaluates the redundancy to a correct rank=3 and it can be moved.
The problem arises because the geometry moved as a consequence of the solve after the initial solution was calculated. So the initial solution is no longer valid and generates problems when it is partially redundant.
It is not the "full story", as it does not explain why using 1E-15 as threshold did the trick directly.
Nevertheless, the fix solves the issue:
https://github.com/abdullahtahiriyo/Fre ... issue_2281
Maybe somebody smarter than me can be figure out why.
FreeCAD: master e1dd86f0
Committer: wmayer Details Diff
|Sketcher: Bug fix: unable to move geometry after addition of a constraint
This fixes issue:
How to reproduce?
With Auto-Update mode unchecked, execute the sequence in the bug tracker. You will reach to a geometry assembly successfully solved that can not be moved.
The coincident constraint is partially redundant within the meaning of redundancy of the solver.
The solve within "addconstraint" in SketchObjectPy.cpp causes the geometry to move to meet the coincident constraint.
At the end of the solve, the initial solution used in diagnostics is no longer valid (the geometry moved). This causes a subsequente move not to be executed.
Recalculate just the initial solution after the addition.
|mod - src/Mod/Sketcher/App/SketchObject.cpp||Diff File|
|mod - src/Mod/Sketcher/App/SketchObject.h||Diff File|
|mod - src/Mod/Sketcher/App/SketchObjectPyImp.cpp||Diff File|
|2015-09-26 21:16||triplus||New Issue|
|2015-09-27 09:10||abdullah||Assigned To||=> abdullah|
|2015-09-27 09:10||abdullah||Status||new => assigned|
|2015-10-06 12:05||abdullah||Tag Attached: Solver|
|2015-10-06 12:09||abdullah||Note Added: 0006481|
|2015-10-06 12:09||abdullah||Status||assigned => confirmed|
|2015-10-06 12:29||abdullah||Note Added: 0006482|
|2015-10-07 12:59||abdullah||Note Added: 0006486|
|2015-10-07 12:59||abdullah||Status||confirmed => closed|
|2015-10-07 12:59||abdullah||Resolution||open => fixed|
|2015-10-07 12:59||abdullah||Fixed in Version||=> 0.16|
|2015-10-22 22:27||wmayer||Changeset attached||=> FreeCAD Master master e1dd86f0|