Historically, `App::Document::recompute()` ran entirely on the **main**
(GUI) thread and directly emitted `signalBeforeRecompute()`.
* Add-ons like **Assembly3** and others depend on that signal for
setup/teardown hooks before any recompute work begins.
* After offloading `recompute()` into a background worker thread to keep
the UI responsive, calling `signalBeforeRecompute()` directly from the
worker would break thread-affinity rules and silently break
compatibility with those add-ons.
**Solution**
1. **Introduce a generic hook** (`PreRecomputeHook`) in
**App::Document**:
* A `std::function<void()>` that, if set, is invoked at the very
start of `recompute()`.
* Core code stays Qt-free—only knows to call a callback if one
exists.
2. **Wire up the hook in `Gui::Document`**:
* In the GUI wrapper’s constructor, install a hook that calls
`callSignalBeforeRecompute()`.
* `callSignalBeforeRecompute()` uses `QMetaObject::invokeMethod(...,
Qt::BlockingQueuedConnection)` to enqueue `signalBeforeRecompute()` on
the GUI thread and **block** the worker until it completes.
* If already on the GUI thread, it simply calls the signal directly.
3. **Maintain add-on compatibility**:
* From the add-on’s perspective nothing changes—they still receive
`signalBeforeRecompute()` on the main thread before any recompute work.
* Internally, the recompute body now runs on a worker thread,
improving UI responsiveness without breaking existing hooks.
**Result**
* **Recompute** remains fully backward-compatible for add-ons like
Assembly3.
* **UI thread** still handles all GUI-related signaling.
* **Worker thread** performs the actual heavy lifting, unblocked only
once the GUI is primed and all pre-recompute signals have been
delivered.
Currently we can assign quantities to a BIM object, but upon exporting
quantities are not visible in the IFC file.
This was because we didn't have a correct mapping to weight property.
`App::PropertyWeight" basically doesn't exist, so this patch changes it
to `App::PropertyMass`, as it is the same. The incorrect mapping
resulted in a traceback, which in turn resulted in missing a big part of
additional processing for the properties, which resulted in
`writeQuantities` checking for non-existent IfcData in the object.
* FEM: Update post_glyphfilter.py
* FEM: Update TaskPostGlyph.ui
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
As the title says, if user selects `OK` button and has no Classification
selected (which can happen only if the list is empty I think), then they
get a traceback since we're trying to access list of selections
directly.
So this patch adds a small patch to close the form if user has pressed
`OK` button and did not select anything.
Quantity parser is unable to deal with exponents written in
supersript, so change it back to ^n.
The micro prefix is expected to be U+00B5, not U+03BC, so change
it back as well. Note, that \x escape sequence reads till the
whitespace or the end of string, thus microFarad becomes
"\xC2\xB5""F
Fixes: 1155f0d752 ("Base: simplify UnitsSchemas management")
Hovering the cursor over constraint icons sometimes logs "SecondIcon"
messages to the report view, doing so for every cursor move event.
This message isn't useful outside of a development context and in fact
is a leftover from 7ab2b3b690ef6447cfd16842af3008817f8e77f7.
Removes this message.
Fixes#21417
Forum topic:
https://forum.freecad.org/viewtopic.php?t=97072
The MissingVerticalHorizontal functions from the Sketcher WB do not behave as expected. See #21396.
A check for redundant contraints is required if `makeMissingVerticalHorizontal()` is used. The argument for the function should be `True`. For consistency the same was done for makeMissingPointOnPointCoincident().
* Base: Fixed segfault on destructing cached string
Xerces default memory manager is deleted before destructing static local
variable and segfault.
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
This function dates back to Qt3, and was removed in Qt4. Modern Qt no
longer uses this ui file entry, and in some circumstances the uic
complains about its presence.
The new unit schema management is using U+2032 and U+2033 characters
for feet and inches while parser is expecting only ' and ", while
U+2032 and U+2033 are used for arcminute and arcsecond.
While this is not an ideal solution and parser should deal with both,
revert back to ASCII for now.
Fixes: 1155f0d752 ("Base: simplify UnitsSchemas management")
Fix the transcription error which occured while moving into
single structure. Default schema now uses milimeters again.
Fixes: 1155f0d752 ("Base: simplify UnitsSchemas management")