Commit Graph

1917 Commits

Author SHA1 Message Date
Abdullah Tahiri
f93b376cd5 Sketcher: Improved ViewProvider visualisation for non-rational Bsplines with non-unitary weight constraints
===========================================================================================================

OCCT forces weights of non-rationa Bsplines to be 1.0

In the presence of non-unitary weight constraints, the weight representation (constraint) has a different radius
than the circle.

This commit fixes this behaviour, by forcing the circle to match the weight constraint.

The information layer still reports OCCT weights being 1.0, but the visual artifact is fixed.
2021-02-18 17:28:38 +01:00
Abdullah Tahiri
95fcaccfd8 Sketcher: Fix external geometry ellipse projection in parallel plane
====================================================================

When the ellipse to be projected and the sketch plane are parallel, the original code
by shermelin provided for a translation of the original ellipse, which would be the best solution
if it weren't because the Sketcher, internally, works under the assumption of a normal vector to the
sketcher plane being (0,0,1). If the original ellipse is parallel to the sketch plane, but the sketch
plane is not the XY plane, the copy and translation would result in a ellipse not in the XY plane of the
Sketcher. Then the sketcher internals will not properly consider its dimensions.

The solution applied here is to default to the general method for non-parallel planes.

It solves:
https://forum.freecadweb.org/viewtopic.php?f=3&t=55284#p477522
2021-02-13 15:18:34 +01:00
Abdullah Tahiri
5086c5f38d Sketcher: Coverity fix in Sketch::analyseBlockedGeometry
========================================================

Users chennes and hyarion made me aware of this covereity issue:

Fixes Coverity: geoit can be end() when dereferenced
https://github.com/FreeCAD/FreeCAD/pull/4429/files#

When analysing the block where the dereferrencing appears, it
appears that it is a left-over that no longer makes sense:
- The algorithm classifies block constraints into those that are
not affected by any other driving constraint and those that are
affected by other driving constraints.
- The offending block deals with internal aligned geometry, thus
per definition has a driving internal alignment constraint, for which
the previous block already set the need of post-analysis.
- No matter what, the geometries, the complex one and the internal one
will have at least the driving internal alignment constraint, so they
cannot become "not affected by any other driving constraint".
- If the geometry had a block constraint on it, it was already added for
post-analysis in the previous block. If it did not have one block constraint,
the fact that it is internal aligned geometry is an irrelevant consideration.

Probably there was a point during development when this made sense, but with
the current post-analysis, it does not appear to make sense anymore. So the
block was removed.

This commit adds a unit test for blocked geometry (new block constraint).
2021-02-13 11:44:06 +01:00
Yorik van Havre
84b8282f48 Updated ts files 2021-02-12 14:47:37 +01:00
Benjamin Nauck
10b08671ef Sketcher: Fix uninitialized scalar field in ctor
Fixes Coverity issue:
CID 316539 (#1 of 1): Uninitialized scalar field (UNINIT_CTOR)
uninit_member: Non-static class member lastHasPartialRedundancies is not initialized in this constructor nor in any functions that it calls.
2021-02-11 11:48:19 +01:00
Abdullah Tahiri
0641e243e0 Sketcher: Bug fix / improve B-Spline knot support
=================================================

Knot position is not calculated by the solver, but by OCCT when updating the
b-spline to conform to given pole positions, as mandated by the solver. Before
this commit, all constraints driving and non-driving operating on the knots required
and extra solve (from advanced solver dialog, or from the Python console), or a recompute
to be recomputed.

This commit introduces transparently re-solving at Sketch.cpp level if B-Splines are present,
so that when the Sketcher mandated solve returns, the geometry is fully solved.
2021-02-10 18:53:52 +01:00
Abdullah Tahiri
c59b9bd013 Sketcher: fix malformed constraint on nurbs conversion
======================================================

Coincident on midpoint cannot be supported by a bspline.

Fixes:
https://forum.freecadweb.org/viewtopic.php?p=476410#p476410
2021-02-10 06:41:16 +01:00
Abdullah Tahiri
1e2f8e366f Sketcher: Fix geometry state synchronisation routine 2021-02-09 20:22:30 +01:00
luz paz
b76fe29412 Sketcher: Add 'Sketcher B-spline tools' to translation [skip ci]
Forum thread: https://forum.freecadweb.org/viewtopic.php?f=34&t=55381  
and several whitespace fixes
2021-02-09 20:18:16 +01:00
Yorik van Havre
bcb5c8786f merged crowdin translations 2021-02-09 16:12:18 +01:00
Abdullah Tahiri
36fdbc460a Sketcher: Geometry state synchronisation
========================================

The geometry state stored in the geometryFacade is modified following a mutable model
(without setting the Geometry property on Constraint change), in order to avoid coupling
the addition/removal of a constraint with a change of the Geometry Property.

This design decision however interferes with the ability of the Geometry property to restore
the correct geometry state upon redo/undo.

While such a situation is rare in the case of Internal Alignment geometry, because constraint
addition/removal is performed with the corresponding geometry addition/removal (within the same
transaction. That is not the case with the Block constraint (or another future general case where
the geometry state may be applied).

This commit leverages the synchronisation mechanism already in use for non-properties (e.g. external geometry or
vertex indices) to check and synchronise geometry state upon undo/redo and restore.

Bonus:
- addGeometryState is refactored to separate the checking logic from the setting logic.
2021-02-09 08:14:36 +01:00
Yorik van Havre
298004a39c Updated master TS files 2021-02-08 16:35:41 +01:00
Abdullah Tahiri
727dc9fa9e Sketcher: Fix wrong diameter reference constraint value when blocked
====================================================================

Fixes:
https://forum.freecadweb.org/viewtopic.php?p=474276#p474276
2021-02-06 06:22:30 +01:00
donovaly
65656f6d22 [Sketcher] make more pointers to the UI std::unique_ptr
addendum to PR #4362

(Same as PR #4293, just for Sketcher

as noted in https://github.com/FreeCAD/FreeCAD/pull/4271#discussion_r554673632
the pointer to the UI should be a unique pointer.

This PR does this for all Sketcher dialogs that don't already use a unique_ptr.)
2021-02-05 17:14:24 +01:00
wmayer
656c4919bc Qt4: [skip ci] fix build failure 2021-02-04 15:31:06 +01:00
Greg V
ce7b57a08f Sketcher: [skip ci] fix computing of hotspot of sketcher icons on Wayland
Restrict the hotspot multiplication on unix platforms to X11 (xcb platform)
2021-02-04 10:45:33 +01:00
donovaly
28c66fc501 [Sketcher] make pointers to the UI std::unique_ptr
Same as PR #4293, just for Sketcher

as noted in https://github.com/FreeCAD/FreeCAD/pull/4271#discussion_r554673632
the pointer to the UI should be a unique pointer.

This PR does this for all Sketcher dialogs that don't already use a unique_ptr.
2021-02-04 10:37:44 +01:00
j
6db7737547 Sketcher: Group tests in different directories 2021-02-04 08:10:28 +01:00
j
7b9d9fdcdb Sketcher: new fillet UI command 2021-02-04 08:10:28 +01:00
j
9fc31dfa22 Sketcher: new Fillet - icon 2021-02-04 08:10:28 +01:00
j
46feeb11f6 Sketch: new fillet Python support 2021-02-04 08:10:28 +01:00
j
f6f43b6fe4 Sketcher: Constraint documentation 2021-02-04 08:10:28 +01:00
j
86992f8086 Sketcher: Preserve corner and constraints for sketch fillets
Currently the sketch fillet tool deletes any constraints associated with
the two lines to be filleted. By leaving a vertex at the intersection,
we can instead preserve most constraints in reasonable ways.

Sketch fillet horizontal and vertical point-to-point constraint support
Also better future compatibility for point constraints, and some minor tweaks.
2021-02-04 08:10:28 +01:00
luz paz
45eea3d9e7 Fix various typos [skip ci]
Found via codespell v2.1.dev0  
```
codespell -q 3 -L aci,ake,aline,alle,alledges,alocation,als,ang,anid,apoints,ba,beginn,behaviour,bloaded,byteorder,calculater,cancelled,cancelling,cas,cascade,centimetre,childs,colour,colours,commen,connexion,currenty,dof,doubleclick,dum,eiter,elemente,ende,feld,finde,findf,freez,hist,iff,indicies,initialisation,initialise,initialised,initialises,initialisiert,ist,kilometre,lod,mantatory,methode,metres,millimetre,modell,nd,noe,normale,normaly,nto,numer,oder,orgin,orginx,orginy,ot,pard,pres,programm,que,recurrance,rougly,seperator,serie,sinc,strack,substraction,te,thist,thru,tread,uint,unter,vertexes,wallthickness,whitespaces -S ./.git,*.po,*.ts,./ChangeLog.txt,./src/3rdParty,./src/Mod/Assembly/App/opendcm,./src/CXX,./src/zipios++,./src/Base/swig*,./src/Mod/Robot/App/kdl_cp,./src/Mod/Import/App/SCL,./src/WindowsInstaller,./src/Doc/FreeCAD.uml,./build/doc/SourceDocu
```
2021-02-03 14:08:57 +01:00
Stefan Brüns
569817d87a Fix ODR violation, correct Ui_TaskSketcherGeneral namespace
The generated ui_TaskSketcherGeneral.h defines the class in the
SketcherGui namespace.

Fixes #4529
2021-01-28 17:43:10 +01:00
Abdullah Tahiri
43aef8616d ViewProvider: make partial redundant color blue 2021-01-27 07:53:25 +01:00
Abdullah Tahiri
2f731b7da7 Sketcher: Show partial redundant messages when sketch is fully constraint 2021-01-26 09:35:30 +01:00
Abdullah Tahiri
125cf099a3 Sketcher: Invalid Sketch geometry color in preferences 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
bcfe7e96b0 Sketcher: New geometry color to indicate invalid sketch 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
1e4551123d GCS: convenience diagnosis functions 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
186f5a4c19 GCS/Sketcher: Add equal length line constraint using the new single constraint 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
5609269ca8 GCS: New Constraint for equal size lines, avoiding to use an extra parameter
============================================================================

This specific constraint removes the free parameter of the previous implementation. This solves:
https://tracker.freecadweb.org/view.php?id=4501

fixes #4501

However, this implementation of equal size produces zero gradients when coordinates of lines are aligned,
e.g. vertical or horizontal. These zero gradients, which are mathematically right ruin the diagnosis, which
regards corresponding elements as fully constraint (because they are locked from a solver point of view), when
they are simply locked, but are movable and constrainable. For this, when the rightful gradient is small enough
(<1e-10) it is substituted by a surrogate gradient of 1e-10, which solves the problem with the diagnose, which
treats as zero only values under 1e-13 (pivot threshold used in QR decomposition).

This special behaviour fixes the wrong detection here:
https://forum.freecadweb.org/viewtopic.php?f=8&t=53466&start=40#p464168

It also fixes this one:
https://forum.freecadweb.org/viewtopic.php?p=468585#p468587
2021-01-23 07:53:28 +01:00
Abdullah Tahiri
ea49ed9215 Sketcher: Update solver partially redundant constraint information in the solver messages 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
67a9393300 Sketcher: command to select partially redundant constraints 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
b01313c0d8 Sketcher: SketchObject partially redundant status 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
a3c1010800 Sketcher: Sketch retrieve partially redundant constraints 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
65fb44df6c GCS: report partially redundant constraints 2021-01-23 07:53:28 +01:00
Abdullah Tahiri
41e1626bd1 Sketcher: increase relative size of the subindices of the constraints
=====================================================================

Increase the size of the subindices as per request:
https://forum.freecadweb.org/viewtopic.php?p=468144#p468144
2021-01-18 14:25:30 +01:00
Abdullah Tahiri
625502bb47 Sketcher: Compensate for Coin not taking the dpi of the monitor into account in font pixel setting
==================================================================================================

Coin documentation indicates the size of a font is:

SoSFFloat SoFont::size        Size of font. Defaults to 10.0.
For 2D rendered bitmap fonts (like for SoText2), this value is the height of a character in screen pixels. For 3D text, this value is the world-space coordinates height of a character in the current units setting (see documentation for SoUnits node).

However, with hdpi monitors, the coin font labels do not respect the size passed in pixels:
https://forum.freecadweb.org/viewtopic.php?f=3&t=54347&p=467610#p467610
https://forum.freecadweb.org/viewtopic.php?f=10&t=49972&start=40#p467471

Because I (abdullah) have  96 dpi logical, 82 dpi physical, and I see a 35px font setting for a "1" in a datum label as 34px,
and I see kilsore and Elyas screenshots showing 41px and 61px in higher resolution monitors for the same configuration, I think
that coin pixel size has to be corrected by the logical dpi of the monitor. The rationale is that: a) it obviously needs dpi
correction, b) with physical dpi, the ratio of representation between kilsore and me is too far away.

This means that the following correction does not have a documented basis, but appears necessary so that the Sketcher is usable in
HDPI monitors.
2021-01-16 08:00:30 +01:00
Abdullah Tahiri
a56a22de56 Sketcher: fix horizontal distance constraint on external edge
=============================================================

Fixes:
https://forum.freecadweb.org/viewtopic.php?f=3&t=54348#p467107
2021-01-15 14:38:48 +01:00
Abdullah Tahiri
919196fb9a Sketcher: Migrate old construction points as construction
=========================================================

Fix that construction points, which did not have the construction flag before, as construction flag was
reserved for internal alignment points, are migrated as construction points.

Fixes:
https://forum.freecadweb.org/viewtopic.php?f=8&t=53466&start=40#p467176
https://forum.freecadweb.org/viewtopic.php?p=467160#p467160
2021-01-14 19:22:15 +01:00
Abdullah Tahiri
fe1bee4bea Sketcher: Increase distance from constraints to geometry
========================================================

With the possibility to increase icon sizes via font configuration, the
default hardcoded 2.5 step for seeking the constraint position becomes too
small, causing constraints, specially when multi-icon, to superimpose geometry points,
removing the ability to pick them.

Changing the default gives some increased room for icon size.
2021-01-14 17:22:09 +01:00
Abdullah Tahiri
67b45c7dae Sketcher: fix font size 2021-01-14 16:27:48 +01:00
wmayer
6b3936c8b8 Sketcher: [skip ci] fix segmentation fault in ViewProviderSketch::drawConstraintIcons()
For more details see: https://forum.freecadweb.org/viewtopic.php?f=19&t=54193
2021-01-11 15:31:41 +01:00
Abdullah Tahiri
f87f1e57dc Sketcher: ViewProvider HDPI lineWidths and pointSizes as float
==============================================================

A previous commit assumed values for lineWidths and pointSizes were integers. This commit fixes this.
2021-01-10 19:31:03 +01:00
Abdullah Tahiri
faf8d0ac27 Sketcher: Change of color of Y axis
===================================

On request:
https://forum.freecadweb.org/viewtopic.php?f=10&t=53221&start=50#p464971

To better differentiate constrain element from Y-axis.
2021-01-10 16:33:12 +01:00
Abdullah Tahiri
4e5f0a3850 Sketcher: Check for null geometry shapes before adding them to the toShape array 2021-01-09 20:08:05 +01:00
Abdullah Tahiri
e6af511f39 Part/Sketcher: Refactor Geometry Extensions copy/save/restore AND attachment notification
=========================================================================================

- Long overdue refactor to avoid repetition during save/restore and copy.
- New interface to notify an extension when it is attached. It also enables the extension to gain
a pointer to the geometry container. This is intended to extend the functionality already existing
in Part::Geometry.
2021-01-09 20:08:05 +01:00
Benjamin Nauck
927fdc9edc [Sketcher] Fix crash in SketcherObject::setDatum
The variable newVals can't be used after std::move, fetch it from the
constraint it if an error occurs.
2021-01-09 07:50:31 +01:00
wmayer
1851ddd933 Sketcher: [skip ci] fix -Winconsistent-missing-override 2021-01-08 17:32:41 +01:00