Commit Graph

1017 Commits

Author SHA1 Message Date
Chris Hennes
38cac0f995 Sketcher: Add gtest unit test framework 2023-04-22 20:56:29 +02:00
André Caldas
82900b2417 Deletes GCS::Constraint directly instead of calling GCS::free(). 2023-04-06 16:29:48 +02:00
luzpaz
5444a4a0cb Fix trailing whitespace 2023-04-02 12:18:13 +02:00
Uwe
53de24ae2d [Sketch] placecgs: remove unused includes
- also sort includes
- also fix too long lines etc. (done by clang formatter)
2023-03-26 20:27:18 +02:00
Ajinkya Dahale
68d67ecb87 [Sketcher][planegcs] Fix knot position in non-uniform B-spline
The default factors set in `addConstraintInternalAlignmentKnotPoint` does not
work if the knots around a C1 knot are not equally far.
2023-03-24 16:30:48 +01:00
Ajinkya Dahale
d14daed442 [Sketcher] Constrain first pole weight in exposeInternalGeometry
This commit is part of a project funded by the Open Toolchain Foundation under the title "Open Toolchain Foundation - Curve drawing tool in Sketcher Workbench"
2023-03-24 16:30:48 +01:00
Ajinkya Dahale
e83a9804c1 [Sketcher] Create DSH for drawing B-splines by interpolation
Only creates 1-degree splines by describing knots.

This commit is part of a project funded by the Open Toolchain Foundation under the title "Open Toolchain Foundation - Curve drawing tool in Sketcher Workbench"
2023-03-24 16:30:48 +01:00
Uwe
6bf09c512d [Sketch] Constraints.cpp: formatting fixes
- fix too long lines
- also let clang reformat the file to uniform the formatting
2023-03-20 16:53:41 +01:00
Florian Foinant-Willig
c23f6a9221 Fix circles distance constraint for concentrics 2023-03-20 16:02:08 +01:00
flachyjoe
e2a13763e9 Sketcher: Add circle to circle distance constraint 2023-03-19 14:05:35 +01:00
wmayer
82ac24de5c clang: fix -Wunused-parameter, -Wunused-variable, -Wswitch 2023-03-12 15:05:21 +01:00
Abdullah Tahiri
aca75815dc Sketcher: SketchObject using the new notification system
========================================================

- CriticalMessage old signal is reconverted to new notification system. This enables to remove the obsolete old system.

- An example of how common errors can be provided with translation support is added, so that App notifications appear
translated in the NotificationArea.
2023-03-12 06:06:29 +01:00
wmayer
84dc46d8b5 Sketch: export GeoListModel::getGeoListModel to fix linking error with MinGW 2023-03-09 19:38:40 +01:00
Abdullah Tahiri
ee0c3ad5c1 Console/ILogger: Refactor and extension
=======================================

Refactor:
 - Substitute the use of variadic templates with parameter packs.
 - Use recently incorporated external library "fmt" to handle printf like formating.
 - Extensive cleaning of pragmas and unnecessary forward declarations.
 - Parameter packs and libfmt provide a much stronger type checking now, so
   conversions that are by standard implicit as bool to int need an explicit static_cast
   to avoid compilation warnings.

Extension:
 - Include a notifier field, so that the originator of the message can be provided. E.g. Document#DocumentObject
 - Include a new type of message called CriticalMessage, this message is intended to have
   special behaviour in the future. Namely, it will be used to notify forward compatilibity issues.
   It will be used to substitute the current signal/slot mechanism.
 - Include two new types of messages for user notifications (Notification and TranslatedNotification). This messages
   will be use to convey UI notifications intended for the user (such as non-intrusive message about the usage of a tool). There
   are two versions to mark whether the string provided as a message is already translated or not. When using the console system for
   notifications, these notifications may originate from the App or the Gui. In the former, it is generally the case that the strings
   of messages are not (yet) translated (but they can be marked with QT_TRANSLATE_NOOP). In the latter, often the messages to be provided
   are already translated.

Python support for CriticalMessage, Notification and TranslatedNofification, including shortcuts:

    Crt = FreeCAD.Console.PrintCritical
    Ntf = FreeCAD.Console.PrintNotification
    Tnf = FreeCAD.Console.PrintTranslatedNotification
2023-03-07 16:13:23 +01:00
Chris Hennes
07dbe74c34 Sketcher: Silence Coverity warning
Coverity CID 350580: Uninitialized scalar variable. The analyzer doesn't like the incomplete construction of the ConstraintId object (the 'Type' field was uninitialized).
2023-02-26 13:48:48 +01:00
luzpaz
593ab90400 Sketcher: convert indentations to spaces 2023-01-23 15:46:49 +01:00
luzpaz
feb18d8a15 Fix various typos 2023-01-22 20:27:47 -06:00
luzpaz
79e150a81b Fix trailing whitespace, typos, headers
Fix trailing whitespace, typos, and header uniformity.
2023-01-23 00:34:37 +01:00
Uwe
0f7dc4f60c [Sketch] Constraints.h: fix 2 compiler warnings
- the type change fixes this error: \src\Mod\Sketcher\App\planegcs\Constraints.cpp(509,54): warning C4267: '=': conversion from 'size_t' to 'unsigned int', possible loss of data
- the scone change removes a non-existing definition
2023-01-22 22:30:42 +01:00
Ajinkya Dahale
fe90c2e9ca [Sketcher] Do not filter out point-on-B-spline when trimming
Fixes #7770.

Until Point-on-B-spline is actually merged this will result in a malformed
constraint. It will however still allow a trim of the B-spline to result in a
coincident constraint.
2023-01-21 21:42:57 +01:00
Ajinkya Dahale
56650864c4 [Sketcher][planegcs] Dynamically change piece in point-on-BSpline 2023-01-21 21:41:27 +01:00
Ajinkya Dahale
6c81ad262e [Sketcher][planegcs] Refactor ConstraintPointOnBSpline 2023-01-21 21:41:27 +01:00
Ajinkya Dahale
233f976b63 [Sketcher] [planegcs] Support point on NURBS
This change adds support for rational B-splines. Non-uniform b-splines already
supported.
2023-01-21 21:41:27 +01:00
Ajinkya Dahale
d5793dc0e4 [Sketcher] Enable point-on-B-spline in Sketcher and GUI
Also squashes:

[Sketcher] Allow point on external B-spline
2023-01-21 21:41:27 +01:00
Ajinkya Dahale
4f3f566423 [Sketcher] [planegcs] Add point-on-bspline constraint in planegcs
Only non-rational B-spline for now
2023-01-21 21:41:27 +01:00
Ajinkya Dahale
6d59b2d28e [Sketcher] Add line tangent at knot through endpoint 2023-01-17 16:02:23 +01:00
Abdullah Tahiri
152dda172c Part/Sketcher: Geometry/Geometry facade pass by const-reference instead of by value 2023-01-09 17:13:26 +01:00
Abdullah Tahiri
04a7478afb Sketcher: Do not mark as fully constrained sketches that do not converge
=======================================================================

In uncommon situations, the analysis of QR decomposition leads to full rank, but the result does not converge.

We avoid marking a sketch as fully constrained when no convergence is achieved.
2023-01-09 17:11:14 +01:00
Abdullah Tahiri
9811d6cbb9 GCS: Improvements to popularity contest and conflicting identification
======================================================================

1. Instead of excluding internal alignment constraints from popularity candidate selection, exclude them from the group altogether. This
ensures no group is non-empty with uneligible candidates, which prevents an infinite loop in uncommon circumnstances (when DoFs collapse).

2. Ensure no internal alignment constraint is identified when conflict ensues.
2023-01-06 13:49:56 -06:00
Ajinkya Dahale
0c017a39f6 [Sketcher] Disallow tangent-at-knot for non-line in solver
This is already stopped in the GUI, but this is still possible by passing the
curve IDs through the console.
2022-12-24 18:22:16 -06:00
Abdullah Tahiri
8a3b3537b3 Sketcher: Avoid trying to lock tangency for tangency at knot point constraint 2022-12-24 18:22:16 -06:00
Abdullah Tahiri
062e9f75ca Sketcher: Add convenience method to check for internal alignment type 2022-12-24 18:22:16 -06:00
Ajinkya Dahale
0ab7d50639 [Sketcher] Do not use TangentViaPoint for tangent-at-knot 2022-12-24 18:22:16 -06:00
Abdullah Tahiri
b015ae3f0d [Sketcher] Separate line-tangent-at-knot from angle-at-point
The latter is intended for a specific solver constraint.

[Sketcher] Make further changes for tangent-at-knot separation

1. Remove code for tangent-at-knot from `addAngleAtPointConstraint`.
2. Use correct order of input.
3. Separate internal C0 knot vs end knots. The latter can still be constrained
but the user must use endpoints of the spline instead of knots.
2022-12-24 18:22:16 -06:00
Abdullah Tahiri
e3fe3902df Sketcher: Solver - add map for Internal Alignment geometry 2022-12-24 18:22:16 -06:00
Ajinkya Dahale
598e86a644 [Sketcher][planegcs] Make changes as per review on #7484
Similar to 2715a66ff02a46f94ae3fc6527fd446e666b8e58.

Added some comments and removed some TODO's.

Return grad values directly rather than doing summation.
2022-12-24 18:22:16 -06:00
Ajinkya Dahale
322306ccf9 [Sketcher][planegcs] Use only line direction in tangent-at-knot
This discourages reducing the size of the line when it is more normal than
tangent.
2022-12-24 18:22:16 -06:00
Ajinkya Dahale
3f91c52b3f [Sketcher][planegcs] Fix tangent at knot for C1 knots 2022-12-24 18:22:16 -06:00
Ajinkya Dahale
af5bc953c9 [Sketcher][planegcs] Handle type issues with int and size_t
... and `unsigned int`

Suggestions thanks to @abdullahtahiriyo
2022-12-24 18:22:16 -06:00
Ajinkya Dahale
75f2a1d69a [Sketcher] Use tangent at B-spline knot constraint
Also squashes:

[Sketcher] Make tangent-at-knot with just knot and line

[Sketcher] Disallow tangent at C0 knot

If passed on to planegcs can cause segmentation fault.

[Sketcher] (Re-)Support tangent at B-spline end-knots

New code had introduced problems for non-periodic spline end-points, and
periodic spline "end-points" were not supported anyway.

(here end-points mean star/end points)
2022-12-24 18:22:16 -06:00
Ajinkya Dahale
4c71957a97 [Sketcher] [planegcs] Add "tangent at b-spline knot" constraint
Also squashes:

[Sketcher] [planegcs] Support tangent at NURBS knot

...which means support rational B-splines
2022-12-24 18:22:16 -06:00
Ajinkya Dahale
d0a30e3b11 [Sketcher] [planegcs] Calculate value at general b-spline 2022-12-24 18:22:16 -06:00
Ajinkya Dahale
57fa3e44f4 [Sketcher] [planegcs] Evaluate lower degree B-spline factors 2022-12-24 18:22:16 -06:00
Ajinkya Dahale
3b8b9c3c49 [Sketcher] Fix typo 2022-12-24 16:02:52 +01:00
Abdullah Tahiri
477bf46f25 Solver: Pass map by const reference to avoid performance penalty
================================================================

Credit goes for forum user acolomitchi:

https://forum.freecadweb.org/viewtopic.php?p=648807#p648807
2022-12-22 06:26:17 +01:00
Abdullah Tahiri
fdb2e1ad01 Sketcher: Split - remove unnecessary return after exception 2022-12-21 16:01:23 +01:00
Ajinkya Dahale
38212da989 [Sketcher] Handle exception in Python while splitting
`SketchObject::split` only appears to throw `ValueError`.
2022-12-21 16:01:23 +01:00
Ajinkya Dahale
ce08cebc1f [Sketcher] Handle split curve corner case
It is possible to ask for splitting at an end point of the curve. This leads to
a `CADKernelError` and leaves us with a "hanging" clone. This check prevents that.
2022-12-21 16:01:23 +01:00
Abdullah Tahiri
7d9b24f2b7 Sketcher: Split functionality fixes
===================================

Changes from naked pointers to smart pointers are motivated to the use of functions that can reasonably throw under certain circumnstances (such as trim).

When introducing smart pointers, it is not necessary to explicitly delete the new geometry array at the end of the function.

When using the new facility to add a smart pointer geometry (previous commit), the copies generated in the split algorithm can be reused, which renders
keeping track of the new geometry for memory management unnecessary.

As geometry is added to the property which each call to addGeometry, the stored newIds can be reused if access is necessary to geometry pointers afterwards
(e.g. for constraint management).
2022-12-21 16:01:23 +01:00
Abdullah Tahiri
e5e508c326 Sketcher: SketchObject new addGeometry method for smart pointers
================================================================

This new facility avoids to have to create a new copy() when a user copy is already created.

As the user copy is reused via move semantics, memory management is simplified.

CAVEAT: When this facility is used, the client code has to ensure whether a copy() or a clone() of the Part::Geometry
should be undertaken. The different between both is that the former creates a new uuid (tag), whereas the latter does not.
2022-12-21 16:01:23 +01:00