* Assembly: Fix crash 20614 (#22538)
(cherry picked from commit facfbeb47e)
* adapt to `getMovingPartFromRef` from 1.0 branch
* fix `Console().Warning` has PascalCase name in 1.0
---------
Co-authored-by: PaddleStroke <pierrelouis.boyer@gmail.com>
Co-authored-by: Adrian Insaurralde Avalos <adrianinsaval@gmail.com>
Fixes issue #19121 "dimension numbers placed lower than normal".
Problem:
QGCustomText has a new method `alignmentRect` which can optionally return a
`tightBoundingRect` instead of the regular `boundingRect`. The
`alignmentRect` is used for laying out the `QGIDatumLabel`, however
QGraphicsItemGroup's `childrenBoundingRect` use the childrens'
`boundingRect` and knows nothing of `alignmentRect`. The result is an
improperly sized label and frame and miss alignment. Additionally
`childrenBoundingRect` calculations includes hidden views, so even though
the `m_tolTextOver` and `m_tolTextUnder` are hidden they still affect
the bounding rect size.
Solution:
1. Implement new method `QGIDatumLabel::tightBoundingRect` this
calculates the bounding rect using the subview's
`aligmentRect` if there is text in the custom text.
2. Use `tightBoundingRect` in place of `boundingRect` to for the drawing of
arrows and the exact dim frames.
3. This PR acknowledges that there are some edge case fonts that while not
clipped may not interface perfectly with arrows and the exact dimension
frame.
4. Fix vertical alignment of `m_tolTextOver` / `m_tolTextUnder`
5. Incorporate PR Review comments
* BIM: fix BIM_WPView command
The BIM_WPView command did not work properly. This was mainly due to a faulty import.
* Updated to avoid a linter warning
change `bundled_zipios` option to enabled by default, it was wrongly always set to enabled no matter what option was chosen
change `bundled_pycxx` option to enabled by default
add `pcl_enabled` option
update artwork
adapt to conda builds
make msvc redist directory optional
automate version information definition
use relative directories for file locations definitions
improve/update readme
partially update Delete.bat for qt6 libpack
add .gitignore
update signing.bat and add hashing command
Without this delay the Tray may not display if Draft is the start-up workbench.
When the Draft workbench is autoloaded the Tray is shown and then immediately hidden. Because of this, hiding the tray must also happen with a delay.
Fixes#19577
Apparently the ViewObject can be updated before the Shape of the objects has been changed. To catch this the number of edges is checked in the `onChanged` method of the ViewObject.
There was an additional index error if the Limit property was not zero.
Windows requires running from an installed FreeCAD, not simply the build environment. This
commit performs the install and execution from the installation environment.
Description of Defects in migrationScript2 and migrationScript4:
Several additional issues have been identified in the Assembly
functions migrationScript4 and migrationScript2, beyond those fixed in
patch 71f0104bb2.
One common problem is that the Joint property Reference1 or Reference2
can be set to an invalid format. For example, user can manually cause
this issue by assigning an incorrect reference (e.g., the Z-axis) to
these properties via the FreeCAD GUI. When this happens, internal
errors (exceptions and their corresponding Python call stack) are
reported in the Report View. However, such information is not helpful
for the user to fix their 3D model.
Issues with the Current Implementation (Using migrationScript4 as
Reference):
- Lack of Type Validation for Reference1 and Reference2:
The script does not check whether joint.Reference1[1] or
joint.Reference2[1] is a sequence. If this condition is not met,
statements like:
sub1 = joint.Reference1[1][0]
will throw an exception, printing the Python call stack.
- Lack of Length Validation for Sequences:
The script does not ensure that the sequence length is sufficient
for indexing. For example, joint.Reference1 and joint.Reference2
must each have at least two elements to allow:
joint.Reference1[1][1]
joint.Reference2[1][1]
Without validation, such calls can result in exceptions, printing the
Python call stack.
- No Feedback on Problematic Joint:
The user is not informed about which Assembly joint in the object
hierarchy has an invalid Reference1 or Reference2. Depending on the
size of the 3D model, identifying the defect can be time-consuming
and frustrating without proper feedback.
This patch is focused on:
- Reporting Problematic Joint Path:
A new function has been added to retrieve the full path to the
Assembly joint. The return value (a string) is used to report the
issue.
- Improved Exception Handling:
Instead of adding more conditional checks (see above), exception
handling is implemented. AttributeError, IndexError, and TypeError
exceptions are caught. The exception message (excluding the call
stack) is displayed at the end of a user-friendly warning.
- User-Friendly Warnings in the Report View:
A single-line warning is now shown in the Report View, containing
the following details:
- Source of Warning: 'Assembly joint'
- Location in the 3D Model: e.g., 'Assembly_XY.object_XY.joint_XY'
- Problematic Attribute: e.g., 'ReferenceXY'
- Exception Message: e.g., 'list index out of range'
- Refactoring and Optimization:
The functions were refactored and optimized at the end of the
conversion process.
Advantages:
- Cleaner Report View:
Internal errors (e.g., Python call stacks) are no longer logged in
the Report View, as they are not useful for end users. Only the
exception message is displayed.
- Improved User Feedback:
Users can now identify the problematic Assembly joint in the object
hierarchy, saving significant time and effort.
- Robust and Concise Code:
The solution simplifies the code while increasing its robustness.
Presumably Component Drawings are more common as opposed to Assembly Drawing's
therefore FreeCAD's default should reflect this.
find src/Mod/TechDraw/Templates -iname "*.svg" -exec sed -i 's#Assembly Drawing#Component Drawing#g' "{}" \;
* Switched Component code to new Comp=True version of code.
* Made the Placement code in both files identical. This also solves that Rotating a BuildingPart was not propagated to children.
* Core: Implement SoFCTransform node
In its doAction() method it only sets the model matrix if it's not the identity matrix.
This improves the issue #7606
* Add doc string to SoFCTransform
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
Co-authored-by: wmayer <wmayer@freecad.org>
Co-authored-by: wwmayer <werner.wm.mayer@gmx.de>
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
App: Add utility method to get app name with version included
Gui: Migrate to using App::Application::getNameWithVersion
Spreadsheet: Migrate to using App::Application::getNameWithVersion
TD: Migrate to using App::Application::getNameWithVersion
Drawing: Migrate to using App::Application::getNameWithVersion
* remove unused else
* Enable reloading / re-selection of libraries
* Reload the libraries when exiting the editor
* Clear the model to prevent duplicate entries
* add missing docstring to reduce linting warnings
* Maintain any previous library selection when editing
* this is a workaround to remove caps
pelase ignore this hackery
* And now the caps are gone
* a bunch of small tweaks and fixes.
* Update FreeCAD Light.qss
updated menubar color light theme
* updated the buttons a tiny bit
* Fix for to short buttons.
Couldn't test it since my macro window is broken.
Co-Authored-By: Syres916 <46537884+Syres916@users.noreply.github.com>
* qspinbox disabled tweaks.
* Update FreeCAD Dark.qss
Tweaked the buttons a bit so they are more in line with the light theme.
* Update FreeCAD Dark.qss
small tweaks
* reversed the spreadsheet headers gradient for dark
* Update light with undo arrows position
Co-Authored-By: Syres916 <46537884+Syres916@users.noreply.github.com>
* Update undo buttons arrow position dark
Co-Authored-By: Syres916 <46537884+Syres916@users.noreply.github.com>
* added an offset to qcombobox
* removed the fix since it ruined every Qcombobox.
* Tabs update more clean less gradients.
* Update DlgMacroExecuteImp.cpp
fixing conflicts
* Update DlgMacroExecuteImp.cpp
* Delete DlgMacroExecuteImp.cpp
* Create DlgMacroExecuteImp.cpp
* Revert "Create DlgMacroExecuteImp.cpp"
This reverts commit 8de8f7506177d773bb356fd0e22a66466c25b668.
* Revert "Delete DlgMacroExecuteImp.cpp"
This reverts commit 41315f31abdad79afd4b696ee15c603de3e4a6a1.
* Revert "Update DlgMacroExecuteImp.cpp"
This reverts commit aa792291684e2d674f6961c641c8e2f8b9af12c8.
* Revert "Update DlgMacroExecuteImp.cpp"
This reverts commit e8376a8fdf11d7fd014f2c46f189afdca42833ce.
* Delete src/Gui/DlgMacroExecuteImp.cpp
* Update DlgMacroExecuteImp.cpp
finally realized what was going on lol
---------
Co-authored-by: Syres916 <46537884+Syres916@users.noreply.github.com>
This fixes a case when in case of rootObj being Link placement was not
calculated correctly due to not changing of the document. While for
original use it was fine as this was mostly used in case where there was
defined non-link root for general case Links can be root objects of the
document.
OCL requires three elements for defining a bullnose cutter: overall diameter, corner radius, and overall length. FreeCAD is providing the correct diameter and length, but the corner radius is calculated incorrectly in SurfaceSupport.py
Props go to Edyork in https://forum.freecad.org/viewtopic.php?p=798895#p798895
In older versions it was possible to copy elements with drag and drop by holding the CTRL key. Since v0.20 or v0.21 this wasn't possible any
more so that elements are always moved.
Note: Copying is only allowed for elements that have a parent object.
* Sketcher: Handle exceptions in onViewValueChanged
Because the method onViewValueChanged is used as a Qt slot it must handle all possibly raised exceptions as otherwise
they will slip through GUIApplication::notify() that usually results into a crash on some platforms like macOS
* Sketch: Handle undefined values in calculateThroughPointMinorAxisParameters
* The argument of acos() must be in the range [-1, +1], otherwise it returns nan (not a number)
* The value of sin(0) = 0. So, it cannot be used in the denominator of a fraction
* Fix bug preventing filtering named constraints
There was a bug (see issue #11843) that displayed a filter for Named
constraints in the Sketcher Workbench whose toggling did not affect the
UI in any way. This enables this feature by checking if a given
constraint has a custom name or not and then appropriately toggling its
visibility.
* Use `std::string::empty()` per reviewer suggestion
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
* [Gui] fix the FPS text visibilty issues
* [Gui] code efficiency based on suggestions
* [Gui] update color parameter
* [Gui] Fix Lint feedback
* [Gui] check if string is empty
* CAM: Fix finishing pass
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* add finishing pass unit (by @baehr)
* [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>
eliminate some error messages when a Job is not fully loaded
(or when not properly constructed via scripting)
TESTED ON V0.21 -- code hasn't changed since then
* Sketcher mapping error fix
Fixed an issue in the Sketcher where attempting to create a sketch while a group is selected caused a mapping error. Now, when a sketch is created with a group selected, the sketch will be placed inside the group.
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: Joona <jookkone@edu.lapinamk.fi>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Due to TNP code Document.xml can contain (for example)` <Part ElementMap="0.4" file="Box001.Shape.brp"/>` instead of `<Part file="Box001.Shape.brp"/>`.
There is an underflow of an unsigned int in the calling instance that sets the parameter 'p' to 2**32-1.
But the size of the passed vector is 0. To fix the crash first check if p is less then the size of the vector.
See: https://forum.freecad.org/viewtopic.php?t=92815
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
Update src/Mod/Points/Gui/Command.cpp
backport of PR #17282
* Fixed QuickZoom crash & picking in ortho view
* Fixed QuickZoom for high DPI screens
* Fixed return value for SetHitLookFrom
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
* Removed whitespace from GetPointerPosition
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
---------
Co-authored-by: Patryk Skowroński <pskowronski@3dconnexion.com>
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
[TD]add preference for auto workbench switch
[TD]prevent fail on auto switch to hidden tab
[TD]prevent crash on attempt to print hidden page
[TD]prevent use of non-exist/hidden tab in exports
If `get_diffuse_color` returned a list with a single color, the list was wrongly multiplied. Regression introduced in V0.21, but in that version the error was masked by how Core handled the diffuse color.
Fixes#17052.
Fixes#16832.
In V1.0 the two Draft status bar widgets appear as checkboxes without label in the toolbar area context menu. They should not be listed in that menu, as was the case in V0.21. Their visibility is controlled via preferences.
Additionally, in case the Draft WB is only preloaded, the widgets would display in another workbench. This is prevented by using a delay.
* BIM: Fix calculation of fence sections
The length and placement of fence sections was only correct if they were cut to size.
* Fix required another change.
* [Draft gui_stretch] Improve Stretch Rectangle Behaviour
Feature Improvement discussed at FreeCAD Forum :
- https://forum.freecad.org/viewtopic.php?t=92124#p792118 (Draft_Stretching the whole rectangle creates a new wire)
Currently, 3 cases in general, proposed PR improve Case 3 below :
1. The original object is a Rectangle, if after stretching it is no longer a rectangle, it makes a copy turning it into a Wire which reflect the result of stretching.
- Current behanviour is good for user, no change.
2. If after stretching it is still a rectangle, the code just resize the original.
- Current behanviour is good for user, no change.
3. Now, if the user 'stretch' the whole rectangle, the code creates a copy as DWire in the 'stretched location'.
** - Users find this not intuitive, better just move the whole rectangle.
* For the human figure attached to the Draft grid a hard-coded point list is used (instead deriving the points from human figure.brep). This is more efficient and avoids a dependency on the BIM WB.
* The default for the human figure preference of the grid was changed to false. And the tooltip adjusted.
The old CAD model created by the development version of FreeCAD
(in which the Assembly workbench was used) contained joints that,
for some reason, had an empty Joint Connector 1 reference (Reference1).
This was causing an exception and a crash of the Python function
called migrationScript4. The FreeCAD Report view contained:
23:28:29 pyException: Traceback (most recent call last):
File "/FreeCAD/Mod/Assembly/JointObject.py", line 175, in onDocumentRestored
self.createProperties(joint)
File "/FreeCAD/Mod/Assembly/JointObject.py", line 181, in createProperties
self.migrationScript4(joint)
File "/FreeCAD/Mod/Assembly/JointObject.py", line 514, in migrationScript4
if hasattr(joint, "Reference1") and joint.Reference1[0] is not None:
~~~~~~~~~~~~~~~~^^^
<class 'TypeError'>: 'NoneType' object is not subscriptable
This patch attempts to avoid such exceptions by validating the type of
the property variable before accessing it.
With PR #17655 (commit 1027926), the property "Direction" was changed
being an input to an output and the new "Cut Mode" took over (to
implement #14314). Unfortunately, this change was not reflected in the
Setup Sheet (or "Op Defaults" as it's called on the Job panel). This
commit fixes this.
For the "Op Defaults" from the setup sheet the operations get created
with a `OpPrototype` instead of a real document object. This prototype
provides only a small subset of FreeCAD's document object API. When a
new Job is created via the GUI, each registered operation is created
with such a dummy to populate the setup sheet panel. And if such an
operation uses document APIs not provided by the prototype, the enire
job creation fails, see #17871.
Unfortunately we don't have tests for the GUI part, where all the
operations are regsitered and thus the integration with all of them
could be verified, this I just created a local test for the helix, where
the actual issue was reported -- this can be verified with headlessly.
* fix#17468 recursively unpack compounds for boolean fuse
* fix and into &&, add ctest case for multifuse with compounds and recursive compounds
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* remove unneeded duplicated code - allow Part::Common to be created with a single object (compound or shape) - will result in Unity and possibly a warning message
* prevent endless loop in case of endless recursive compounds as suggested in chat
* Update src/Mod/Part/App/FeaturePartFuse.cpp
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
* implemented suggestion by wwmayer
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Benjamin Nauck <benjamin@nauck.se>
* increase tolerance on helical shapes to avoid crash
fix#17113fix#9377fix#11083
* added test cases for additive and subtractive helix
* fixed whitespace issue, reduced turncount for speed
* relaxed large scale testcases for OCCT 7.3 and below, work around windows CI error #17394
* Further reduce max size in test for buggy Ubuntu OCCT
* add BRepAlgoAPI wrapper files to CMakeList
* introduce wrapper for BRepAlgoAPI_BooleanOperation and derivatives, set sensible default Fuzzyness for boolean operations
* allow default fuzzyness to be set in settings - including off
* backwards compatibility with OCCT 7.3.3 - removed newer paramateres from wrapper
* added missing header
* reverted src/Mod/Part/App/OpenCascadeAll.h to original state
* implement some changes suggested by @wwmayer
* removed unneeded destructor definitions
* moved getDefaultFuzzyValue into its own helper class
* removed unneeded references to base class default constructor
* default to SetRunParallel(Standard_True) as suggested by @FlachyJoe
* fixed license header as requested
* Added new method to autocalculate fuzzyness to BooleanOperation base class and use it for those parts that do not call the obsolete constructor but also do not set precision
* implemented static variable solution as suggested by @wwmayer
* added helix for test case
* Refactoring FCRepAlgoAPI to FCBRepAlgoAPI
* Added Test Case (fuse cylinder with helix with different working and non-working Fuzzy values)
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* increased default value of FuzzyBoolean and made tests more robust for compatibility with OCCT 7.3
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* fixes for FREECAD_USE_PCH - allow testing of FREECAD_USE_PCH on linux with cmake switch (default OFF)
* removed surplus line - wasn't needed after all
* included precompiled as instructed
* set anti-corruption flag in boolean operations, ensures source shape is not damaged in OCCT 7.1 and higher
* fix#17085
* disable subtests that were too specific for now
* fixed all CLI tests - see comments in Pull Request https://github.com/FreeCAD/FreeCAD/pull/17119#issuecomment-2420772452
* Update src/Mod/PartDesign/PartDesignTests/TestTopologicalNamingProblem.py
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
suggested updated test by CalligaroV
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* Update tests/src/Mod/Part/App/TopoShapeExpansion.cpp
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
* remove surplus tests from github suggestion interface bug
* hide the BooleanFuzzy variable - can now be only set by manually editing the config file
i
in FCParamGroup "Boolean"
<FCFloat Name="BooleanFuzzy" Value="10.000000000000"/>
* Suggestion by @FlachyJoe - add validity checks to the base and tool shape in any direct boolean op
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Vincenzo Calligaro <vincenzo.calligaro@gmail.com>
To harmonize the various CAM operations, the helical drill shall also be
configured using the cut mode (Climb/Conventional) just like Pocket or
FaceMill.
This means, the path direction (CW/CCW) is now a hidden read-only output
property, calculated from the side (Inside/OutSide) and the here newly
introduced cut mode.
The spindle direction is not yet taken into account and is always assumed
to be "Forward".
The GUI strings are kept compatible with what RP#14364 introduced becasue
of the v1.0 release string freeze. They need revision once back on the
main branch.
This reverts commit 7e62d07538 and adapts
to the in between commits where necessary.
- CAM: apply precommit 7274dac185
- CAM: rename "Tests" to "CAMTests" 2ff4914fd8
Motivations for the revert:
- Instead of actually implementing #14364 only a search and replace in
the enums values has been performed. But this does not mean the
feature is there, becasue "climb"/"conventional" milling depends not
only on the path's direction, but also on the spindle direction and
whether the milled feature is "inside" or "outside".
- In half of the cases of every changed operation or dressup, depending
on whether we mill "inside" or "outside", we now get the wrong results.
- In the (rarer) case of a reversed spindle direction, the "other half"
is wrong.
- Files created with previous versions of FreeCAD cannot be recomputed
any longer because there were no precautions on document restore.
- In files created with previous versions of FreeCAD one cannot change
the broken operation as the choices are now invalid.
- The original search/replace was incomplete.
- Only property values have been changed, the property names are still
inconsistent ("Direction" vs "Cutting Mode").
- The original search/replace also changed internal APIs where the
"climb"/"conventional" wording is not applicable as there is no
notation of "inside"/"outside" or "forward"/"reverse". If only the
path's direction is concerned, "CW"/"CCW" fits better.
Since the fixture in use has holes smaller than the default tool dimeter,
executing a helix operation with default parameters (i.e. all holes)
used to fail with an exception. Some tests work around this by actively
chaning the tool diameter, and this fix is now moved into the global
setup where the respective fixture is loaded.
The reason why the tests got disabled in the first place is unclear.
The doTasks function is called multiple times when using Draft tools. In some cases the ToDo.commitlist belonging to a previous call was not fuly processed, resulting in the same list being processed twice. To avoid this the list is stored as a local variable and then immediately reset.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=91832
* [Gui] Fix 100% CPU usage due to StartView
* [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>
Using Qt's QCoreApplication::applicationPid() doesn't always give a unique ID so that multiple FreeCAD instances cannot be executed at the same time.
This fixes#17678
* [Gui] Fix 100% CPU usage due to StartView
* [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>
* fix#17561
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* added missing code to have it also work without MeshRegions
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
This demonstrates a regression introduced with PR #14364, where documents
containing helix operations cannot be recomputed any more (see #15643).
This is in preparation for a fix and to ensure we don't break it again.
The fixture has been created with the official mac build of FreeCAD-0.21.1
When creating a sketch in PartDesign a dialog is opened that gives the user the possibility to perform another action that may close the
active transaction. To make sure the creation of the sketch can be undone a new transaction must be opened.
* Safe mode message added as per #17580
* Fixed extra whitespace after return
Removed extra whitespace after return spotted by @hyarion
* Incorporated comments by @hyarion
* mac, win, qt6.4+: Hide classic and auto choose light or dark mode
* Add dark mode qt6.5 check
* Start: Add QStyleHints to PreCompiled.h
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
The right click context menu in the materials editor was implemented
as a place holder but is currently non-functional. It should be
disabled for 1.0. This will be revisited post 1.0 as all editor
functionality is reviewed and improved.
Fixes#17110
* BIM: IFC - Fixes for Qt 6 due to QtGui.QFont.setWeight()
PySide6 replaced:
PySide6.QtGui.QFont.setWeight(int)
with:
PySide6.QtGui.QFont.setWeight(PySide6.QtGui.QFont.Weight)
* BIM: Fix IFC explorer addEntity() and addProperties() on Qt 6
Qt 6 removed QTreeWidget.setFirstItemColumnSpanned()
https://doc.qt.io/qt-5/qtreewidget-obsolete.html#setFirstItemColumnSpanned
Running the Python command 'BIM_IfcExplorer' failed:
Traceback (most recent call last):
File "/usr/lib64/freecad/Mod/BIM/bimcommands/BimIfcExplorer.py", line 170, in Activated
self.open()
File "/usr/lib64/freecad/Mod/BIM/bimcommands/BimIfcExplorer.py", line 223, in open
self.addEntity(eid, children, self.tree)
File "/usr/lib64/freecad/Mod/BIM/bimcommands/BimIfcExplorer.py", line 455, in addEntity
self.tree.setFirstItemColumnSpanned(item, True)
* BIM: Fix IFC explorer exception on toggle mesh
Traceback (most recent call last):
File "/usr/lib64/freecad/Mod/BIM/bimcommands/BimIfcExplorer.py", line 278, in toggleMesh
import importIFCHelper
ModuleNotFoundError: No module named 'importIFCHelper'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/usr/lib64/freecad/Mod/BIM/bimcommands/BimIfcExplorer.py", line 282, in toggleMesh
import importIFC
ModuleNotFoundError: No module named 'importIFC'
* BIM: Fix IFC explorer layout warnings
QLayout: Attempting to add QLayout "" to QDialog "IfcExplorer", which already has a layout
QLayout: Attempting to add QLayout "" to QDialog "IfcExplorer", which already has a layout
https://doc.qt.io/qt-6/qtwidgets-tutorials-widgets-nestedlayouts-example.html
* BIM: Output an error if IFC explorer can't explore a file
---------
Co-authored-by: Roy-043 <info@b-k-g.nl>
* Help: Fix function return to avoid error when clicking URL on built-in browser
* fixup! Help: Fix function return to avoid error when clicking URL on built-in browser
Co-authored-by: Yorik van Havre <yorik.vanhavre@gmail.com>
---------
Co-authored-by: Yorik van Havre <yorik.vanhavre@gmail.com>
* Core: Add possibility for task dialogs to associate a view and be able to close when associated view is closed.
* TaskImage: Use task dialog view association.
* Sketcher: Use task dialog view association. Preventing crash (https://github.com/FreeCAD/FreeCAD/issues/16702)
* EditableDatumLabel: Use QPointer to prevent crash
Change the appearance only if the appearance hasn't been set explicitly.
A cached material appearance is used to see if the current appearance
matches the last material. It is also compared against an empty
material to see if the saved material value has been initialized.
This solves the problem of material changes overwriting appearance
changes
* Open recent documents from start same way as in menu
* Make insert spreadsheet create document if not available.
* [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>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
# Conflicts:
# src/Mod/Start/Gui/StartView.cpp
* expose isAttachedToDocument to Python
* change DocumentObjectPy::getName() to return None instead of throwing an exception if object is not part of a document
* [Gui] Make styles update on paint
Fixes#15756. Similar implementation to that already in FileCardDelegate.cpp
* [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>
Building with -DBUILD_POINTS=no -DBUILD_REVERSEENGINEERING=yes fails with:
src/Mod/ReverseEngineering/App/AppReverseEngineering.cpp
src/Mod/ReverseEngineering/App/AppReverseEngineering.cpp:36:10: fatal error: Mod/Points/App/PointsPy.h: No such file or directory
36 | #include <Mod/Points/App/PointsPy.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Building with -DBUILD_PART=ON and -DBUILD_MATERIAL=no fails with:
/usr/lib/gcc/x86_64-pc-linux-gnu/14/../../../../x86_64-pc-linux-gnu/bin/ld: cannot find -lMaterials: No such file or directory
collect2: error: ld returned 1 exit status
* Add safe-mode which starts freecad in a clean environment
* Integrate safe-mode
* Show "(Safe Mode)" in main window title
* Show safe mode info when safe mode is started
* Created Safe Mode Icon
* Use new icon
* Add PreCompiled.h
* Add exports for windows
---------
Co-authored-by: Gabriel <gaz082@gmail.com>
The cone features in Part and PartDesign automatically create a cylinder if top and bottom radius are identical. However, the algorithm
ignores the angle and always creates a full cylinder.
The fix in #16212 only checks the LayerContainer for layers. Since we do not stop users from moving layers out of that container, we should search the whole document instead.
Fixes: #16201.
SketchObject::buildShape() used the geometries as they were created by the user. However, they are not accurate enough in order
to create a closed wire. Instead the geometries after running the solver must be used because they are guaranteed to be accurate.
Multiple places in code, asserts for bad types would trigger SIGABRT. This is not just limited to #16316 with SoZoomTranslation, but multiple more places, not described in issue, but I experienced myself. Fixes#16316
A group command is not disabled if its default command is disabled. This allows it to invoke the command when it should be impossible.
To fix the problem override the isActive() method in the sub-classes CmdPartDesignCompDatums & CmdPartDesignCompSketches
This fixes#16294
* MeasureGui: Revert temporary measure object creation
Reverts the temporary creation of measurement objects that was added in #15122
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* MeasureGui: Adress review comments
- Remove _mDocument and _mGuiDocument
- Replace c-style casts with dynamic_cast
- Add file guard
- Remove leftover canAnnotate method
* MeasureGui: Fix crash when selecting elements from different documents
* MeasureGui: Add additional type check in ensureGroup
* [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>
* Change to enclose field values with quotation character in exported CSV file if they contain delimiters
* [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>
There is several bugs in FreeCAD which are related to platform (mostly wayland),
the hope is this will make it easier to identify the dependence of bug on the platform
* Add FC_ERR macro for the 'Solve failed' Assembly error
* Handle standard exceptions during assembly solve
* [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>
The Qt6 (up to Qt 6.7.3 now) contains bug, which can lead, under
specific circumstances, to crash of the application, when the
MDI window is closed. The circumstances are:
* at least 2 MDI windows needs to be open
* stylesheet muset set different size (border, margin) for activated and un-activated tabBar tab
* the closed window must be inactive, but created before the window now active and open
* race condition must occur betwee the closing and resize event handlers for the tabBar
(see qt bug for details)
So this bug only occures with Qt6 with the Dark or Light styles selected (no classic) and only if
specific sequence of steps is followed during opening and closing the MDI windows.
The bug is in Qt code path executed when QMdiArea::ActivationHistoryOrder is set.
The other possible workaround might be to change all the affected stylesheets, but this seems to me
impractical and also fragile, because the affected code path will be still active.
https://bugreports.qt.io/browse/QTBUG-129596
Write all XML attributes of the Geometry element into a single line.
Currently the XML output looks:
<Geometry type="Part::GeomLineSegment"
id="-1" migrated="1">
With the fix it will be:
<Geometry type="Part::GeomLineSegment" id="-1" migrated="1">
* Assembly: Add setupContextMenu to ViewProviderAssembly.h
* Assembly: Fix right click 'activate object' menu not setting edit
* add QMenu header
* Add NOLINT
* Add one more space before //NOLINT or clang cries...
* Fix isInEditMode
* add isInEditMode to ViewProviderAssemblyPy.xml
* add isInEditMode to ViewProviderAssemblyPyImp.cpp
* update activeAssembly() in Utils to make sure isInEditMode
This fixes the compiler warning: unused parameter 'mode' [-Wunused-parameter]
It's a regression of #16889 to not initialize the class member m_createMode any more that causes UB,
i.e. whenever m_createMode is accessed it may return an unexpected value.
* Changed QuickMeasurement to be conservative
QuickMeasurement should not measure while tool dialogs are open
this includes but is not limited to editing sketches
also changed several other sanity checks to be opt-in vs opt-out, as discussed.
* move the test if it is safe to measure to when the measurement actually happens - avoids any potential race conditions
In V1.0 the handling of wall normals has changed. As a result existing walls with their Normal set to [0, 0, 0], based on wires or faces with a shape normal pointing towards -Z, would be extruded in that direction instead of towards +Z as before. To avoid this their Normal property is changed to [0, 0, 1].
* Prevent naming properties with reserved words (Fix#16846)
* Prevent using reserved constant names for properties or aliases
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* App: Add unit test for isTokenAConstant
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
An error in the Italian translation added an extra '{}' to the
translation string resulting in a dump when formatting.
This has also been updated in CrowdIn but as it's causing a crash is
also beiung changed via this PR. It should updated correctly when
doing the next translation pull.
Fixes#16704
Prevous Version.h was not regenerated after it was initially created.
This prevented an accurate commit hash in the About dialog when
incrementally building from source.
Now the file is always rewritten when it's content is changed.
* Change usage of sample shader code to one with compatible license.
* [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>
The restored Euler angles of a rotation may significantly differ from the input Euler angles so that determining the plane isn't very reliable.
To get the plane reliably multiply (0,0,1) with the rotation and use this as reference normal of the plane.
A loft or pocket only makes sense if the segments used for it have some minimum separation. Having the shapes identical causes segfaults in OCCT
Checking for CoG is a hack. Identical shapes have identical CoG - but an identical CoG does not necessarily mean identical shapes - however it can be argued that a shape that is not offset at least somewhat in the direction of the loft doesnt make a valid shape for a loft (it will typically freeze OCCT instead of crashing it) and a sufficiently suitable shape will have a different CoG
throwing the exception will make it easy to identify if there ever is a case where this is a bad thing - and exceptions are better than segfaults.
This is a stopgap measure, I don't know if the underlying issue is fully understood - but this prevents it from happening in the given test case.
By overriding the base for the pocket prism, which is a trick also applied by
TopoShape::makeElementPrismUntil() if the prism creation fails on first try, the bug where said prism goes to the wrong shape is avoided - this on its own would however break a pad in the inverse case, so we only do that when pocketing
Returning a null shape would have triggered an exception in the bottom branch but not in the top one - which later leads to a segfault - solution - raise an exception. OOC doesn't like null shapes.
The measurement code did not handle mixed selections of known and unknown types correctly. Although a unknown selected object would leave the type at Invalid, selecting both known and unknown objects would have the type determined by the known object type and treat the unknown as the same. This causes exceptions and - worst case a segmentation fault.
This fix introduces a new category "other" which - if present in a selection always forces type to Invalid. This should be forward compatible in case new types are introduced in the future.
* Loft Intelligence - Select the whole sketch if the selected shape is a component of a sketch that is not a vertex (Fix#16630)
In fa8f29aed4 FeatureLoft.cpp was refactured, dropping some functionality, mainly the ability to create lofts to entire sketches or other 2d shapes if a single component that was not a single vertex was selected as either the base shape or a section
the old code was:
1 auto getSectionShape =
2 [](App::DocumentObject* feature, const std::vector<std::string> &subs) -> TopoDS_Shape {
3 if (!feature ||
4 !feature->isDerivedFrom(Part::Feature::getClassTypeId()))
5 throw Base::TypeError("Loft: Invalid profile/section");
6
7 auto subName = subs.empty() ? "" : subs.front();
8
9 // only take the entire shape when we have a sketch selected, but
10 // not a point of the sketch
11 if (feature->isDerivedFrom(Part::Part2DObject::getClassTypeId()) &&
12 subName.compare(0, 6, "Vertex") != 0)
13 return static_cast<Part::Part2DObject*>(feature)->Shape.getValue();
14 else {
15 if(subName.empty())
16 throw Base::ValueError("No valid subelement linked in Part::Feature");
17 return static_cast<Part::Feature*>(feature)->Shape.getShape().getSubShape(subName.c_str());
18 }
19 };
this commit forward-ports the missing functionality provided by line 7-12 in above snippet
* Code cleanup as suggested by (#16791)
* Enforce LC_NUMERIC=C on Posix systems (#16724)
Initialising Qt with native LC_NUMERIC affects XML import on CLI (freecad -c)
This causes sketch constraints and potentially other components relying on numeric constants to break or have incorrect values.
Forcing LC_NUMERIC to C avoids this issue and enforces reproducible behaviour on all locales.
This does not affect the number format displayed in the GUI, as set in preferences.
* Updated ts files
* merged crowdin translations
* [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>
* Gui: Minor polishing of cursor regression fix
* TD: Buggy Wayland custom cursors workaround
Until Qt v6.6 displaying custom cursors on Wayland is broken,
so add a workaround. See also QTBUG-95434.
Fix is the same as d3bb2068 ("Gui: Buggy Wayland custom cursors workaround")
plus subsequent fixes.
Recent CMake (>= 3.28) do not allow exec_program() any more by default,
but prefer execute_process(), which takes slightly different flags.
According to the documentation, exec_program() has been deprecated
since CMake 3.0 (which was released in 2014, so it should be common
enough that I don't feel like making allowances for any really old CMake).
References: https://cmake.org/cmake/help/latest/policy/CMP0153.html
* [TD]add method to clean win filespecs
- '\' in strings passed to Python as filespecs is interpreted as
an escape of the following character.
- replace '\' with '/'
* [TD]remove '\' from filespecs before use
* Fix double-import on exception in ImportGUI.readDXF
The python code has a try/catch block intended to detect if the ImportGUI module is present and if so use its readDXF method, otherwise use Import.readDXF.
The block was incorrectly structured so that Import.readDXF would also be called if ImportGUI.readDXF raised an exception, causing the DXF file contents to be loaded twice into the drawing (at least, up to the point where the exception occurred)
* Make ImpExpDxfRead::MakeLayer use centralized accessor for Draft module
The importer class already had a method to find the python Draft module, but MakeLayer was doing the work itself. Now it uses the centralized accessor, which has also been improved to generate a message if the module can't be loaded.
* Give compounded objects names related to the containing layer name
If "Use Layers" is set and also "Group layers into blocks" the names of the generated compound objects will be based on the name of the containing layer.
If "Use Layers" is not set this will not occur because in general objects from several layers would be compounded together.
Fixes (partially) #16068, the remaining fix is likely just an explanation of the interaction of the options.
closes#13597
* Use correct (new) property name OverrideShapeAppearanceChildren
This corrects a bug created by commit 495a96a which renamed the layer property "OverrideShapeColorChildren" to "OverrideShapeAppearanceChildren" but missed this particular reference to the property by its old name.
The code here called PyObject_SetAttrString which, due to the wrong attribute name, set an expection state in the Python engine, ultimately causing the next attempt at importing a module to fail, with various consequences depending on why the module is being imported.
* Wrap PyObject_SetAttrString and PyObject_GetAttrString with error-checkers
In DEBUG compiles these methods are wrapped to report errors which can occur if the property cannot be referenced.
* Make some error-printers static instead of const
They don't need the CDxfRead object to work
* Display exceptions raised by ReadEntity
Although the DXF reader has an ignore-errors flag, it should still report any errors it encounters. The flag is deemed to mean that, after an error, the reader should continue to try to read the file rather than quitting on the first error.
* [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>
Unfortunately, not all documentation is translated.
Instead of presenting to the user 404 code error pages is preferable to
show the documentation on English.
Status codes 200 and 404 are assumed as requests response.
* Place objects in layer all at once rather than one at a time.
This reduces (by a factor of the number of objects in the layer) the number of times that the layer contents are traversed to set the properties of the contained objects.
This means the layer insertion of O(n) rather then O(n^2) on the number of objects.
Also remove a loop invariant in view_layer so the chidren are not traversed if colours or appearnces are not inherited from the layer.
Fixes#15732
* [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>
* Remove O(n^2) time on DXF import
Accumulates the contents of each layer in a local Python list, then at the end assignes all the objects at once into the layer. This avoids a very slow process of traversing the objects so far and (re-)updating their properties each time a new object is added.
Fixes#16604
* Correct last change to not damage existing layer contents.
The layer could already have contents if the DXF file is being Imported rather than Opened.
The original change would lose the previous layer contents.
Migrate the transparency from the DiffuseColor alpha channel to the
transparency color attribute. This allows the alpha channel to be
used as designed
fixes#14938
* Fix importing .step file when user cancelled import settings dialog
* Refactor object loading python code, fix not using settings when STEP options dialog not shown
* Use custom exception type for user cancelling import instead of `RuntimeError`
* Pull python code out to external file
* [PD] fix Pad UpToFace and UpToShape
* specify struct pointers for Win
* Rename variables for MSVC compatibility - windows.h defines 'near' and 'far' as macros
* Add unit test
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* updated ts files
* merged crowdin translations
* [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>
FreeCAD advertizes itself too noisy way which brings no usefull
infomation. Unify banner for commandline and GUI application and
drop unicode '(C)' character.
Fixes visual artifact in the Preferences/Navigation dialog. The
default value for this field is 0 (at least for some Qt versions),
which does not make sense, because the element would be invisible.
Also the element is actually invisible when editing the UI file in
QtCreator.
Using the default "max" value set for other fields.
* Initial commit to apply delta also for interactive measurement
* Not required special logic to check if possible, it can be easily checked if the property exists
* remember setting so it is not required to turn it always on
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Measure: Use getGlobalPlacement method
Fixes#16058
---------
Co-authored-by: Martin Marmsoler <martin.marmsoler@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* Limit anti alias samples for better compatibility. might solve Wayland problem, issue #15665
* Antialias samples are taken from display prefs
* [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>
* Sketcher: initialize geometry history limit variable
The variable seems to be uninitialized, valgrind complais about it.
The `git grep geoHistoryLevel` and the code ispection suggest it is never set.
If initialized to zero, most of the related code is never used, which
can point to the fact there is either another bug or the code is unused.
The variable was introduced in 42bf92ad12.
* Sketcher: Default geoHistoryLevel to 1
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
The actual optimal size of the window depends on many details, like UI style, system fonts,
OS etc ... so lets auto-resize the window to fit the content before display.
The tree can change shape during handling the mousePressEvent() event,
because some part of the tree can be (un)folded. This might lead to
shift of the three (up or down). The position of items in tree change
relatively to the position of mouse (which stays in place).
If the visibility click is handled after mousePressEvent, the shift in
position can lead to cursor beeing over visibility icon and the click
is handled like if the visibility icon vas clicked, which is unexpected.
Handling the visibility click first fixes this. The setAccepted(true),
was removed, it is left to the subroutine to set it.
1. fix ArchMaterialTaskPanel wrong import BimClassification Path and icon after BIM merge into Arch
2. change taskpanel name to BIM material
3. fix Qt slot and signal (more up to date style)
This is big hack for Qt6 to force rendering using OpenGL from the
beginning. Since Qt6 OpenGL context is initialized only after creating
first QOpenGLWidget which results in window hiding and showing again
after some delay. This causes various timing issus as the window is not
supposed to do that.
* Initial commit to apply delta also for interactive measurement
* Not required special logic to check if possible, it can be easily checked if the property exists
* remember setting so it is not required to turn it always on
Previously AutoColor property forced reinitialization of all subscribed
parameters. It was mostly fine as most of them should stay in sync with
user settings but it also affected grids.
* Fix bug causing xls import failing for some comparisons
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
---------
Co-authored-by: Benjamin Nauck <benjamin.nauck@adlede.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
* ShapeAppearance property was misspelled.
* The post and section objects could not be Std_Parts (because they do not have a DIffuseColor).
* Minor improvements to the handling of Bodies.
* Removed the `if __name__ == '__main__':` section. This code is no longer relevant.
The hideTab is of type bool, which is primitive type and is thus unitialized if new
instance of the class is created. The exception would be to for static
instance of the class, but that is not the case (only the pointer to the instance is static).
It was originaly initialized, but the initialization was removed in
9d5390ed83.
Add missing UI elements to support per face transparencies:
- Setting per face transparencies
- show transparency information in the appearance inspector
- expose alpha channel in material properties dialog
This fixes a regression introduced in V0.19 (!) when the type of linear dimensions was changed from "Dimension" to "LinearDimension".
Forum topic:
https://forum.freecad.org/viewtopic.php?t=90292
* [TD]Add view snapping preferences
* [TD]fix section snapping algo
- snap sections to section normal line.
- snap views to other views in X&Y
* [TD]fix snapping to ProjectionGroups
Fixes: #16201
Changing the Group property type of layers to `App::PropertyLinkListHidden` also means that they longer occur in the InList of nested objects. This side-effect was missed in #14506.
* MeasureGui: Store measure type in TaskMeasure
* MeasureGui: Avoid adding measurement to document during command interaction
* [Gui] Add check for document in VPDocumentObject::getActiveView
* MeasureGui: Track the document when adding objects
* MeasureGui: Cleanup python measurement creation
* [Gui] Add isAnnotationViewProvider method
* [Gui] Check if viewprovider is added as an annotation in getActiveView
* [Gui] Add takeAnnotationViewprovider method to Gui::Document
* [Gui] Make addViewProvider public
* [MeasureGui] Add existing view provider to document when storing measurement
* [MeasureGui] Fix invocation of initial label placement
* [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>
* Gui: Prepare for clang-format
* [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>
* PartDesign: Prepare for clang-format
* [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>
Selecting an edge or vertex of a solid was not handled properly. The tool does not support these subelements, but the code did not call self.finish() is such cases.
* Update to Toposhape versions and fix shapebinder references with test
* Update src/Mod/PartDesign/PartDesignTests/TestShapeBinder.py
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* Gui: Ensure minimum size of preferences dialog
This will ensure that the width of preferences dialog is resized to fit
all pages properly but not take more than 80% of screen.
* Gui: Use consts for resizing preferences dialog
* remove bluw changed the white background to 2 steps below white
* Delete CMakeSettings.json
* Revert "remove bluw changed the white background to 2 steps below white"
This reverts commit a8cab51f0eb6fc5eb6cb3644d1d13f9421a9b05d.
doSelect() loops over document's object vector. It can happen that, within
the loop, Gui::Selection().addSelection() gets called and that ends up
calling App::Document::addObject() which pushes an object to the vector that
the loop is traversing. If the vector is full, its storage is reallocated
and this means that later iterations of the loop are using invalid iterators.
Thus, one ends up with a bogus obj pointer and there will be a crash within
getGroupOfObject(). The problem was observed when using Arch Survey.
The line `t = t.encode("utf8")` returns a bytes object which does not make sense in the context of the rest of the code. It is probably a copy-paste error.
To test the bug:
1. open the file attached to this forum post: https://forum.freecad.org/viewtopic.php?t=89012#p770224
2. Make the rectangles visible.
3. Start the Survey command and box select all objects in the 3D view.
This boiled down to conflict of using `data` attribute of the QAction in
ActionGroup and ToolBarManager. I reworked ActionGroup here to not use
the data attribute but this is not a proper solution - but it should be
working well enough.
Proper solution would be to leave the data for the specific usecases (like index)
and store the command name in some other place. It would however require
us to subclass the QAction which is not something that should be done so
late in the release cycle.
* Replace TopoShape::getValue() with TopoShape::getShape() to test the size of element maps
* Update the expected values
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
fix warning: variable 'j'and 'i' is not initialized
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
Update ViewProviderFemMesh.cpp
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
With PR FreeCAD#14460 the "machinability" model was introduced.
This commits adds material cards with complete machining model data
for various types of woods and engineed wood products.
The data comes from the German text book "Zerspanung von Holz und
Holzwerkstoffen", ISBN 978-3-446-47769-8, 2. Edition 2023,
https://www.hanser-fachbuch.de/fachbuch/artikel/9783446477698
Usage of this data for our purpose is legal as facts are not protected by
copyright according to German law.
The existing "Wood-Generic" material was only rendered in the default
gray, which is now fixed. I'm aware that wood comes in may different
shades, and the current choice of a yellowish brown is arbitrary.
Python is not provided with debug libraries, so debug builds are not possible.
Building as RelWithDebInfo will build debug information for the binary, while
using the available release libraries.
At least on macOS, it seems that setting nontrivial shortcuts only works
when the shortcut is converted to `PortableText`, rather than
`NativeText`.
Before, it was impossible to map, eg, the backspace key or CMD-T to an
action. Now this appears to work.
If in the user settings the refinement is switched off several PD tests will fail. This change explicitly sets the Refine property to True to guarantee correct behaviour
With PR #14460 the "machinability" model was introduced. As sample data
the legacy material cards from the "feeds and speeds" addon were added
and (partly) converted to the new format. However, due to copyright
concerns and unclear semantics of the data, the values required for
cutting force calculations have been removed.
This commits adds material cards with complete machining model data
for various classes of metals. The data comes from the German standard
work "Tabellenbuch Zerspantechnik", ISBN 978-3-7585-1315-2, 5. Edition
2022, http://www.europa-lehrmittel.de/14733
Usage of this data for our purpose is legal as facts are not protected by
copyright according to German law. This view has been confirmed by the
licensing department of the publisher.
Windows renders the application image on top so it appears twice.
Update example file thumbnails on start page to have a consistent background (classic theme) and remove the old FreeCAD logos.
* Draft: Fix cursor scaling
The get_cursor_with_tail function was rewritten to match the Sketcher cursor code. Hopefully this fixes the scaling issue.
Related issue:
#13696
Related forum topic:
https://forum.freecad.org/viewtopic.php?t=89494
@maxwxyz
Can you check if this code fixes the issue? Apart from the size the 'hot' pixel should be checked. If you approach a vertical line from the left or right it should get highlighted at the same distance.
* [DraftBind] Bug-fix Consecutive Face Touch at Corner
Bug-fix Consecutive face (Wall segment) touch at corner.
Forum Discussion : https://forum.freecad.org/viewtopic.php?p=769213#p769213
* [DraftBind] Bug-fix Consecutive Face Touch at Corner
Update following commit at https://github.com/FreeCAD/FreeCAD/pull/15350
* Minor formatting changes
coding_conventions.md says variable_names_without_capitals
* Use areColinear to find problematic edge pairs
It is clearer to use `areColinear` instead of `findIntersection` to detect problematic edge pairs.
@paullee0 Please check. Thanks.
* Use Shape.section() to find touching edges
Using `areColinear` indeed does not work here.
But the `findIntersection` function is very confusing IMO. It finds intersections for collinear edges which does not make sense.
Let's use `Shape.section()` instead.
Also improved the 'ascii art' a little.
* typo
* Some minor improvements.
* [DraftBind] Bug-fix Consecutive Face Touch at Corner
Update handling closed wire(s) case
* Typo
* [DraftBind] Bug-fix Consecutive Face Touch at Corner
Further update handling closed wire(s) case :
# if wires are closed, 1st & last series of faces might be connected
# except when
# 1) there are only 2 series, connecting would return invalid shape
# 2) 1st series of faces happens to be [], i.e. 1st edge pairs touch
---------
Co-authored-by: Roy-043 <info@b-k-g.nl>
Don't show an error on unknown NOLINT lines (presuming that someone is using a
newer version, etc.), nor formatting issues (which are handled outside the
linter). Clean up clazy checks to remove non-pod-static check, and to do the
Qt6 checks on main (instead of master)
* Updated ts files
* Merged crowdin translations
* [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>
Added the functionality for the labeler to recognize Stylesheet related PRs. Also annotated file to differentiate different types of labels (as opposed to sorting them all alphabetically).
* Add text to readme and the issue template that the user should record a macro when recreating the issue and sharing this macro in the issue.
Updated old links from master branch to main.
* [AddonManager] Fix regression introduced by #15676...
...it disabled composite view for more than intended
* [AddonManager] Use QLibraryInfo major and minor version
PartDesign features did not inherit the custom attribute for
DiffuseColors as expected. The inheritance chain was incorrect. Also
added tests to ensure it's available.
fixes#15364
* [AddonManager] Correct composite button object name...
... and disable button if Qt version is below 5.15.x
* [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>
QT treats setting minimum size very seriously - it applies even if
the size required by the control is smaller than specified resulting in
rendering too small controls.
* [Start] Fix ThemeAccentColors not populated...
...on some versions of Qt
* [Start] Only apply if the ThemeAccentColor1 does not exist
* [Start] Fix Lint feedback
* [Start] Set constants
* [Start] Fix new Lint feedback
ThemeSearchPaths option was originally introduced in:
c420de0f9b ("Option to opt-out from using a Linux desktop icon theme.", 2020-01-26)
It was set on by default in:
dc6456caf9 ("Gui: Use FreeCAD supplied icons on Linux by default", 2024-06-26)
The key effect of the option is to select the FreeCAD-default icon theme.
The code also unnecessarily resets QIcon::themeSearchPaths,
":\icons" is always included in the default search paths [1],
when when using QAdwaitaDecorations causes window frame control icons
not to be displayed:
(qt.qpa.qadwaitadecorations) Failed to find an svg icon for "window-close-symbolic.svg"
(qt.qpa.qadwaitadecorations) Failed to find an svg icon for "window-minimize-symbolic.svg"
(qt.qpa.qadwaitadecorations) Failed to find an svg icon for "window-maximize-symbolic.svg"
(qt.qpa.qadwaitadecorations) Failed to find an svg icon for "window-restore-symbolic.svg"
A different default icon theme can still be chosen with the Name option.
[1] https://doc.qt.io/qt-6/qicon.html#themeSearchPaths
On some builds, the CMake package files for PySide6's Shiboken set the Py_LIMITED_API define on
the compiler's command line. This breaks FreeCAD as it depends on definitions from the Python
Stable API unavailable with the Limited API.
* fixes Qtoolbox for Freecad CAM
https://github.com/FreeCAD/FreeCAD/issues/14745#issuecomment-2231031485
* Removed offset because of Linux issues.
* fix for to dark cells in propetties panel
* fixed constrain colors in sketcher and arros tabbar.
* tabbar fixes
* This fixes the checkered scrollbar issue
* This fixes the spinbox arrow which had a gap.
* misses somethings in the overlay stylesheets.
* typos
* fixed some overlay issues
* update sketch uncontrained colors
* trying to fix the arrow size
* fixes for treeview
* Update Light Theme + Dark Background.qss
fix for edit text field
* updated checkmarks names and scaled them down.
* Update FreeCAD Dark.qss
oopsie wrong color
* Update icons classic.svg
icons files for the icons
* fix for table edit
The refactored postprocessor system uses
a factory to load scripts. The preference
system has logic to load the scripts to get the tooltips
That logic was overlooked during the refactor.
Added it here.
The migration of CAM to use the new material system left behind some
logic that created an old dedicated stock material property.
This commit removes that property
Modify CMakePresets.json to use -DCMAKE_EXPORT_COMPILE_COMMANDS:BOOL=ON
in all the presets.
The compile_commands.json file can be used by tools like clangd to get
autocompletion and go-to-definition.
This patch also adds compile_commands.json to the .gitignore, as often
you need to symlink the compile_commands.json from the build directory
into the source directory for it to be picked by tools. That is the case
with clangd at least.
Fixed a misspelling, added some commas, changed all occurrences of
PDN (PartDesignNext) or PD to PartDesign to improve readability.
(And update the text, since PartDesignNext was new in version
0.17 or so, and stable is now 0.21.2. )
- Shiboken headers need to be included first to get MAJOR/MINOR version
flags. Without them the code would still compile, but fail the version
check a few lines below assuming Shiboken is always older than 5.12
- Fix typo in cast when HAVE_SHIBOKEN_TYPE_FOR_TYPENAME is defined and
remove the conditional: we have to assume typeForTypeName() always
results in a valid name, as for the other implementations. There's no
error handling of any kind in callers.
This fixes the build on debian unstable with shiboken 5.15.
This makes a distinction between types that cannot be instantiated and
types without an editor (editing values can be done in the property
view). It adapts to DlgAddProperty.* using the same mechanism to filter
properties.
* FEM: Update task_material_common.py
* [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>
In the VarSet dialog, we can create an editor after the name and type
has been determined. However, if the name is changed after an editor
has been created, the editor is invalid because the underlying property
has been removed. In that case, the function onNameDetermined() should
clean up the invalid editor and this happens in most cases.
Unfortunately, it cannot handle the case in which a click happens on the
invalid editor itself. This click should result in onNameDetermined() but
since the editor is already invalid, onNameDetermined() is triggered too
late.
The current commit solves this by listening for every change in the name
of the property and handle the editors accordingly.
The image Std_ViewScreenShot.svg was not used in the GUI. The command Std_ViewScreenShot used a different icon. This caused a name conflict in the Wiki.
Reduce the number of GitHub fetches when rebuilding the local addon cache by using a remote cache stored on FreeCAD's servers.
Intended to mitigate the Addon Manager hitting GitHub's rate limiters.
Addresses, but does not fully close, #15059
* Add TaskDialog::autoClosedOnDeletedDocument()
* Add option to automatically close task dialog when document is deleted
* Expose autoClosedOnDeletedDocument() to Python
* Expose autoClosedOnTransactionChange() to Python
* Change ControlPy::showDialog() to directly return the task dialog wrapper
* Change TaskView::slotDeletedDocument() to close task dialog if requested
* Add missing TNP element name code; rough in more TNP tests
* Update ElementNamingUtils.cpp
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Having only `*`, `+` & `-` as reference is not intuitive. Tooltips help
users to know what each button does.
Also marked symbols as not translatable as they appear on CrowdIn.
Command::doCommand may throw an exception that isn't handled by the active sketch handler. This may leave it in an inconsistent state and can cause a crash later.
See #14945
Shiboken 6.4.0 to 6.8.0 and newer crash when using getAttr on their
objects. On these versions and newer, use a wrapper function to
call getattr.
Fixes#14101
Do not attach the Start Page to an existing document as otherwise weird behaviour can be observed:
1. Start FreeCAD
2. Open a project file or data file
3. Open the Start Page
4. Make a change to the document
5. Close the document. You won't be asked to save your change
6. In the tree view the document is still shown because the Start Page is attached to the document
7. Close the Start Page. Now you will be asked to save your change
* Updated ts files
* Merged crowdin translations
* [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>
Fixes#14823.
Depending on the order and location of the picked points, the Placement of the Box could be unexpected. The Height value was always positive if points were picked, a negative Height entered in the input box would lead to errors.
Additonally:
* Avoided some code duplication.
* Added a proper transaction to make the command undoable.
This changes current "Display/UI" pages to "Display/Advenced" as most of
settings there were pretty technical. These settings are not removed as
it is hard to decide which one should be removed and which one should
stay and we are too close to UI freeze.
Settings that should be obviously kept were moved to new "Display/UI"
section which now includes also options from previous "Display/Theme".
Fixes: #14412
* Addons: tweak gui_mocks dialog timing to avoid leaving windows after testing.
* [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>
This adds dragging support for toolbars placed in custom toolbar areas.
It is achived by creating our own custom ToolBar class that handles
logic of providing custom gripper. This is required because Qt hides
gripper when toolbar is not direct child of the main window which cannot
be overriden. Custom class should allow us to create more capable
toolbars in the future so it should be great addition on its own.
Co-Authored-By: Kacper Donat <kacper@kadet.net>
The gui texts for "Show description" and "Show internal name" were inconsistent.
"Show description column" -> "Show description"
"Show an extra tree view column for item description. -> "Show a description column for items."
1. Transfer point-on-object to the correct resulting curve: Currently the
constraint remains on the "start" curve created after the trim.
2. Expose internal geometries of both resulting B-splines.
* cMake: Add base support for LibPack3
Minor changes to FreeCAD source code to support compiling with Qt 6.5 on MSVC,
and changes to cMake setup to support the new Libpack.
* NETGENPlugin: Fix compilation with MSVC and OCCT 7.8
* Material: Switch to Wrapped_ParseTupleAndKeywords for /fpermissive- on MSVC
* Base: Prevent accidental definition of MIN and MAX by MSVC
* cMake: Prevent accidentally finding an old LibPack
* Material: Wrap another ParseTuple call
* OCCT: Modify includes for 7.8.x
* Part: Change TNP code to use Wrapped_ParseTupleAndArgs
* Spreadsheet: Workaround for MSVC macro pollution
* Mesh: Workaround for MSVC macro pollution
* Base: Remove extra MSVC flag (moved to CMake)
* Tests: Fix compiling with /permissive-
* FEM: Fix Qt warnings about duplicate element names
* cMake: Ensure major version numbers are set
* Address review comments.
* cMake: Further tweaks for LibPack3
* cMake: Modify specification of compiler flags for MSVC
* Main: Remove QtQuick testing code
* cmake: Find Boost before SMESH (which uses it)
* Fixes for LibPack2
* cMake: Another try at importinhg VTK cleanly
* [Sketcher] Correct default OVP and Geometry Creation colors
* [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>
On some systems the boost-python suffix is not exactly as the code
currently expects. To avoid getting even more guessing in the CMake
files about how exactly the python component is named in the boost
installation we introduce a variable FORCE_BOOST_PY_SUFFIX that can
enforce a specific suffix. If the variable is not set the behavior is as
before.
The EngineBlock.FCStd example file contained a corrupt Points file. A new file was created by opening the V0.17 version of the FCStd file, saving that file, and then copying that Points file into the V0.22 FCStd file.
It's a very OLD example BTW. See also #14583.
To check the problem recompute the original V0.22 FCStd file.
Result:
```
pyException: Traceback (most recent call last):
File "D:\BKG_Tmp\FreeCAD_0.22\Mod\Draft\draftobjects\bspline.py", line 113, in execute
spline.interpolate(obj.Points, PeriodicFlag = True, Parameters = self.knotSeq)
<class 'Part.OCCError'>: Standard_ConstructionError
20:56:32 BSpline001: Standard_ConstructionError
* Core Icon Revision
Update utilities-terminal.svg
Update button_add_all.svg
pixel alignment
Pixel alignment was performed for the specified icons.
* Changes requested by Obelisk
* Return old icons
* fix selection from Sketcher Task Panel
* fix selection from 3D View
* Synchronize selection between Task Panel and 3D View
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
If two straight edges were selected the chamfer distance would be recalculated so that the length of the straight segment would be equal to `r` (the radius entered by the user). But this was, and is, not done if one or both edges are arcs.
By removing the recalculation code the endpoints of the straight chamfer edge now always match the endpoints of the fillet arc that would be created for the same radius. This also matches the fillet/chamfer behavior in for example Part and Sketcher.
Currently a modal dialog is used directly in ImportGui.open()/ImportGui.insert() that makes it impossible to use the functions in a
script because they will be blocked
It ensures that for icon-only style it is displayed in the middle and
empty text is not accounted while calculating tab size hint. Custom
styles may need to target `QTabBar[style="icon-only"]` to apply specific
fixes like disabling padding.
Fixes: #14282
* avoid redefines in Assembly
* explicit cast from size_t to int
* remove unused variables
* avoid implicit cast from double to float
* in test cases replace EXPECT_FLOAT_EQ with EXPECT_DOUBLE_EQ or EXPECT_NEAR when doubles are used
Fixes#11435
Draft_Fillet could already handle arcs, provided they were not Draft_Arcs. The `_extract_edge` function in make_fillet.py had a strange logic, and could also return a wire which would result in problems later.
Another issue was that the `fillet` function in fillets.py did not handle the order of the edges correctly if one of the edges was an arc and the other a straight edge. The arch had to be selected first to prevent this error.
Fixes#14377
If the base edge of a stairs has a delta Z, the start point must have lowest Z. The `makeStraightStairsWithLanding` code fails otherwise.
Using `edge = Part.LineSegment().toShape()` is not the most efficient, but matches the pattern used elsewhere in the code.
Fixes#14804
Added (also don't make sense for a point object):
* AngularDeflection
* DrawStyle
* Pattern
* PatternSize
Removed:
* DiffuseColor (property no longer exists)
* LineMaterial (already hidden by default)
The static members of FemSetElementNodesObject are not defined in Fem but FemGui which the MSVC compiler doesn't like.
Furthermore it's a code smell to make them public and static and they are not even used by the class itself.
* Move global (non-static) variables into anonymous namespace to avoid possible linking issues that may cause UB
* Fix compiler warnings
* Do not reinvent the wheel and use boost::to_upper_copy instead of own implementation
Commit a8ae56e06a ("Part: Rename AttachExtension::Support property to
AttachmentSupport...") provided code to convert property name when loading
files saved with previous versions. Unfortunately 84ae6b9b7b
("Toponaming: bring in missing code fragments in Part") was based on
at the time obsolete code which did not contain before mentioned tweak,
so AttachmentSupport ended unassigned.
Fixes: 84ae6b9b7b ("Toponaming: bring in missing code fragments in Part")
* Machining model and materials
Adds a few machinability material model
and a couple materials. There's a button in the job dialog
to assign a material.
The sanity report is updated to display the surface speed for assigned materials
* improving the machinability model
* Introduce MaterialConstant for the machinability model
This constant is required to calculate the actual specific cutting force
from the normalized value. It determines how the actaual value varies
when the actual chip thickness gets further away from the normalization
point.
* Rename some machinability properties
- SpecificCuttingForce becomes UnitCuttingForce to clearer differentiate
between normalized and actual specific cutting force. The term unit
cutting force is used less often in literature, but
NormalizedSpecificCuttingForce as property name is too long for my taste.
- MaterialConstant becomes ChipThicknessExponent, as "material constant"
is just too generic for our context. In literature, this constant is most
often just used as the symbol m_c.
---------
Co-authored-by: Jonas Bähr <jonas.baehr@web.de>
* [MOD] JtReader.cpp clean
clean
* [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>
Fix importing elliptical arcs issue #8700.
Fix importing arcs into sketches in the case where they project as elliptical arcs.
Fix a discontinuity that happens when an external arc projects down to a segment. The segment end points should not jump around if the projection angle changes from 89.9 to 90 degrees.
When handling external geometry compare points for equality in a consistent way and remove some dead code.
Users report that they have a hard time figuring out that 'Array transform' does
movement/translations, and 'Polar transform' does rotation. Hence this
adjustment of their user-visible names.
* [STEP Import]
Added the ability to select the encoding of the source file when importing.
Requires OCCT version 7.8.0 and higher
* fix compile error for OCCT < 7.8.0
* Also hide label "CodePage" for OCCT < 7.8.0
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Fix error
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Fix error on Ubuntu 20-04
* Fix error on Ubuntu 20-04
---------
Co-authored-by: Kuzma30 <kuzemkoa@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
In order to support targeting ToolBarAreaWidgets via the QSS we need to
make it a proper QObject using Q_OBJECT macro, which must be placed in
header files.
Add properties for setting a minimum size with reasonable defaults.
Notify the user when the tree is expanded or contracted to allow
for container resizing.
#14206 was an intermediate solution. Now that `Part.getShape` can handle the new `SubElementNames` it needs to be removed as it breaks the handling of subelements in links.
#14206 was an intermediate solution. Now that `Part.getShape` can handle the new `SubElementNames` it needs to be removed as it breaks the handling of subelements in links.
* Added the new QSS file with images
Added the new QSS file with images
* fixed some disabled colors to be the same everywhere.
* update
* big update fixed the scrollbars and lots more.
* small tweaks
* small fixes
* fixed groupbox in qsint
* Added light classic
This light theme is basicallyt exactly no-stylesheet.
* fixed the tabs
* fixed background reportview
* updated overlay stylesheets
* Added preference settings from Opentheme @obelisk79
* tabbar tweaks
* forgot the gradients on dark
* Overlay stylesheets clean-up +move icon to folder.
* removing old stylesheets
removing old stylesheets
* it was icons not icon, fixed it.
* updated cmake and package.xml
* to many spaces
* removing old theme's
* updated default overlay qss
* removed my settings files
* updated cfg files
* Bunch of fixes
I compiled it and didn't see any issues anymore. Could be some discussions about the new startpage thumbnails.
* fixed up double arrows and the correct logo!
* updated the work file for the icons
* Sets no-stylesheet overlay to a stylesheet.
* type in cmakelist
* type in filename
* oeps did set the dark theme
* Update OverlayManager.cpp
I removed a bit to much reverting this line
* fixed text color issue in Qsint on the light theme and dark background
* Update Light Theme + Dark Background.qss
Fine tuning the treeview it now works good for ligth theme and dark brackgrounds.
* removed prodark added back Behave dark overlay
@Syres916 I deleted the overlay qss behave dark by accident.
But you might want to check this PR out since it changes a lot.
I deleted Pro-dark since it was not updated and is outdated and it looks also a lot like the default dark.
* Update Light Theme + Light Background.qss
Fixes
* small fixes
small fixes
* remove ProDark
* Update CMakeLists.txt
* changed the thumbnails
Also removed teh dimensions in the filename since that got annoying real fast :)
* Updated other overlay stylesheets
* missing extension
* cleanup and some fixes to the overlay.
* Update Dark Theme + Light Background.qss
udpated the dark theme overaly with light background for all you maniacs who use this.
* Title bar fix for windows
This makes it so that it uses black title bar in windows if you have dark mode
* updated white background and some colors
* I think I fix merge issue now.
* Some cleanup on the thumbnails
* Create CMakePresets.json
* idk
* trying to fix conflicts
* removing old themes
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Some fixes for Qsint sketcher toolbars icons
* fixed merge issue with maingui
* trying to fix merge conflicts
* and removing again.
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
- After tool handler is purged, give back focus to MDI to make sure VPSketch receive the keyboard event. Else if user start a tool, dismiss it with ESC, then press ESC again to exit edit mode it won't be detected.
Makes the button for the Draft_ToggleGrid command act as a real toggle button to provide visual feedback of the grid visibility state.
---------
Co-authored-by: Syres916 <46537884+Syres916@users.noreply.github.com>
* BIM: minor icon cleanup
* Removed icons used for 'experimental' tools. They are obsolete.
* Updated warning.svg to match .../src/Gui/Icons/Warning.svg
* Renamed Image_CreateImagePlane.svg to BIM_ImagePlane.svg to avoid overwriting the first icon in the Wiki.
* Removed ArchWorkbench.svg and preferences-arch.svg as they are also obsolete.
* To resolve a Wiki name conflict renamed BIM_Project.svg to BIM_ProjectManager.svg, and Arch_Project_IFC.svg to BIM_Project.svg.
+ improve PropertyMaterialList::readString
+ fix transparency handling in ViewProviderPartExt
+ do not register the private member '_diffuseColor' as property because it would be exposed to the
public where it can be modified
+ fix ViewProviderPartExt::finishRestoring() to correctly restore old project files
+ fix ViewProviderPartExt::setHighlightedFaces() to correctly show face colours if VBO is enabled
+ fix ViewProviderBoolean::updateData()
fix ViewProviderMultiFuse::updateData()
fix ViewProviderMultiCommon::updateData()
fix ViewProviderCompound::updateData()
fix ViewProviderFillet::updateData()
fix ViewProviderChamfer::updateData()
that all set invalid transparency values
+ Filter ShapeAppearance in ViewProviderBody::unifyVisualProperty
because body features usually have different number of faces than the body itself
+ manually fix some bad looking auto-formatted code
+ clean up code and remove duplicated code
* Arch: Improved ArchComponent.computeAreas function
All non vertical faces get projected now. Changed Part.Wire to DraftGeomUtils.findWires
* Arch: Removed Area property and add AreaCalculationType to Space object
The horizontal area and its perimeter are now calculated in two different ways. Eiter at the centre of mass or as a projection on the XY-plane. The results are filled in the filed horizontal area and perimeter in the Component section.
* BIM: Added property Area for Spaces again
* [mod] clean
* [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>
This refactors DressUp VP a bit so it does no longer store original copy
of original faces colors to properly support selection, but uses
highlight methods provided by the base class. It simplfies code a bit
and ensures coherent behavior.
Because a PropertyMaterialList property is used now it makes no sense any more to pass a list of view providers to the dialog
as it's impossible to set the material at a certain index.
Therefore the dialog has been simplified and setting the material property must be done by the calling instance.
It results in an attachment similar to ObjectXY but with the XY plane translated to pass through a selected vertex.
It is most useful to place sketches: pick a plane (XY, XZ, YZ) or another sketch then select a vertex to automatically translate the sketch in the Z-direction. In contrast to the Translate mode it does not change the origin.
* [AddonManager] Fix Error on Existing Python Additional Packages Folder
...this is more likely to occur since the BIM workbench integration and new users installing ifcOpenShell by pip before running AddonManager.
* [AddonManager] Correct boolean
When executing FreeCAD in interactive console-mode, the init-script tries
to load readline for a better input experience and enables tab-completion.
This code is neither executed when running in GUI mode, nor when the
console is not itneractive, e.g. when reading a script from stdin.
Note that readline is not available on Windows, so we ignore import errors
for now. With pyreadline3 there may be an alternative for Windows, but I
cannot verify this on my setup.
There are two unnecessary Layer warnings:
1. A 'might break' warning when deleting an object nested in a layer.
2. An 'out of scope' warning for objects also nested in f.e. a Std_Part.
To avoid them the Group property type was changed to `App::PropertyLinkListHidden`.
Update the BIM WP commands to use the new Draft code. This ensures correct GUI behavior.
This also fixes the BIM_SetWPSide command which would align to the left side instead of the right side. The right side matches the behavior of Draft_SelectPlane and also the icon of the command.
To avoid confusion, attributes e.g. Align, Width, Offset, Override (Align/ Width/ Offset)
would be disabled, if Base object is ArchSketch which provided the above information
FC Forum Discussion : https://forum.freecad.org/viewtopic.php?t=87721&start=30#p763761
This is added to conveniently change the face maker type of an extrusion object.
Hint: A new property is used to avoid to break project files when opening it with an older version.
This aims to fix rendering of tree view items in Qt6. While I don't
belive that this is a good way to fix this, I am worried that it is the
only way to do ir.
BC BREAK: This change introduces artificial QTreeView widget that can be
targeted using QSS and can be used in the delegate for painting background of
items. `QTreeView::item` would now be used to render background for the
whole row, while each cell can be targeted using `#DocumentTreeItems`
selector.
More details on implementation:
https://stackoverflow.com/questions/78414383/qt6-disable-drawing-of-default-background-for-qtreeview-items/78421604#78421604Fixes: #13760
Transform gizmo (dragger) used SoAnnotation which disables GL_DEPTH_TEST
resulting in rendering elements in wrong order. This PR introduces new
coin node: So3DAnnotation that delays rendering and clears depth buffer before
drawing which results in proper order of elements. As this destroys
information in the depth buffer it is crucial to run this action after
the scene is rendered.
This is added to conveniently change the attacher type of a Part object.
Hint: A new property is used to avoid to break project files when opening it with an older version.
See also forum thread: https://forum.freecad.org/viewtopic.php?t=87891
This commit introduces AutoColor property for sketches that when
enabled ensures that sketches are updated with the color of user
preference. It ensures that sketches from different users will be
still visible on different themes.
To ensure backward compatiblity migration strategy is to compute default
value for this property based on the color. If it is non-white (the
default value in FreeCAD) we assume that the change was inentional and
that it should be kept as-is turning automatic coloring off. In other
cases it is enabled by default.
Fixes: FreeCAD#13980
The visibility of link elements must be set with setElementVisible.
This will first try to use that API otherwise it falls back to setting
the Visibility property.
* Tux: Detect and fix BIM addon - fixes#14072
* [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>
If a Base::Exception is thrown in Measurement::getShape() then it's handled by the catch(...) handler and
converted into a Base::RuntimeError. This behaviour hides the original Base::Exception.
Example:
Selecting a datum plane raises the error 'Measurement: Unknown error retrieving shape' because the
original Base::ValueError isn't forwarded.
Improves the use of the ShapeAppearance property for the Part workbench.
removes DiffuseColor property
adds Python compatibility using custom attributes
transitions DiffuseColor to ShapeAppearance on open
Improved UI elements for setting object appearance, and appearance per face
Lays the foundation for future texture support
* Resolves missing include for GCC14 compilers
* Resolves build issues with Qt6 by removing unused include and function call.
* Revert "Resolves missing include for GCC14 compilers"
This reverts commit ad7fc0379dc1c0ae97120e1d89fe1fd8bbbe4c43.
* [ArchWall] Add Offset per Edge Feature
ArchWall.py - Add Override Offset property & ground work for Multi-Layer Wall
Offsets.py - Add offset per edge support to ArchWall
Forum Discussion :
- https://forum.freecad.org/viewtopic.php?p=759634#p759634
* [ArchWall] Fix bug found by unit test
'off' is no longer used, 'offsets' is used.
Fixes#14312.
The `new _get_shapes` function could return the original object shape. This caused a problem if `sh.reverse()` executed.
Note that the file in the linked issue does not produce the error as it does not contain a shape with a negative volume.
Discussion: #13657.
This PR adds the ShapeAppearance view property to Draft Layers.
The DefaultShapeColor is used for the DiffuseColor of the ShapeAppearance material. Other material properties are not based on the preferences when a layer is created.
The old ShapeColor and Transparency properties remain (ShapeColor as a hidden property) and are kept in synch with the ShapeAppearance. This is consistent with how ShapeAppearance is implemented in Core.
The gui_layers.py and make_layer.py files do not have to be changed. They manipulate the vobj via the mentioned old properties.
* Updating instances of FreeCAD's old logo to reflect the new Logo
* updating additional instances of the Logo
* updating additional instances of the Logo
* Update logo for windows installer
* Update logo reference to /src/Gui/Icons/freecad.svg
On systems with legacy monitors the display might be not as large as needed to display completely the start page. In that case the user is forced to use the keyboard to scroll horizontally the start page.
When creating a new material, assigning the basic
rendering model to the material resulted in an all
black color. This will now be assigned the default
color as specified in the preferences.
The name of the material Properties tab has been
changed to Physical for improved consistency in
the user interface.
removed old commented code.
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
revert comments
[pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
Dialogs to view the Appearance and Material properties of an object
These inspectors are intended to be used when debugging Appearance and
Material issues in a model.
The Appearance inspector displays the appearance properties of an
object. This will be more useful once PR 13792 is merged which migrates
parts to use ShapeAppearance instead of DiffuseColor. This shows each
of the appearance properties per face for the object.
The Material inspector shows the material, models, and properties
assigned to a model. It displays useful debugging information such as
the UUID and file paths associated with eacch of the items. This is
useful when finding and resolving model conflicts.
The material inspector now gives the option of copying the information
to the clipboard.
* Assembly: removal of object of fixed joint causing crash
FreeCAD is crashing if the 'Object'
property of fixed joint (Assembly/Joints/Fixed/Joint Connector 1/Object1 or
Assembly/Joints/Fixed/Joint Connector 2/Object2) is manually removed.
Steps to reproduce:
- make simple Assembly e.g. of two cubes with Fixed joint
- Select Fixed joint in the tree and go-to property 'Data' tab
- Select 'Object1' or 'Object2' of the 'Joint Connector 1' or 'Joint Connector 2'
and remove this reference
- click by your pointing device (mouse) to the arbitrary other property
The FreeCAD will crash here because the call
App::DocumentObject* obj = getObjFromNameProp(joint, propObjName, propPartName);
will return NULL pointer.
This problem is similar to the
4b5d079e6b.
* Assembly: fixed warning message text
The warning message text is not describing two cases which can happen,
but only one - property of specific joint.
* Assembly: avoiding possible crash in rack pinion joint code
Similar problems:
07c6df61f8456a6b02e88b369dcef5643ac1574e
and
4b5d079e6b
were causing real crashes (Linux + Sway Wayland compositor) when
Fixed joint type was used.
This patch tries to avoid the same situation, but now for the
rack pinion joint type.
The returned pointer value (part1 and obj1) can get NULL pointer value
and is used in the code:
if (obj1->getNameInDocument() != part1->getNameInDocument()) { ....
a few lines later.
Fixes#14242.
In the current dev fusing an empty shape with a face or solid no longer works (probably introduced with #14169). The reason for starting with an empty shape was the assumption that the end result would then always have a default placement. But that is only correct if multiple objects are fused.
In the new version of the code fusing no longer starts with an empty shape. The default placement issue is solved by always returning a compound.
Additionally the value for the Area property is now taken after offsetting and fusing the faces.
* [TD]Cosmetic geometry and tools update
- all cosmetics to store geometry in same form
- all cosmetics to survive scaling and rotation
- extension functions to survive scaling and rotation
* [TD]overhaul leader point storage and editing
- add py routine makeLeader(points)
* [TD]add leader conversion utility
* [TD]Set Leader RotateWithView default to true
* [TD]fix intersection vertex position
* [TD]add CosmeticEdge::makeLineFromCanonicalPoints
* [TD]fix 2 Extension tools
- positioning in DrawCosmeticCircle
- mishandling of points in execLineParallelPerpendicular
* [TD]Remove duplicate constexpr
* [TD]fix 2x Cosmetic arc tools
* [TD]refactor LineFormat out of Cosmetic
* [TD]move cosmetic appearance settings to LineFormat
* [TD]remove 2 unused methods
* [TD]apply format to blue line & circle tools
* [TD]fix ballon arrowhead does not rotate with view
* [TD]fix CosmeticCircle3Points
* [TD]allow multiple cosmetic object deletions
* [TD]fix extend/shorten centerline
isMultiTransformChild() tried to do a better job by checking
for a parent MultiTransform in the dependency list, but this
is unusable during initialization, when these dependencies are
not established.
The method is changed back to the previous one which only checks for
default property values. This will give false results during
initialization but not cause problems.
Because the Origins property is empty in "Transform Body" mode, the
features are detected as not solid.
This messes with the feature order on insertions and moves.
This is fixed by calling the isMultitransformChild() method of the
Transformed features instead of checking the Origins property in the
Body code.
Several group commands are active but require an active document to work. This PR overrides the method isActive() to
disable the commands if no active document exists.
The affected commands are:
* Std_ViewGroup
* Std_LinkActions
* PartDesign_CompDatums
* PartDesign_CompSketches
* Initial opengl test window
* added core files
* some fixes for code comparability with other platforms
* more compatibility cleanup
* add missing opengl libraries
* Basic simulation window works!
* try using different define
* fix wrapper for better compatibility
* Gui is now operational
* Finally SIM works on actual freecad models
* support drill commands
* cleanup python script and add tool profile generation
* Now using actual tools specified in the operation.
* support mouse wheel and freecad-style 3d navigation
* Support accuracy gauge
* remove endsimulation reference
* show simulation speed indicator
* apply clang-format
* apply changes suggested by code review
* gui items are loaded via QT resource system instead of hard coded
* use vector instead of pointer to pass tool profile points
* Fix some more formatting errors.
- Add Overridges property to let user to select particular edge(s) in a Sketch / ArchSketch to use create the shape of the Arch Curtain Wall (instead of using all edges by default).
ENHANCEMENT by External 'ArchSketch' Add-on:
- GUI 'Edit Curtain Wall' Tool is provided in external Add-on ('SketchArch') to let users to select the edges interactively.
- The selection of edges is 'Toponaming-Tolerant' if ArchSketch is used in Base (and SketchArch Add-on is installed).
- Warning : Not 'Toponaming-Tolerant' if just Sketch is used.
- Property is ignored if Base ArchSketch provided the selected edges.
Forum Discussion:
- https://forum.freecad.org/viewtopic.php?p=756554#p756554 [ ArchSketch ] - Curtain Wall, Slab, ArchWall etc. on Same ArchSketch
This adds "SingleSolidRuleMode" enum that controls if PartDesign will
enforce singular solid. By default the single-solid is enforced so
nothing changes for the user, it must be explicitly disabled by setting
new Allow Compound boolean property on a given body.
Default for this value is controled using user parameter under
Mod/PartDesign/AllowCompoundDefault
This refactors a single solid rule checking code from using the solid
count directly to using well abstracted `isSingleSolidRuleSatisfied`
method. This makes code easier to read and is the basis for next step
which is allowing users to disable this checks.
Corrects an issue in the API where a new material may not have a UUID.
Corrected the test case to reflect the changes and better document the
process.
Added a test case for material filters.
Based on a discussion in the PR, make the menu such that there is only
one level except for the status flags. This makes showall unambiguous
only meaning that it shows the hidden properties instead of showing all
the hidden properties and all options of the menu. "Show all" has
therefore been renamed to "Show hidden".
- section line convention label
- remove superfluous save/restore on changeEvent
- change default scrub count
- add preference for default symbol dir
- add preference for display of section cut line
Edges longer than ca. 10m are considered 'crazy' in the TD Workbench. Hatch patterns are also checked. As a workaround some intermediate scaling is applied.
Addionally: `transformShape` instead of `transformGeometry`. The latter results in B-splines.
There are possible crashes in the methods:
* SoDatumLabel::getLabelTextCenter()
* SoDatumLabel::generatePrimitives()
The two methods expect three points but do not check that they are defined. Depending on the use case of the SoDatumLabel only
two points may be defined. Accessing a third point is undefined behaviour.
- Level offest can now be negative
- Auto wall grouping is now off by default
- Shape2DView (BIM version) now sets InPlace to False
- The Axis tool starts with only one axis by default
- Sketches initiated with the BIM Sketch command take Draft colors
- Snapping WP shortcuts were changed to avoid conflicts
- all commands are moved to bimcommands
- all make*() functions are moved to Arch.py
- Objects and ViewProvider definitions are left in Arch* files for backwards compatibility
* Toponaming: bring in missing code fragments in Sketcher
* Toponaming: Fix infinite recursion, remove debug cruft, rough in fillet test
* Bring in missing code; fix chamfers
* Toponaming: Add code for fillets and test
* Create QuickMeasure in C++ instead of Python to avoid that it will be garbage collected
* Handle exceptions in case of invalid selections
* Refactor QuickMeasure class
* Fix linter warnings
* Update Draft WB icons
* Also make all icons 64px based
* keep inner white outline and small tweaks
* Tweaks following review
* Further tweaks following feedback
* Tweak more icons for consistency with light/dark themes
* Update following PR 13865, save as Plain SVG and remove unused ressources
Update texts for visibility
Some more cleanup
Use consistent FreeSans font
Updates the material preferences including selecting a default material
Preferences adds some options for what gets displayed in the Materials editor.
The option to use the legacy editor is removed in favour of the new
editor.
A new preference page has been added that allows the user to select a
default material. This will then be assigned to any newly created object. In
support of this, a new widget PrefsMaterialTreeWidget has been added as an
extension of the MaterialTreeWidget to automatically save and restore the
selected material.
This replaces old mechanism that was based on storing tab bar
orientation in user settings with one that delays initialization by half
of a second to ensure that toolbar is placed where in right place.
Right corner is placed to the right edge of screen, so its natural
growth occours on the left side. Basically it is Right to Left order and
so in that case the "end" is actually on left and so TabBar should grow
in that direction.
Unfortunately it is not possible to simply use RTL Qt feature to handle
that case as it would result in reverse order of workbenches (people will still
read it in LTR order) and icons on the right which is not wanted. That's
custom support is introduced.
This should fix issues when toolbar containing Workbench TabBar suddenly
(or not) changes orientation. It also fixes size policies so toolbar
resizes properly and does not cause window to grow.
Fixes: #13286
This changes back placement of the "more" button of the WB TabBar to be
at the end, where it should be naturally placed. In order to ensure that
it is always visible the control was reworked to show this button always
after the tab bar widget which now is dynamically sized. This is
behavior that is well known from browsers.
This commit also ensures that active workbench is always visible in the
TabBar by adding additional temporary tab when necessary. This tab will
automatically dissapear when not needed.
Fixes: #13720Fixes: #13630
This refactors implementation of toolbars in menu / status bar a bit. It
introduces enum with all possible areas like it is in Qt that can be
later used to decide what to do based on toolbar placement.
* Help: Removes use of WebGui - fixes#13788
* [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>
* Update Sketcher toolbar UIs.
Group all create tools for arcs, conics.
Group toggle driving/active constraints.
Update arrangement of icons.
* Change default to unified coincidence tool.
* Gui: support toolbar drag and drop to status bar and menu bar
ClosesFreeCAD/FreeCAD#12979
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* Gui: improve toolbar handling in status and menu bar
* Gui: fix workbench tab bar orientation in status or menu bar
* Gui: remove workbench toolbar position settings
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
In v0.22 a version number -1 is added to the material files to distinguish between old and new project file.
But v0.21 doesn't know about this version number and interprets it as number of elements instead.
Because this value is assigned to an unsigned type the value becomes 2**32 - 1. Now trying to create a container of this size requires > 280 GB
of RAM. On most systems FreeCAD new handler will jump in and raises a memory exception to stop the allocation. But an other systems with
plenty of RAM it's tried to allocate the memory and then may crash at some point.
This PR fixes this regression. It puts the version number to the MaterialList XML element as an optional attribute.
With this change FreeCAD v0.22 is still able to load projects that have been created prior to this change.
Additionally FreeCAD v0.21 can again load project files without crashing.
For more details see: https://forum.freecad.org/viewtopic.php?t=87268
Creating a shape with Part.CompSolid(), Part.Compound() or Part.Shell() is a null shape. In order to allow to append sub-shapes with the add()
method a valid shape must be created beforehand.
This fixes#13208
* Gui: Rename NavigationStyle::pan to setupPanningPlane
* Gui: Replace duplicate code with NavigationStyle::setupPanningPlane
* Gui: Use panning plane when hit point not found in lookAtPoint
Also enables navigation animations when pressing MMB while the mouse is not over an object
* Gui: Remove unused methods
The underlying problem is the method DocumentItem::updateItemSelection() where
the selection is altered. This may cause the destruction and recreation of the
DocumentObjectItems so that the passed pointer can become dangling.
The issue is fixed in two steps:
1. Add the method 'DocumentObjectItem *findItem(App::DocumentObject* obj, const std::string& subname) const'
to safely re-access the item.
2. Add a boolean flag 'dirtyFlag' and the methods insertItem() and removeItem() to DocumentObjectData.
This is needed to check when the iterator over the container becomes invalid.
#13778 introduced `self.obj.ViewObject.ShowInTree = False` to hide the temporary object. But objects that are hidden in the tree are displayed in the tree when they are selected in the 3D view. This selection occurs during commands that take more than 2 points. The solution is to change `self.obj.ViewObject.Selectable` on mouse button up/down.
Fixes#13700.
* Fixed a mistake made in getSubObjectListFlatten()
* Applied modifications according to review comments
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Formatted and refactored code imported for the DocumentObject class
* Formatted and refactored code imported for the SubObjectT class
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added test for SubObjectT::hasSubObject()
* Added test for SubObjectT::hasSubElement()
* Added test for SubObjectT::normalize()
* Added test for SubObjectT::normalized()
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added SubObjectT methods normalize(), normalized(), hasSubObject() and hasSubElement()
* Updated DocumentObject::getSubObjectList()
* Applied modifications to make the code compile
* [FEM] CCX Solver and Gmsh Mesh Task Panel Colour output improvements
* [FEM] CCX Solver TP make time code more prominent
* [FEM] Gmsh mesh TP make time code more prominent
* Removing white spaces
* Fixes made by Kadet
I am cleaning up my previous PR because of the white space removal.
I now make a single commit with the white space stuff and one with Kadet fixes.
Co-Authored-By: Kacper Donat <kacper@kadet.net>
* Delete CMakeSettings.json
screwed it up
* added stylesheet for example code.
* added example to cmakelist
* Mouse over fix
This fixes the mouse over issue!
Co-Authored-By: Bas Ruigrok <14298143+Rexbas@users.noreply.github.com>
* Added more overlay stylesheet for all options
* Removed reddudant code!
* Fixed the code
Works great!
Co-Authored-By: Bas Ruigrok <14298143+Rexbas@users.noreply.github.com>
---------
Co-authored-by: Kacper Donat <kacper@kadet.net>
Co-authored-by: Bas Ruigrok <14298143+Rexbas@users.noreply.github.com>
Accessing the parameter manager inside ~CurveConverter() is undefined behaviour because it will be accessed after the main() function
has been exited.
Fixes#13622
Fixes#13621.
Currently the legacy DXF importer creates a main group with the DXF name if a DXF is imported into an existing FreeCAD document. For each DXF layer it then creates a sub-group (or Draft Layer) inside that main group. Objects are nested in the sub-groups (or Draft Layers).
This does not make sense for Draft Layers as they should be nested in the LayerContainer, which should be in the root of the FreeCAD document.
Both for Draft Layers and sub-groups there is the issue that if mutliple DXF files are imported in the same FreeCAD document, exising Draft Layers and sub-groups are not taken into account. For each DXF a new "0" group/layer is created (with a Label that is not "0" and therefore not recognized), and if there are objects on that layer a new group/layer is created for each object (labelled "0001", "0002", "0003", etc).
To solve this the main group with the DXF name is no longer created in the revised code and the layers variable is initialized with the groups/layers that already exist in the FreeCAD document.
Additionally the formatObject function should not format objects that are in Draft Layers. Its action conflicts with the layer mechanism resulting in the last imported object having an incorrect color.
It is aimed to provide integrity by including the shape used in other workbenches in technical drawing icons. For the hidden line, color variation was used instead of dashed. The reason for this is to comply with the art guide. I think the dashed line looks better.
Somewhere in the test suite GTest is including cmath (or something related) and not declaring this, so later includes of it by the tests are being ignored.
The class MaterialLibrary has a shared pointer to its Material objects and the class Material has a shared pointer to the MaterialLibrary.
The class MaterialManager owns all MaterialLibrary and Material objects in static containers. To resolve the cyclic references the method
cleanup() has been added.
The class ModelLibrary has a shared pointer to its Model objects and the class Model has a shared pointer to the ModelLibrary.
The class ModelManager owns all ModelLibrary and Model objects in static containers. To resolve the cyclic references the method
cleanup() has been added.
The Materials module registers a function to App::CleanupProcess that calls the above cleanup() methods.
NOTE: This registration is only done in debug mode mainly to satisfy memory checkers
If an exception is thrown then the allocated buffer won't be cleaned up. To make this exception-safe the class
StringBufferCleaner is added using the RAII idiom
* Set parent object to FileCardDelegate so that it will be destroyed if the list view is destroyed
* Inside FileCardDelegate::paint() delete the widget
* Create a compatibility module QtSvgWidgets.py to handle PySide2 & PySide6
* In the Arch and Material modules use the QtSvgWidgets module
* Since Qt6 the method QFont.setWeight() doesn't accept an int any more but requires an enum. Since the call of QFont.setBold(True) sets
a weight of 75 the extra calls of QFont.setWeight(75) can be safely removed
Co-authored-by: Adrián Insaurralde Avalos <36372335+adrianinsaval@users.noreply.github.com>
Improves the MaterialTreeWidget beyond minimum viable product.
- Filters can now be filter lists to allow a variety of filtering
options.
- User preferences allow the inclusion/exclusion of favorites and
recents.
- Widget state such as expansion, tree expansions, etc are saved and
restored.
- show current appearancee material when editing.
- implements a python interface
#fixes 13421: always opens full tree
Start: Remove QML include
Start: Eliminate errors on unreadable images
Start: Ensure command succeeded
Start: Correct startup WB
Also re-enable the migrator, which was not the culprit.
Gui: Roll back unneeded NoneWorkbench changes
Web no longer provides a user-visible browser, but only a simple server for remote interaction with FreeCAD. Dependency on QtWebWengine has been removed.
Start: Automatically run command when event loop starts
Also sets PartDesign as the default startup Workbench.
Start: Add checkbox for starting or not starting Start
Start: Correct default card size parameter access
Start: General cleanup
* The MouseDelay pref does not belong in the "Grid and snapping" pref group.
* Max. value was missing. Without it the spinbox only goes to 100.
* The 3600 suggestion was removed from the tooltip as it is an unworkable value. But entering it is possible now.
* expose detectDegeneratedGeometries to Python
* expose removeDegeneratedGeometries to Python
* expose delConstraintsToExternal to Python
* expose evaluateConstraints to Python
* expose validateConstraints to Python
onChanged() triggers for the first time before all of the properties are
loaded, so it can fail to compute properly at that stage, depending on
the load order.
However, it's not necessary to compute geometry in onChanged() at all,
because that's usually supposed to happen in execute() anyway. The
solution here is to just not do onChanged() at all.
Fixes#13558
There were several issues here, not just one. The following are fixed:
Incorrect display of Quantity items (NaN)
Editing and updating quantity items
Editing and updating items on the first row.
There are still issues with editing lists, but these were known issues at the time of initial merge. This has been split out into issue #13435fixes#13020
When restarting the application (e.g. after installing an addon) the application will be closed and a new instance will be launched. Now it can happen that the old instance is still busy writing the config files to disk while the new instance wants to read them in. At this time it's possible that a config file is in an invalid state so that the new instance will ignore it but then starts with a default configuration.
Later when closing the new instance the config files will be overwritten and destroy the user's original settings.
By using a lock file this race condition will be avoided. It uses a timeout of 1 second that should be enough for the old instance to write the files to disk.
The ShapeAppearance is a list of materials and thus assigning a color with 'obj.ViewObject.ShapeAppearance.DiffuseColor = color'
is incorrect.
But doing it with 'obj.ViewObject.ShapeAppearance[0].DiffuseColor = color' doesn't work as expected because the
internal notification doesn't work with a list.
So, the only viable way is to revert the changes and do it by assigning the color to the 'ShapeColor' attribute.
A beam created with Arch_Structure would have the wrong length if the 1st point was clicked and the 2nd point was entered in the task panel.
Forum topic: https://forum.freecad.org/viewtopic.php?t=86595
Aditionally: simplified rotateLH and rotateLW.
Co-authored-by: Yorik van Havre <yorik@uncreated.net>
* The Placement of Draft Line base objects was not adjusted to account for the current working plane. Forum topic: https://forum.freecad.org/viewtopic.php?t=86780
* Continue mode checkbox did not behave correctly because its value was based on FreeCADGui.draftToolBar.continueMode, which does not update as the parameter is changed. Will update other Arch code later.
* There was an issue with Draft Line based walls and continue mode. A Draft Line is selected after creation and the next command call would also use that line because of that. Resulting in 2 walls using the same line and an interuption of continue mode.
* setUseSketch changed the wrong parameter.
During the build process the example files are copied to the hardcoded path 'data/examples' while for the installed files
'/examples' is used. On Linux systems the value of the CMake variable is 'share' so that there is
an inconsistency between compiled and installed version.
Provides compatibility loading older files outside the context of
a library.
Older material files were loaded by specifying a path. The new
material system used the path to associated the material with a
library, which may not be appropriate for legacy files. This change
allows the use of materials outside of a library.
Additionally, legacy files often have name/value pairs not part of the
standard list of properties. Since these were unable to be mapped to
a model property they were ignored. Materials now maintain a legacy
map to hold properties not associated with a property model. These
properties are considered transient and will not be saved. It is not
intended for this feature to be used as a generic container for
properties not mapped to an appropriate model.
Fixes#13302
* New integration with 3Dconnexion devices
* CMake build option hidden for Mac
* Minor fixes, to be squashed to previous commit
* cmake: fix indent and case; to be squashed
* Corrected name case
---------
Co-authored-by: Patryk Skowroński <pskowronski@3dconnexion.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Co-authored-by: Ladislav Michl <ladis@linux-mips.org>
The Materials module does a conversion from float to double when saving the transparency and again a conversion from double to float to double
when restoring it. This causes a considerable loss of accuracy so that the representation in percent leads to different numbers.
Using consistently some helper functions to do a proper conversion from float to long and back fixes the problem.
The new property ShapeAppearance is a PropertyMaterialList and always read after the DiffuseColor property when restoring a document.
Thus, the method onChanged() doesn't override DiffuseColor when restoring a document. Additionally, the method finishRestoring() is re-implemented
to set the colours per face in case DiffuseColor has defined multiple colors.
When synchronizing the Transparency property with the transparency value of the ShapeAppearance property then do not convert between float and
double as otherwise some strange rounding issues can occur.
Example: Set the Transparency property of an object to 35 in the Property Editor. After leaving the editor the value may switch to 34.
* Correctly load a file if colors are set per face
* Result of boolean operation is correctly colored if source objects have different colors
* Result of compound is correctly colored if source objects have different colors
* fix several linter warnings
* remove code that cannot be executed: inside the constructor it cannot ever happen that getObject()
returns a valid object
* in ViewProviderGeometryObject::handleChangedPropertyName call the method of the direct base class
as otherwise this may break the mechanism in the future
* Shape is a property of an extension module -> move its handling to ViewProviderPartExt
This PR demonstrates the known regressions of the recently merged material branch:
* Changing the transparency after setting color per face will reset them
* The result of boolean operations or compound doesn't inherit the colour of its input objects
* If colour is set per face to a boolean operaton object then saving and restoring the file causes weird rendering behaviour
because material binding is set to PER_PART but only a single colour is defined
* If a shape inside a part container has set colour per face then saving and restoring as STEP file causes weird rendering
behaviour for the same reason
* Shape binder or datum objects don't show the correct default shape colour
* Fixed translations
* Reference objects can now use whole file contents instead of having to choose a part
* Support for DXF files
* Support for IFC files (if NativeIFC is available)
* General code cleanup
The edit datum dialog is opened by double-clicking on a dimensional constraint in a sketch. However, the double-clicking event doesn't work realiably on
some systems. As a workaround this PR adds the command to the context-menu.
For more details see the forum thread: https://forum.freecad.org/viewtopic.php?t=71137
FreeCAD is crashing during 'Solve Assembly' call if the Part property
(Assembly/Joints/Fixed/Joint Connector 1/Part1 or Assembly/Joints/Fixed/Joint
Connector 2/Part2) of fixed Joint is unset.
Steps to reproduce:
- make simple Assembly e.g. of two cubes with Fixed joint
- Select Fixed joint in the tree and go-to property 'Data' tab
- Select Part1 or Part2 of 'Joint Connector 1' or 'Joint Connector 2'
and remove this reference
- call 'Solve Assembly' now
The FreeCAD will crash here because the call
App::DocumentObject* part = getLinkObjFromProp(joint, propPartName);
will return NULL pointer.
The property Part1 or Part2 can get empty (unset) during usual
construction operations - during changing construction history
and it can be very hard to find the cause of FreeCAD crash on a big
model.
This patch tries to fix the crash in such situation.
The explicit activation of the MaterialWorkbench breaks the toolbars layout for every start. When fixing it manually it will be broken
again after the next start.
Because the core doesn't depend on the Material module it's a no-go to add an explicit runtime dependency to the corresponding workbench.
Since the Part module depends on the Materials module and the PartGui on MatGui the correct way is to let Part an PartGui load their
dependencies.
* fix warning -Wunused-variable
* fix warning -Wreorder-ctor
* fix warning -Wunused-but-set-variable
* fix uic warning for DlgDisplayProperties.ui
* rename the target MateriaTestLib ALL (note the typo and the already existing MaterialTestLib ALL) to MaterialTest ALL
drop the hard dependency to the Part module: The document is checked for a property ShapeMaterial of type Materials::PropertyMaterial.
An alternative could be to cast to GeoFeature and use the methods getMaterialAppearance() and setMaterialAppearance()
* Restored previous logic of GeoFeature::getElementName()
* Added precompiler directive to use the old logic if FC_USE_TNP_FIX isn't defined, otherwise use the new logic
* Reworked SketchObjectTest::getElementName() as a consequence of the previous points
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Uses new material system for appearance
Each feature object now has a property called ShapeMaterial that
describes its physical properties. If it has a shape, it has a
material.
The ShapeColor attribute is replaced by a ShapeAppearance attribute.
This is a material list that describes all appearance properties, not
just diffuse color. As a list in can be used for all elements of a
shape, such as edges and faces.
A new widget is provided to allow the user to select materials in a
consistent fashion. It can also launch the material editor with its
more advanced capabilities.
With future C++ compilers the methods vsprintf and sprintf are declared as deprecated due to security issues.
They are replaced with the secure counterpart of the fmt library
Fixes the compiler warnings -Wdeprecated-declarations
* Added precompiler directive to use std::hash instead of HashCode(INT_MAX) if OCC_VERSION_HEX >= 0x070800
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
This fixes#12949.
* The file materials-editor.ui must be installed with a separate INSTALL command because it goes to another directory than the other resource files.
* Material_rc.py isn't copied to the build directory any more. So, then don't install it either.
For roof created from Base object as solids:
Not only the solid of the base object itself be subtracted from a Wall, but all portion of the wall above the roof solid would be subtracted as well.
FC forum discussion : Sketch based Arch_Roof and wall substraction
- https://forum.freecad.org/viewtopic.php?t=84389
Adds a checkbox to output a G85 cycle used for reaming or boring. The
cycle is like a normal drilling op, but feeds back out of the hole
instead of performing a rapid move.
G85 does not support peck or dwell, so those other options are disabled
when the "Feed retract" option is enabled in the UI.
The problem is caused by conflicting values of the anonymous enum of ViewProviderSubShapeBinder. The solution is to set a higher value than the highest value of EditMode
The use of static_cast here could cause undefined behaviour because at this point it's not guaranteed that findBodyOf()
really returns a PartDesign::Body
* FEM: remove calculix from solvers
* FEM: remove calculix from joint with ccxtools if branches
* FEM: remove calculix from its if
* FEM: fix cxx typo in translations
* FEM: fix cxx typo in classes name
* FEM: fix ccx typo in shortcuts
* FEM: convert FEM_*CcxTools to CamelCase
* FEM: remove tests related to calculix
* FEM: remove test_solver_calculix.py from Fem/CMakeLists.txt
* FEM: convert all 'CalculiXccxTools' to 'CalculiXCcxTools'
* FEM: revert changes in all *_*.ts files
* FEM: convert 'SolverCcxtools' to 'SolverCcxTools'
* FEM: convert remaining 'Ccxtools' to 'CcxTools'
* Allow adding subfeatures to MultiTransform if there is no active Body
Previously the active Body would be checked and used to add new
subfeatures.
This would either do nothing, when no Body was active,
causing confusion for users becaues than can edit other features without
an active Body.
Or it would add the subfeature to the wrong Body if another Body than the
one of the MultiTransform was active.
Now the Body of the MultiTransform is checked and used.
# Conflicts:
# src/Mod/PartDesign/Gui/TaskMultiTransformParameters.cpp
* Change getTopTransformedObject() to protected
This needs to be called from the MultiTransform.
* Fix typo
The notifier string must be a std::string() instead of an empty C string as otherwise the wrong methods are called so
that all messages are sent to the void.
This regression was caused by commit dc08aa8e0f
If you have a mirror feature and set the mirror plane with the normal feature editing the recompute works. But if the mirror plane is set with the property editor then the recompute fails with the message that no mirror plane reference is set.
This is related to a an empty sub-name list of the link property instead of a single and empty sub-name element.
This PR allows to specify a sketch, plane or datum plane without a sub-name.
For more details see: https://forum.freecad.org/viewtopic.php?t=86568
This fixes#13238
and MeshGrid::CalculateGridLength(unsigned long, unsigned long)
For almost flat meshes CalculateGridLength may compute a grid with a huge amount of cells that allocates the whole RAM of the system while for an exactly flat mesh a grid with a sensible number of cells is computed.
Use the overloaded methods of MeshGrid::Rebuild(unsigned long) and MeshGrid::CalculateGridLength(unsigned long) instead
The old menu text of Sketcher_MapSketch did not describe the tool very well. Not just a face can be selected.
"Map sketch to face..." -> "Attach sketch..."
Forum topic:
https://forum.freecad.org/viewtopic.php?t=86112
* Added test for WireJoiner::IsDeleted()
* Fixed a typo in test for WireJoiner::Modified()
* Fixed a typo in test for WireJoiner::Generated()
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added test for WireJoiner::getResultWires()
* Replaced references in test for WireJoiner::getOpenWires() with more correct references
* Added a comment in WireJoiner::WireJoinerP::getResultWires() to better explain how it works
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* [PartDesign] Still a helix fix
If we don't break the helix path at each turns we get a vaild path for
MakePipe (solid) even with an angle.
* Decrease helix tests requirements
Miniforge has upgraded from 23.x.y to 24.x.y, permitting the unpinning of dependencies.
Furthermore, these pinned packages cause build issues with the latest version of Miniforge.
If you change the grid color in the preferences and cick the Apply button, the color of all grids is updated now. So you can experiment while the Preferences Editor is open.
I have kept but moved the grid color button in the Draft_SelectPlane task panel for now. So that both options can be tested.
ISO 286/14405-1 calls for a plus sign if the limit is positive and a
minus sign if the limit is negative. A zero limit should have neither
a plus nor a minus sign. This commit adds the plus sign.
- this is a temporary measure to prevent problems caused by a
bad value for LineStandard parameter. A previous devel version
stored on invalid value. This patch can be removed before
moving to production.
- this condition can be corrected by editing LineStandard to 0, 1 or
2. a plethora of warning messages is issued until the parameter is
corrected.
This fixes a regression of PR #11266 that dropped the case where neither the option 'Ignore project unit system and use the default' is set
nor an active document exists. In this case nothing happens even if the user changed the unit system.
The proposed code fixes the following issues:
1. There is no check if the target object itself has a property that matches the label type.
2. If a subelement is selected that does not have the label type property, the value from the main object is displayed instead.
3. The default text is an empty string.
Example:
Currently If you select a vertex of a wire, and select "Length" as the label type, you will get the length of the wire. With the new code the text will then be "Length not available for (sub)object".
Forum topic (issue #1):
https://forum.freecad.org/viewtopic.php?t=86222
The reason of the crash is a static_cast of an unknown type that causes undefined behaviour. The feature AdditiveLoft has the
property Section of type PropertyLinkSubList but the function does a static_cast to PropertyLinkList.
The solution is to use a dynamic_cast that returns null if the cast fails.
* fix hard crash in MainWindow::_updateActions() if no MDI view exists
* in MDIView::buildWindowTitle() use the label of the document because this changes when saving it while the name is immutable
* fix const correctness in MDIView::buildWindowTitle()
* do not set the modified flag of the main window in MDIView::buildWindowTitle() but in the calling instance
* move setting the main window title to Application::viewActivated to reduce code duplication
* fix missing application name if FreeCADGui is loaded as Python module
* Fix various typos throughout the codebase
* [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>
Reference selection in the GUI was accidentially changed to only
allow specific types of objects, preventing e.g. selection of a DatumPlane
for mirroring.
This restores the previous functionality.
* FEA: fix 1d beam cross section orientation
* FEM: revert 1,2-directions to FreeCAD way; fix normal direction for z<0
* FEM: change 1-direction to +y axis
Previous commit changes the 1-direction to -y axis, however originally it was directed at +y axis. This commit makes the 1-direction face +y axis
* FEM: update cantilever tests
* FEM: relax math.isclose by adding abs tolerance
- additional geometry types
- add method to handle line like bsplines
- handle deleted ref body feature
- add test for empty savedGeometry
- add switch for matcher/LTNP on/off
The interpolation of a BSpline can fail and then OCC throws an exception. Because this OCC exception isn't handled by the DrawSketchHandler the core system handles it as unknwon C++ exception
This allows it to write more elegant code like:
auto ext = obj->getExtension<>(GroupExtension);
instead of
auto ext = dynamic_cast<GroupExtension*>(obj->getExtension(GroupExtension::getExtensionClassTypeId(), true, true));
The deprecated Drawing module still uses some classes that have been removed with Qt6.
These are the classes:
* QRegExp that is replaced with QRegularExpression
* QGLWidget that is replaced with QOpenGLWidget
* FEM: Delete data/examples/FemCalculixCantilever3D_newSolver.FCStd
* FEM: Delete data/examples/FemCalculixCantilever3D.FCStd
* FEM: Delete data/examples/FemCalculixCantilever2D.FCStd
* FEM: add updated cantilever 3D
* FEM: add updated cantilever 2D
* FEM: add cantilever 1D
* FEM: Update CMakeLists.txt
* FEM: Delete data/examples/FemCalculixCantilever1D.FCStd
* FEM: Delete data/examples/FemCalculixCantilever2D.FCStd
* FEM: Delete data/examples/FemCalculixCantilever3D.FCStd
* FEM: reupload the 1D example with a new license
* FEM: reupload the 2D example with a new license
* FEM: reupload the 3D example with a new license
Removes localization from the material card dictionary.
Fixes#12935
The previous card implementation transferred strings directly to the
card dictionary without interpretation. The new material system parses
the file data, producing a dictionary for compatibility. The new
dictionaries localized the strings which is incorrect. This PR
removes that localization.
Fixes#12933
The previous card implementation used a parameter to select either
solids or fluids. The current material dictionary ignored the
parameter and only returned solids. This PR restores the use of the
material type filter.
- left justify tolerances
- use format spec for tolerance == zero
- prevent uncommanded tolerance format changes
- use 'w' format for HoleShaftFit
- allow zero tolerance values for HoleShaftFit
"QGuiApplication::setDesktopFileName: the specified desktop file name
ends with .desktop. For compatibility reasons, the .desktop suffix will
be removed. Please specify a desktop file name without .desktop suffix"
Sketcher_ConstrainLock after Sketcher_ConstrainAngle.
Sketcher_ConstrainRadiam before Sketcher_ConstrainRadius.
This was not always correct.
See also #12667.
The icons in the testStatus() function are taken by reference and modified
inside. This seems to be used for caching when the same item occurs
multiple times in the tree. This can be the case for groups.
The visibility icon was added without taking the cached icon into
consideration and so it was added a second time.
The code is now moved into the if statement checking for this case.
* Removed unnecessary function
the "renamedDocumentObjet" function does nothing
* [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>
Adds support for menu items having 'user data' that is the untranslated string. It would be better if these were enumerations, but that's a much larger refactoring process.
If for the DlgExpressionInput the user config parameter 'NoSystemBsckground' is set to True it's not used as a normal dialog but as a pop-up window.
In this mode the context-menu of the ExpressionLineEdit isn't working. A previous commit (a3036d16f1) fixed a crash but not this issue.
For Qt4 DlgExpressionInput has overridden the eventFilter() to handle using the context-menu but this is not working any more for Qt5 or Qt6.
Luckily, it has appeared that with Qt5 and Qt6 it works out-of-the box now and the event filter is not needed any more.
Closes#12785. The cause of the segmentation fault is access to the
already deleted _QMenu_. Simple setting attribute `Qt::WA_DeleteOnClose`
and removal of `delete menu` prevented it. To reproduce the crash, one
needs to mess up the `user.cfg` file in the way described in the issue.
Here is the fragment from the issue to mess up the `user.cfg` file:
```xml
<FCParamGroup Name="Expression">
<FCText Name="EditorTrigger">=</FCText>
<FCBool Name="AntoHideEditorIcon" Value="1"/>
<FCBool Name="NoSystemBackground" Value="1"/>
<FCInt Name="EditDialogBGAlpha" Value="1"/>
<FCInt Name="EditDialogWidth" Value="300"/>
<FCInt Name="EditDialogHeight" Value="214"/>
<FCInt Name="EditDialogTextHeight" Value="35"/>
</FCParamGroup>
```
---
This commit changes also unconnected things:
- usage of `QObject::connect` instead of if statements
- relocation of a separator and an action inside the if statement (I saw
no reason to have a separator and an action for _ExpressionCompleter_ if
there is no expression completer)
- usage of asynchronous `QMenu::popup()` instead of synchronous
`QMenu::exec()`. This way is used within [the source code of Qt]
(https://github.com/qt/qtbase/blob/5.15/src/widgets/widgets/
qlineedit.cpp#L2191-L2197).
The commit 028739df caused a regression by breaking MinGW builds because the line
'#if defined(__MINGW32__)' has been removed.
As a result the 'if defined (FC_OS_WIN64) || defined (FC_OS_WIN32)' has become active
where the types '__int64' or 'unsigned __int64' that are not defined for MinGW
* Updated ts files
* Merged crowdin translations
* [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>
Some instances of TimeInfo serve the sole purpose of measuring time
duration. Using system time is unfortunate as it returns wall clock,
which is not guaranteed to be monotonic. Replace such a usage with
the new TimeElapsed class based on steady clock.
* GUI: Follow the widget indications when docking them
The overlay manager handles the creation and drawing of the title bars
for the docked widgets. When adding a QDockWidget the manager ignored
the set of features (closable, movable, floatable) provided by the
widget and always showed all the actions.
Amend the code to take into account the features specified by the
widget.
Closes#11944
* Addon Manager: Refactor primary view and enable composite
This brings back something akin to the original Addon Manager display, with the side-by-side display of the list and details views.
The element type SoModelMatrixElement must be enabled for the node types SoHighlightElementAction and SoSelectionElementAction.
Otherwise an assert() will fail and causes a crash in debug mode.
When qt_wrapInstance fails it returns Py::Object with internal
pointer set to null. Make PythonWrapper::from* methods raise
exception when this happens to be consistent with PySide code path.
Wrapping QAction through QObject does not work as QAction class
is a part of QtGui not QtCore, so Py::Object with internal
pointer being null is returned causing a crash later.
Therefore implement fromQAction conversion method.
* Part/Toponaming: tests for flushElementMap and resetElementMap
* Added test for resetElementMap()
* Added test for flushElementMap()
* restored ComplexGeoData::resetElementMap to RT fork
* modified TopoShape::resetElementMap to match the restored signature of ComplexGeoData::resetElementMap
* added checks in TopoShape::makeShapeWithElementMap to avoid segfaults
* added check in TopoShape::setElementComboName to avoid segfaults
* restored testFindSubShapesForSourceWithTypeAndIndex
* modified test saveDocFileWithNoElementMap to match the restored signature of ComplexGeoData::resetElementMap
* Part/Toponaming: tests for flushElementMap and resetElementMap
* Removed comments in ComplexGeoData::resetElementMap()
* Changed TopoShape::resetElementMap():: from virtual to override
* Removed comment in TopoShape::resetElementMap()
* Added comments about differences between main and RT fork
* Removed comment in test saveDocFileWithNoElementMap
* Updated expected test result in makeElementCompoundTwoShapesGeneratesMap
* Updated expected test result in resetElementMapTest
* Fixed typo in test flushElementMapTest
* Part/Toponaming: tests for flushElementMap and resetElementMap
* updated expected tests results after previous methods modifications
---------
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Remove adjacent coincident and nearly-coincident points from Path.
This is based on PR#5276 by sundtek, but only collapses adjacent points
on the Path. It also addresses (IMO) most of the feedback on the original
PR.
see also discussion on the forum:
https://forum.freecadweb.org/viewtopic.php?f=15&t=42755&start=10#p555566
Addresses clang-tidy complaint: declaration 'Feature' is never referenced, but a declaration with the same name found in another namespace 'Part' [bugprone-forward-declaration-namespace]
The descriptions were sometimes not accurate (major/minor radius for ellipses). I have also tried to improve the constistency a little.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=85396
This adds G43 tool height compensation to the centroid CAM post-processor using
a similar approach to the G43 support in the MACH3 post.
Specifically, G43 is emitted at every tool change by default and a new
`--no-tlo` post argument can restore the old behaviour of no height
compensation being emitted. These both match how the MACH3 post does it.
* Change the calculation of the b parameter of the hyperbolic arc
so that it does not give 0/0 when cos(phi) = 0
This gave problems if the first two points defined in the sketcher had
the same x-coordinate.
If endpoint-to-endpoint tangent constraint exists between the connecting points
of the curves to be joined, also apply C1 continuity (i.e. a knot multiplicity
of degree-1).
* PD: Make datum points highlightable/selectable
Give the user some feedback by changing the color of the datum point
marker as the user selects or hovers over it.
Closes#9540
While rebasing after f539138dd9 ("fix readability-*:") a mistake was
make, causing exception been thrown for every file opened. While there,
invert file test existence logic, so we return early on failure.
Fixes: 95b37fa806 ("Base: Do not use else before return")
* Update translations
* [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>
Foreign Python objects needs to be passed as Py::Object().
Py::asObject() is stealing reference and object might be garbage
collected even before dereferenced. Problem didn't show in the
original code because methods Py::asObject() was used in were
never called.
Fixes: ac6f991baf (Gui: Consolidate Python -> Qt class conversion)
Before calling the closeSubTask() function from the dialog reject()
function, the slotDeletedObject() is called from the transaction being
aborted. This causes the subFeature pointer to be nullptr and subsequent
apply() functions from the SpinBox widgets to crash.
Before calling apply check if the subFeature is still there.
Remove and re-insert the selected objects at the specified point in the
tree while preserving their relative order.
The code used to insert them in reverse order.
Closes#12287
* Part/Toponaming: MapperHistory
* added test for MapperHistory::modified
* added test for MapperHistory::generated
* renamed edges in the test for MapperHistory::modified
---------
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
The python console commands where not consistenly reported because
the apply function was not called or not implemented.
The function is now called from the base class and also when
a subfeature is closed in MultiTransform.
Some missing properties are also added.
All pattern sublcasses contain the same code for handling the
feature list. This code is now moved into the base class that handles
the common ui.
The subclasses now only need to call the setupUI/setupParameterUI function
in their constructors and implement the setupParameterUI function
to create their parameter ui into the specified widget.
The MultiTransform also handles it's common ui and the subclasses
can reuse setupParameterUI without code duplication.
All files contain the same add/remove buttons and a feature list.
These common elements are moved into the TaskTransformedParameters.ui file.
The same goes for the common OK Button that is used in a MultiTransform.
The ui files for the patterns only contain their distinctive
parameters. And the common ui files contain an empy widget that will
be filled with the respective parameter widgets from the patterns.
SetupShibokenAndPyside macro checks module include path and eventually
decides to disable respective module in case its include directory is
missing. Make this process more straightforward by testing directory
existence; "Location: " string is 10 not 9 characters long and leading
whitespace makes testing for directory name fail.
While there, rename variables to respect that find_pip_package returns
only single include and library path.
* PD: Implement 1D intersection for attachments
Extract a line from the intersection of two faces.
Closes#6870
* fixup! Use Handle macro
For some reason I don't fully understand yet the CI was failing, let's
see if this fixes the compilation errors.
* fixup! Add missing(?) header
Well, it compiles just fine on my system...
* fixup! Be more specific in error messages
Fixes the problem where View_FitAll would compute a huge bounding box
when the infinite grid is enabled.
Closes#11570
Co-authored-by: wwmayer <werner.wm.mayer@gmx.de>
This commit releases the Global Interpreter Lock around mesher call and
should enable multithreading use when exporting large quantities of
objects (for instance for external rendering).
* updated ts files
* merged crowdin translations
* [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>
When copying&pasting an ImagePlane whose ImageFile property is a
PropertyFile we'd get two updateData notifications, one when the
property value is restored (which doesn't do much as the file doesn't
exist yet) and another when the RestoreDocFile method is invoked.
The solution is simple, do not set Xsize and Ysize when importing the
object as we expect the properties to already have the correct values.
Closes#11036
* removed unused code
* [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>
Remove the selection checkbox preference from Display->UI.
The same preference exists under General->Selection.
When changing the preference and then applying the settings, it reverts
back to the value under General->Selection and thus is not usable.
This is a small harmless visual improvement of the LCS representation in the 3D window: it leaves a small empty gap at the origin of the LCS which allows to select the point/vertex on which the LCS is attached
Fix condaBasePath when useBundled is false, and there's no pre-existing conda
..other fix and improvements
Update sub_buildMacOSCondaIntel.yml
Revert
updated action checkout to version 4
updated setup-miniconda to version 3
Finds the bounding sphere when the editing view provider is set. This ensures the right bounding sphere is used for finding the near and far clipping plane
The following commits were squashed into this
[Sketcher] Handle some corner cases in AngleViaPoint
[Sketcher] Avoid redundant constraints with B-splines...
When involving tangent, perpendicular and angle constraints.
[Sketcher] Add pre-commit changes
[Sketcher] Do not allow 2-selection tangent with B-spline
Also...
[Sketcher] Report error when using direct tangency with B-splines
[Sketcher] Fix malformed constraint when B-spline is selected second
To clarify, this means the second curve selected. The position of the point in
selection order does not matter in angle-via-point.
[Sketcher] Fix wrong number for B-Spline tangent on redundancy
[Sketcher] Remove existing point-on-object in some redundant cases
Particularly when point constrained on a B-spline is being used for
tangent, perpendicular or angle via point with the same B-spline.
[Sketcher] Fix direction issue with B-spline tangents.
Without these changes the solver might try to "twist" the B-spline to make the
angle between curves be 0 instead of PI (which may be closer to the initial shape).
* Renamed enum classes members to lowercaseCapword
* Moved struct ShapeHasher back to TopoShapeMapper.h
* Added test for MapperMaker::generated
* Modifications for clang-tidy warnings
* Formatting
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Added test for MapperMaker::generated
* Renamed spit into splitMkr in the test for MapperMaker::modified
* Disabled test for TopoShape::makeElementWires
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Fixes#11873 this was the primary goal of these changes
Fixes (partially) #11874 the parts of a polyline are combined as a
compound object (shape) but it would be preferable for them to be made
into a wire (if possible)
Fixes#11872 Objects in a block definition are now kept separately
until the block is inserted, in which case the inserted objects are
subject to all the other options regarding combining.
Fixes (partially, review required) #11871 Text and dimensions are now
kept as part of the block definition and are placed in the drawing when
the block is inserted but this code has not been extensively tested.
Affects #11875, custom types are not made, but the labels now reflect
the object types rather than all being "Shapennn"
This leaves the importer options handling in a bit of a mess that needs
cleanup eventually, but this can be a new issue.
This includes some importer flags that have no corresponding options
(e.g. import frozen layers), some flags not yet implemented, some
flags not yet even declared in the code because their implementation
is further off (import hatch outlines), and some suggested future
options (import SOLIDs as faces)
Centralize the calculation of the OCS for entities as they're read
from the DXF. Most of the entities don't use this yet, but some of
them roll their own crude Normal Vector handling. Because the new
code takes priority over the old for reading the normal vector, such
code will always see (0, 0, 1) as the extrusion direction.
Improves compatibility when using the legacy editor.
Corrects a number of issues that prevented saved files from being displayed when using the legacy editor.
Reduces the verbosity of console messages.
Some error messages would only work if objects were supplied as strings. These would fail if objects were passed (as objects) that had already been deleted.
The Draft_Wire command can combine selected Draft_Wires and Draft_Lines into a single wire. This function did not always behave properly.
* Edges were not sorted, the result could have a different shape (with the correct vertexes).
* If edges formed a closed shape the resultant wire was not closed.
These messages were perhaps originally intended as a debuggin aid but now add clutter to the output panes. Remaining messges are mostly the result of methods to display attributes of an object (which one could call from the Python console) or actually provide some information which would not be obvious from the circumstances
* Added test for Tag Info generated by makeShapeWithElementMap
* Make sure that there's at least one mapped element before checking the element map
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Tests for makeShapeWithElementMap
* Added nullShapesThrows tests for the classes derived from <TopoDS_Shape>
* Added test passing as "sources" parameter of the tested method an empty vector of TopoShapes objects
* Added test with unmappable sources
* Added test to find shapes inside other shapes made from the first ones
* Tests for makeShapeWithElementMap with simple shapes
* Added test to find source shapes' sub-shapes name in the elements maps
* Added test to find the "MAK" OpCode in the elements maps names
---------
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Called TopoShape::makESHAPE in the original Toponaming branch. The code here has been modified as little as possible to get it to compile in current main.
* Tweak resetElementMap tp default to empty defined element map
* [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>
The current make_layer function has a `None` default for the shape color and the line color. With that value the current preference is used. This, and how the function is called, results in some confusing behaviors:
* Newly created layers will only use 2 values from the preferences when they might use 5. The latter makes more sense for the end-user IMO.
* Layers created during DXF import (for example) will have a different shape color depending on the current preferences.
* The make_layer function may reapply colors that have already been set by the view provider.
To solve this all view property related function parameter have been changed to a not None value. If a None value is supplied the view property as set by the view provider is not changed. The Layer Manager has been updated accordingly.
I realize that calling a function with 6 None values is not very convenient, but think it is the solution that is least likely to break other exiting code.
Additionally:
* Removed the makeLayer function. Layers were introduced in V0.19 when the naming scheme was changed to "make_*". Maybe it was created by mistake, or before the actual renaming operation started, but it is safe to remove it now.
* Removed overly verbose messages.
* gui_layers.py had a missing import (result of a previous V0.22 PR): `from draftutils import utils`.
* Preferences: modernize for loop in DlgSettingsEditor.cpp
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Preferences: modernize for loop in DlgSettingsEditor.cpp
added textType and textColor variables to unpack range-for loops iterators
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Update src/Gui/PreferencePages/DlgSettingsEditor.cpp
Minor linter updates, as suggested
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* Update src/Gui/PreferencePages/DlgSettingsEditor.cpp
Minor linter updates, as suggested
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
---------
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
In order to make getNameInDocument() always return a valid string,
we implement a getDagKey() method that shall be used instead of getNameInDocument()
when we want to use the pointer value as a "key" to identify the DocumentObject.
This creates new method overload for changing layer of exact
ElementItem. This fixes strange behavior of the checkboxes for elements
that were dependent not on what user clicked but on what is selected.
Fixes: #8814
This commit like previous one introduces ability to style list of
elements in the sketcher. It also completely refactors the rendering
delegate introducing dedicated method for calculating rects of each
element and method for rendering each sub control. Thanks to this
refactor we can be sure that areas drawn are the same as areas checked
for events in editorEvent.
This adds reference to the actual widget to the painting of Constraints
List control of Sketcher. Thanks to this this list can now be styled
using standard mechanisms of Qt framework like QSS.
This ensures that checkboxes drawn in the Elements UI of the sketcher
can be styled using the correct style.
Three changes are introduced:
1. paint() method uses style provided by the widget, not application.
2. Indicator is drawn using PE_IndicatorCheckBox not CE_CheckBox - it
allows to use ::indicator in qss to style it properly. This works the
same as TreeView.
3. Fix for minor issues with text alignement and extension of selected items
background to cover checkbox. This is how other controls of this kind
work.
* Restores Arch_Axis bubbles in a TechDraw_ArchView. This fixes a regression in V0.21 and 0.22, I suspect an unwanted side-effect of a previous PR of mine (#8688).
* Also fixes the linetype of axes and other annotation objects in a TechDraw_ArchView.
This fixes problem with scroll jumping after selecting page on bottom of
the pages tree view. It was caused by collapsing group of the current
item and then re-expanding it few lines after.
Fixes: #12000
Follow-up PR of #11940.
* The new ui layout follows that of the Draft preferences.
* The ConversionFast checkbox enables/disables the 3 preferences listed below it.
* The WindowColor preference was removed. It is not a per-object, or even a per-file setting. The fix in #11940 would change windows in existing projects when they are recomputed. It is therefore better to keep the V0.21 solution where the glass is colored according to the preferences and the rest of the window receives a color based on its ShapeColor. Users who want to apply specific colors can use a multi-material.
Additionally 2 Arch_Window bugs were fixed:
* If the W1 value was changed the box tracker was not repositioned relative to the cursor.
* The WindowColor was not applied because of a typo in the code. De current default color is quite dark BTW.
Note that all dimensional values that were not really defaults, but just the last entered values, have been removed from preferences-archdefaults.ui. As a result the layout looks a bit strange. That will be improved in a next PR.
In a previous PR of mine I have reorganized some lines of code in DraftGui.py without realizing that this would reposition checkboxes. This PR fixes that.
This verifies the existing functionality, but does not alter it. Two tests are disabled because they represent cases that the current code does not handle correctly. They are edge cases that are not expected in real code.
This is the original code from the Toponaming branch, modified slightly to update the
method name and correct some grammatical errors in the descriptive comment.
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Renamed to makeElementCompound and modified as little as possible to get it to compile in the new framework. All required auxilliary methods are also brought in.
updated to JSON version 3.11.3
Add missing <numeric> header include. #3717#3718#3719
Replace uses of INT_MIN/INT_MAX, etc. with
std::numeric_limits and consistently use std-namespaced integer types to make library work with newer GCC versions. #3722#3723
Add missing files (json_fwd.hpp and Bazel build files) to release artifact include.zip. #3727#3728
Fix 'declaration hides global declaration' warning. #3751
Fix natvis XML. #3858#3863
Fix warning about moved from object. #3805#3889
Remove a magic number to fix a warning. #3837#3888
Fix debug pretty-printer by checking if match is valid before accessing group. #3919#3920
Fix custom allocators by defining missing rebind type. #3895#3927
Prevent memory leak when exception is thrown in adl_serializer::to_json #3881#3901
Fix Clang-Tidy warnings. #4047
Fix init-list construction when size_type is not int. #4140
Fix deprecation warning "identifier _json preceded by whitespace in a literal operator declaration". #4129#4161
Fix compile error with _HAS_STATIC_RTTI=0. #4046
Fix char_traits deprecation warning "char_traits<unsigned char> is deprecated: char_traits<T> for T not equal to char, wchar_t, char8_t, char16_t or char32_t is non-standard". #4163#4179
As every page is contained in the same QScrollArea we must ensure that
after page is changed the scrolled area is scrolled back to top-left
corner.
Fixes: #11981
Issue 8064 occurs when FreeCAD passes a Voronoi diagram to
Boost that becomes self-intersecting when Boost truncates the
diagram's coordinates to integers. This occurs when the discretizer
slightly misses closing the polygon generated for the letter by less
that FreeCAD's epsilon, then the wrapping Python code closes the
polygon by adding the initial polygon point as the final point.
This creates a short segment that, depending on the position of
the letter in the coordinate system, may end up being moved one
Boost coordinate delta away from the intended point, which can
end up self-intersecting.
Since the miss is very small, FreeCAD should treat it as it it
were the initial point. There's no need for a duplicate copy of
the initial point, so we remove this point close to the initial
point and let insert_many_wires() close the polygon as usual.
In realthunder's original version this class was not derived from TopoDS_Shape, but rather duplicated
its interface and wrapped its non-const methods. This resulted in quite a lot of boilerplate, so in
the merged implementation we are now deriving from TopoDS_Shape and only overriding the non-const
methods. The downside is that if OCCT adds or changes methods we will have to add them proactively
to this class so that they don't bypass the TNP code.
The function would trigger the creation of duplicate Draft Polar Arrays (only on Linux and only if the Fuse option is selected and the Link Array option deselected).
Forum topic:
https://forum.freecad.org/viewtopic.php?t=84090
The reapply_diffuse_color function is no longer required anyway as Issue #8340 has been fixed.
Eliminate m_measurement_inch to clean up logic for priority of MEASUREMENT and INSUNITS.
Save the actual scaling factor rather than the scaling enum so a switch statement is not executed for each call to mm()
Add to CDxfRead the work to handle dxfScaling option, ImpExpDxfRead just has to set it up now.
Get the scaling factor from a lookup table rather than a switch statement
Display a message explaining what the scaling factor is and where it comes from
Remove large amount of Lint.
* Update CI_cleanup.yml
The release of upload-artifact@v4 and download-artifact@v4 are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.
* Update sub_buildMacOSCondaApple.yml
update artifact to v4
Update sub_buildMacOSCondaIntel.yml
updated artifact to v4
Update sub_buildUbuntu2004.yml
updated artifact to v4
Update sub_buildUbuntu2204Conda.yml
updated artifact to v4
Update sub_buildWindows.yml
updated artifact to v4
Update sub_buildWindowsConda.yml
Update sub_lint.yml
updated artifact to v4
Update sub_wrapup.yml
update artifact to v4
Update sub_prepare.yml
updated artifact to v4
* Update CI_cleanup.yml
The release of upload-artifact@v4 and download-artifact@v4 are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.
Update sub_buildMacOSCondaApple.yml
update artifact to v4
Update sub_buildMacOSCondaIntel.yml
updated artifact to v4
Update sub_buildUbuntu2004.yml
updated artifact to v4
Update sub_buildUbuntu2204Conda.yml
updated artifact to v4
Update sub_buildWindows.yml
updated artifact to v4
Update sub_buildWindowsConda.yml
Update sub_lint.yml
updated artifact to v4
Update sub_wrapup.yml
update artifact to v4
Update sub_prepare.yml
updated artifact to v4
* Cleanup and switch to using MakePipe
* Cleanup unused include
* Use Frenet mode in building pipe
* Restore original code, add a control property
* Hide property, and init on new objects
* Restore prior behavior for legacy objects
* Clean up git blame; add missing move to keep helix same with new makePipe call
* Remove debug include
* Use doxygen syntax for deprecation comment
* Add unit tests; restore code for angled helixes; optimize zero angle helixes
* Lower test precision to accept platform variations
* Loosen more
* Correct restoration
* Tweak test volumes to match restored helix creation
* Restore helix generation parameter
* Fix test; delint
This PR makes the selection of the cutting object more flexible. It can be a face, an edge or an object with a single subelement of that type. Any planar object can also be selected. This PR makes the Arch_CutLine command superfluous. It was therefore removed.
Fixes a problem introduced with a previous PR of mine (#7591). Hosts would only be touched if that property of the window was modified. But the hosts of a window should also update if other properties of the window change.
Additionally a width or height change of a window now touches the hosts on the subsequent shape change.
switch to python 3.9
updated upload-artifact to v4
updated actions-checkout to v4
Update sub_buildWindows.yml
Update CI_cleanup.yml
The release of upload-artifact@v4 and download-artifact@v4 are major changes to the backend architecture of Artifacts. They have numerous performance and behavioral improvements.
Update sub_buildMacOSCondaApple.yml
update artifact to v4
Update sub_buildMacOSCondaIntel.yml
updated artifact to v4
Update sub_buildUbuntu2004.yml
updated artifact to v4
Update sub_buildUbuntu2204Conda.yml
updated artifact to v4
Update sub_buildWindows.yml
updated artifact to v4
Update sub_buildWindowsConda.yml
Update sub_lint.yml
updated artifact to v4
Update sub_wrapup.yml
update artifact to v4
Update sub_prepare.yml
updated artifact to v4
* Initial tests for Chamfer, Fillet, Compound
* Lint cleanup, new tests
* Outline of Extrusion and Revolution
* Use python to define a 2d object to extrude and test
* Refactor; start filling in revolution tests
* Example of parameterized tests in Extrusion, cleanups
* Use gtest framework for parameterised tests
* Rearrange for clarity
* WIP with TEST_P use for posterity
* Switch from parameters to individual tests
* Guess at test failures on other platforms
* Cleanups and Revolution Tests
* Remove temp code
* Switch Revolutions to boundbox test; add Compound subshape count test
* Calculate test volume correctly; lint fixes
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* Possible fix for 10482 circular reference regression with tests
* Remove redundant test
* Cleanup pre PR
* [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>
Continues the work of the material subsystem improvements.
Add support for embedded SVG files. These are not the same
as image files so need to be handled differently.
Add the ability to filter materials in the editor when called from
code. This allows programs to select objects supporting specific
models, complete models, older models, etc.
Updated tests, and refactored code.
New models and materials supporting patterns such as used by the
TechDraw workbench.
fixes#11686 - checks for the presense of a model property before
assinging a value. This can happen when a required model definition is
not available.
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* Adding version check
* Add compat component for Qt6
* Remove too many qts
* Fix include path
---------
Co-authored-by: David Lanzendörfer <leviathan@libresilicon.com>
* Update translations
* [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>
Part/Toponaming: Move implementions to cpp file
Part/Toponaming: Automated code cleanup
Part/Toponaming: Address boolean blindess with HistoryTraceType
Part/Toponaming: More linter cleanup
Part/Toponaming: Add located and moved methods
Part/Toponaming: Moved and Located
Part/Toponaming: Add missing methods
Part/Toponaming: Add test framework for TopoShapeCache
Part/Toponaming: Add documentation provided by realthunder
Part/Toponaming: Extend tests for TopoShapeCache
Part/Toponaming: Rename getInfo to getAncestry
Part/Toponaming: Fix bug with newer OCCT
Part/Toponaming: Add final tests and tweak naming
Part/Toponaming: Address reviewer comments
* adjust cursor icons to match toolbar icons
* adjusting fillet cursor icon
* correct fillet icon
* updated other icons to be in line with toolbar icon
* oblong fixes
* Discord feedback adjusted
* added arc slot cursor icon
* Update of arc cursor icons. Added ellipse variants
* update line. added polygon variations. added bspline options.
* updated other icons to be in line
* changed line icons
* discord feedback implemented
* Updated to implement new icons
* sketcher: change carbon copy and external cursor icons to match toolbar icons
* added copy icon for XPM hardcoded
* added new copy pointer icon to resources
* Update to support multiple cursor icons per tool mode for spline, ellipse, fillet, rectangle.
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* adjusted icon and if statements
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* delete unnecessary icons
---------
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Affect strings presented to the user on the combobox to select unit system.
- The symbol to represent angles on "degree" unit is '°'
- Change imperial velocity to "ft/s" to enforce the use of 's' symnbol as second
This is fix to issue mentioned in the #11717, on discord and forum that
for smart dimension tool the chosen tool should not be remembered. This
will ensure that the "smart" tool is always visible on the toolbar and
other tools are accessible in case that such explicit choice is needed.
4.5.0 - 2023-10-07
Features
requirements-txt-fixer: also sort constraints.txt by default.
#857 PR by @lev-blit.
#830 issue by @PLPeeters.
debug-statements: add bpdb debugger.
#942 PR by @mwip.
#941 issue by @mwip.
Fixes
file-contents-sorter: fix sorting an empty file.
#944 PR by @RoelAdriaans.
#935 issue by @paduszyk.
double-quote-string-fixer: don't rewrite inside f-strings in 3.12+.
#973 PR by @asottile.
#971 issue by @XuehaiPan.
Migrating
now requires python >= 3.8.
#926 PR by @asottile.
#927 PR by @asottile.
4.4.0 - 2022-11-23
Features
forbid-submodules: new hook which outright bans submodules.
#815 PR by @asottile.
#707 issue by @ChiefGokhlayeh.
4.3.0 - 2022-06-07
Features
check-executables-have-shebangs: use git config core.fileMode to determine if it should query git.
#730 PR by @Kurt-von-Laven.
name-tests-test: add --pytest-test-first test convention.
#779 PR by @asottile.
Fixes
check-shebang-scripts-are-executable: update windows instructions.
#774 PR by @mdeweerd.
#770 issue by @mdeweerd.
check-toml: use stdlib tomllib when available.
#771 PR by @DanielNoord.
#755 issue by @sognetic.
check-added-large-files: don't run on non-file stages.
#778 PR by @asottile.
#777 issue by @skyj.
4.2.0 - 2022-04-06
Features
name-tests-test: updated display text.
#713 PR by @asottile.
check-docstring-first: make output more parsable.
#748 PR by @asottile.
check-merge-conflict: make output more parsable.
#748 PR by @asottile.
debug-statements: make output more parsable.
#748 PR by @asottile.
Fixes
check-merge-conflict: fix detection of ====== conflict marker on windows.
#748 PR by @asottile.
Updating
Drop python<3.7.
#719 PR by @asottile.
Changed default branch from master to main.
#744 PR by @asottile.
4.1.0 - 2021-12-22
Features
debug-statements: add pdbr debugger.
#614 PR by @cansarigol.
detect-private-key: add detection for additional key types.
#658 PR by @ljmf00.
check-executables-have-shebangs: improve messaging on windows.
#689 PR by @pujitm.
#686 issue by @jmerdich.
check-added-large-files: support --enforce-all with git-lfs.
#674 PR by @amartani.
#560 issue by @jeremy-coulon.
Fixes
check-case-conflict: improve performance.
#626 PR by @guykisel.
#625 issue by @guykisel.
forbid-new-submodules: fix false-negatives for pre-push.
#619 PR by @m-khvoinitsky.
#609 issue by @m-khvoinitsky.
check-merge-conflict: fix execution in git worktrees.
#662 PR by @errsyn.
#638 issue by @daschuer.
Misc.
Normalize case of hook names and descriptions.
#671 PR by @dennisroche.
#673 PR by @revolter.
4.0.1 - 2021-05-16
Fixes
check-shebang-scripts-are-executable fix entry point.
#602 issue by @Person-93.
#603 PR by @scop.
4.0.0 - 2021-05-14
Features
check-json: report duplicate keys.
#558 PR by @AdityaKhursale.
#554 issue by @adamchainz.
no-commit-to-branch: add main to default blocked branches.
#565 PR by @ndevenish.
check-case-conflict: check conflicts in directory names as well.
#575 PR by @slsyy.
#70 issue by @andyjack.
check-vcs-permalinks: forbid other branch names.
#582 PR by @jack1142.
#581 issue by @jack1142.
check-shebang-scripts-are-executable: new hook which ensures shebang'd scripts are executable.
#545 PR by @scop.
Fixes
check-executables-have-shebangs: Short circuit shebang lookup on windows.
#544 PR by @scop.
requirements-txt-fixer: Fix comments which have indentation
#549 PR by @greshilov.
#548 issue by @greshilov.
pretty-format-json: write to stdout using UTF-8 encoding.
#571 PR by @jack1142.
#570 issue by @jack1142.
Use more inclusive language.
#599 PR by @asottile.
Breaking changes
Remove deprecated hooks: flake8, pyflakes, autopep8-wrapper.
#597 PR by @asottile.
* Stress components in linearization
* [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>
Colors as assigned to imported drawing entities if they are not merged
with other entities.
The code has been refactored to remove much duplication in reading of
attributes.
The code gives brief messages on the Python console about unsupported
DXF festures and also issues some new errors.
There is no support yet for making colors 1-9 and 250-255 contrast with
the creeen background color. Colors are generated by code rather than a
lookup table; this code can eventually modify the colors it generates to
contrast with a specific background color.
* ViewProviderAnnotationn: Always allow dragging
Removes the editmode
* ViewProviderAnnotation: Use the label as transformation handle
* ViewProviderAnnotationn: Always allow dragging
Removes the editmode
* ViewProviderAnnotation: Use the label as transformation handle
* ViewProviderAnnotation: Hide dragger feedback during translation
---------
Co-authored-by: WandererFan <WandererFan@gmail.com>
This patch substitutes by isAttachedToDocument() (almost) everywhere where
getNameInDocument() is used for this purpose.
The very few places not touched by this patch demand a (just a little) less trivial change.
When we change the returning type of getNameInDocument() to std::string,
those places will be easily found, because they shall generate a compiler error
(converting std::string to bool).
Rationale:
The fact that getNameInDocument() return nullptr to indicate
that the object is not attached to a document is responsible for lots of bugs
where the developer does not check for "nullptr".
The idea is to eliminate all those uses of getNameInDocument() and, in the near future,
make getNameInDocument() return always a valid std::string.
This PR introduces a new get_param function. For its default values it checks a dictionary largely filled by reading the preferences UI files. The goal is to have all defaults in one place to avoid inconsistencies. The dictionary is created once and then stored in a global variable.
Once merged this function will be implemented in Draft and Arch. The get_param function in utils.py will become obsolete.
Related issue: #10176
=========================================================
issue #11183
Feature request.
Instead of repeating over and over again the same message, indicate the number of consecutive repetitions in a single message.
=====================================================================
Issue #11183
- The message is not useful for the user in terms of content.
- The user can do nothing about it, but move on.
Continues the work of the material subsystem improvements.
This merge covers the continued development of the material editor. The
primary improvements are the addition of new data types, a new
appearance preview UI, and changes in the array data types.
New data types were added to support more advanced workflows, such as
the Render Workbench.The Image datatype allows the material to embed
the image in the card instead of pointing to an image in an external
file. Multi-buyte strings span multiple lines as the name implies.
It preserves formatting accross those lines. Also several list types
are now supported, with the primary difference being the editors.
List is a list of strings, FileList is a list of file path names, and
ImageList is a list of embedded images.
For the appearance preview, the UI now uses the same Coin library as
is used in the documents, meaning the preview will look exactly the
same as the material will be shown in the documents.
The array data types are now more complete. The default value wasn't
being used as originially envisioned and was tehrefore removed. For
3D arrays, the Python API was implemented.
There were a lot of code clean ups. This involved removing logging
statements used for debugging during development, reduction of lint
warnings, and code refactoring.
The editor can automatically convert from previous format files to the
current format. This has been extended to material files generated by
the Render WB. Old format files are displayed in the editor with a
warning icon. Selecting one will require saving the file in the new
format before it can be used.
* Add unit system to Project Information and store with document.
* Remove the project unit system
* Restore correct document activation signalling to fix test fail
* Remove commented out dead lines
* Restore ignore option for project unit schemas
* Whitespace fix
* Refresh after changing units
* Remove field label
* Property editor changes applied to unit system
* remove unecessary casts
clean unused code
revert example py code
* [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>
* Gui: Create group box for animation preferences
* Gui: Add spinning animation checkbox
* Gui: Implement isAnimating() for NavigationAnimator
* Gui: No need to enable animations in DemoMode
The spin animation is played regardless of the user preference and does not need to be enabled before starting the spin animation
* Gui: Change comment
The command now applies all style properties from `utils.get_default_annotation_style()` and `utils.get_default_shape_style()`.
Additionally: minor improvements to gui_setstyle.py.
* Added handling of DefaultShapeVertexColor, DefaultShapePointSize, DefaultAnnoLineColor and DefaultAnnoLineWidth preferences.
* Rearranged the task panel.
Additionally the DefaultDrawStyle and DefaultDisplayMode preferences are now applied by format_object in gui_utils.py.
* Removed DefaultAnnoDisplayMode. This will become a fine-tuning preference.
* Removed HatchPatternResolution as it was not used.
* Added DefaultAnnoLineColor and DefaultAnnoLineWidth. These will be implemented in other parts of the Draft code in later PRs.
* Correct precision issue in PartDesign::AdditiveHelix
* Simplify getting the end wires
* Remove extraneous loop per @FlachyJoe
* Switch to using mkPS.Shape per @FlachyJoe
* Incorporate guarded efficiency improvement
* Removed DefaultAnnoDisplayMode. This will become a fine-tuning preference.
* Removed HatchPatternResolution as it was not used.
* Added DefaultAnnoLineColor and DefaultAnnoLineWidth. These will be implemented in other parts of the Draft code in later PRs.
* Removed DefaultAnnoDisplayMode. This will become a fine-tuning preference.
* Removed HatchPatternResolution as it was not used.
* Added DefaultAnnoLineColor and DefaultAnnoLineWidth. These will be implemented in other parts of the Draft code in later PRs.
* Updated ts files
* merged crowdin translations
* [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>
* ViewProvider::canDragAndDropObject should only return true if an extension handles drag and drop
Currently it returns true if no extension is available
* ViewProvider::dropObject shouldn't throw an exception if no extension handles drag and drop
As an example consider https://forum.freecad.org/viewtopic.php?t=82957
When selecting two objects then ViewProvider::dropObject is called twice. But for the first call both objects are moved to the destination
and for the second call no extension handles drag and drop any more. This incorrectly leads to a thrown exception.
* DisplayMode controlled by new pref DefaultAnnoDisplayMode. This replaces the old dimstyle pref.
* LineSpacing pref is now used when creating annotations. Will be added to prefs ui later.
* format_object no longer changes FontSize as this conflicted with the height parameter in the make_text function.
* make_text function updated.
This commit ensures that after selecting item the group is automatically
expanded. User can force expansion by explcitly clicking expand button,
groups expanded that way will stay expanded unless user collapses them.
Otherwise non-active group will be collapsed automatically.
This adds QScrollArea widget to DlgPreferences which in turn allows
preference pages to be scrollable. Stacked widget sizes are forced to
selected widget so scroll area should appear when it is needed.
Fixes#11511
This PR replaces the showSnapBar and hideSnapBar preferences with a single new preference: SnapBarShowOnlyDuringCommands.
Additonally:
Improved some param observer callbacks.
Additionally:
* Added the DimShowLine preference. Layout of the tab will be updated later.
* Improved handling of DraftAnnotationScale preference: catch division by zero and use it for the default anno style.
Continues the work of the material subsystem improvements.
Several important items are included in this merge. In terms of new
capabilities, this merge adds List and MultiLineString as valid
property types, complete with editing dialogs. This will help with
backwards compatibility for external workbenches, such as Render.
Stability has been a big focus. New unit tests help to verify features
work as expected. Bugs have been fixed and crashes avoided.
Material cards have had a renaming to their tree structure. For
example, 'StandardMeterials' is redundant, so this was renamed to
'Standard'. The cards themselves are more compliant fully passing the
yamllint tests.
More soon.
Rather than generating Python code and interpreting it, which, in C++, is fraught with issues of creating the correct syntax for a str token when the text contains certain special characters like double-quote and backslash, the modified code makes call(s) to PyObject_CallObject which takes the C++ string and makes the appropriate conversion itself. The steps in building the Position passed to make_text are also done using c++ objects until the final Python Placement object is needed.
* project to document on information, merge, util
* change project to document in unit system dialog
---------
Co-authored-by: WandererFan <WandererFan@gmail.com>
With this PR the following 5 command modes are automatically stored in the preferences:
"ContinueMode"
"RelativeMode"
"GlobalMode"
"fillmode" (existing preference, removed from the Preferences Editor)
"SubelementMode"
Additionally:
Three commands (Draft_Ellipse, Draft_Rectangle and Draft_Stretch) call `setRelative` after the 1st point has been specified and would permanently switch on relativeMode. After this PR this switch is temporarily.
With this PR the following 5 command modes are automatically stored in the preferences:
* "ContinueMode"
* "RelativeMode"
* "GlobalMode"
* "fillmode" (existing preference, removed from the Preferences Editor)
* "SubelementMode"
Additionally:
Three commands (Draft_Ellipse, Draft_Rectangle and Draft_Stretch) call `setRelative` after the 1st point has been specified and would permanently switch on relativeMode. After this PR this switch is temporary.
If the QLineEdit is disabled the current color group of the cached QPalette is set to 'Inactive'. Now when enabling the QLineEdit the wrong palette is set and the text looks like it's inactive.
==============================================
Problem:
When the value set is a double, a new Quantity is created, which does not follow
the previously configured format (setDecimals).
Solution:
To copy the old format to the newly created quantity.
This PR removes the copymode (Global copy mode) preference.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=82679
Additionally useSupport is removed from preferences-draft.ui, turning it into a fine-tuning preference. Use of this feature is rare and may not be supported in the future. No need to present this preference to new users in the UI.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=80689
* Move MultiUser install mode default registry key to the uninstaller registry entry
Lets the uninstaller detect the correct context for each installed version. related to #10971
* Fix uninstaller doesn't use correct shell context when installed for current user
related to #10971
* Update installer init checks for previously installed versions
Use shell context determined by the MultiUser plugin. related to #10971
* fix: Perform installer version checks after install mode selection
Perform installer version checks after install mode selection to ensure that they are done for the correct reg root key. Fixes#10971.
* Call version check method also in silent mode
* Add TrimQuotes macro to installer utilities
Also remove FileCheck macro
* Update comment in gui.nsh
* Change Windows installer/uninstaller FileDescription entry
related to #11232
These options correspond to "up to face" and "2 angles". They are expected to do
nothing right now. However there is also some experimental code for "up to face"
in this commit, whose behavior is not confirmed.
The tolerance function now derives its value from the precision preference.
Additonally:
Removed the epsilon() function. It did not make sense and was not used.
=========================================
Console error, warnings, ... allow for a notifiername. This appears separately in the notification area. However, the report view ignores it.
This commit prepends the notifier string separated by a semicolon, if not empty.
It solves the problem that, if the message did not include the notifier, this was not indicated in the Report View.
If the message included the notifier, then it was duplicated in the notification area.
=======================================================================
Previous version return an reference to the smart pointer to generic Part::Geometry.
This version returns a type specific naked pointer, while ShapeGeometry keeps ownership
and memory management, so if an arc is created a Part::ArcOfCircle is returned.
================================================================
In some DSHs instead of the convenience function, the code is being duplicated because
of the need to access the geometry after pushing it to the std::vector.
This commit leverages emplace_back return reference to improve code reuse.
This PR improves the behavior of the Draft grid:
* Options in the preferences: "Always show the grid" and "Show the grid during commands".
* The parameters are used for new views. In existing views the grid can be toggled either during a command or when no command is active.
* When switching to a different workbench all grids are hidden unless GridHideInOtherWorkbenches is set to `False`. This can be a Fine-tuning parameter IMO.
Notes:
* The defaultCameraHeight parameter becomes obsolete. It was only used in very specific circumstances.
* The code of PR #8818 becomes obsolete. It makes more sense to use `App.activeDraftCommand` instead of adding a `tool` argument to some functions. Will do some related cleanup later.
* Improved alignment for the related preference ui. The checkbox interaction has been fixed as well.
=================================================================
Instead of terminating the handler, as mandated before this PR by ViewProviderSketch, ViewProviderSketch
delegates the action to DrawSketchHandler.
DrawSketchHandler implements by default this terminating behaviour, but allows to override it.
DrawSketchDefaultHandler (and all tools deriving from it) implement as default behaviour to cancel if
in initial state, otherwise to reset.
===========================================================
Instead of terminating the handler, as mandated before this PR by ViewProviderSketch, ViewProviderSketch
delegates the action to DrawSketchHandler.
DrawSketchHandler implements by default this terminating behaviour, but allows to override it.
DrawSketchDefaultHandler (and all tools deriving from it) implement as default behaviour to cancel if
in initial state, otherwise to reset.
* Revert cleanplanegcs: removed unused code, removed redefinition of pi
* Sketcher: Switch pi refs to double and constexpr
* Modify code to use the new pi constant immediately
---------
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
Related issue:
#5603.
The view observer starts/stops when the Draft workbench is activated/deactivated.
Additionally:
* Minor improvements to _update_grid and _update_gui.
In some DSH some mode (seekSecond for example) don't have onViewParameter. In this case it would wrongly try to give focus to the previous spinbox with focus.
* unused parameter 'parent' [-Wunused-parameter]
* reference cannot be bound to dereferenced null pointer in well-defined C++ code; comparison may be assumed to always evaluate to false [-Wtautological-undefined-compare]
And it looks like that QMetaType::type("Base::Quantity") neither works with Qt5 nor with Qt6 because it returns 0 as id that means the type is unknown.
=====================================================
Enforce strong typing to avoid all kinds of abusive implicit conversionsm, the corresponding associated bugs and make code more readable.
=======================================
Rewrite of the architecture to accomodate on-view parameters and to enable code reuse
between the default widget and custom widgets.
G91 incremental coordinates
--relative (Disabled by default)
Specific comment character
--comments-character (None by default)
Specific space character, use "" to ommit spaces
--command-space (" " by default)
Add character before newline
--endline-character (None by default)
Multiplier for machines that use not standard dimensions like micrometers (1000)
--scale (1 by default)
Define decimal points
--precision (3 for mm, for inch by default)
Add trailing 0s
--fixed-length (0 (disabled) by default)
G0 rapid moves disabled by default, replaced with G1
--use-rapids (Set flag to enable G0)
Disable setting units on output code G20/21
--omit-units (Set flag to avoid setting units)
Force two digit codes G01 insted of G1
--two-digit-codes (Set flag to enable)
Add + sign to positive coordinates
--force-sign (Set flag to enable)
Ignore unsuported operations, use Labels and separate with ','
--ignore-operations (Empty by default)
Related issue:
#5603.
For gui_snapper.py and gui_trackers.py an intermediate solution has been adopted. They still rely on App.DraftWorkingPlane, but now use a small function to retreive it.
Simply switching to the PlaneGui class is problematic for the trackers as this results in an endless recursion (wp->grid->wp->...). Using the old App.DraftWorkingPlane (which is kept up-to-date by PlaneGui) solves this for now. I will try to return to this later (which may be after the next release though).
* Avoid adding '
' to the output
* Sort attributes of PythonExport element
* Remove trailing whitespaces from UserDocu text and replace tabs with 4 spaces
- Animations are played through an Animator
- Standard animations have a fixed duration and inherit from QVariantAnimation
- The animation duration can be changed in the preferences
- Fix animations when using the two arrows above the NaviCube
- Start an animation or start and wait for an animation
- Replaces standard camera animations (e.g. by selecting standard views or NaviCube) with FixedTimeAnimation
- Replace View3DInventorViewer's CameraAnimation with FixedTimeAnimation
- Replace OpenInventor navigation style infinite spin animation with SpinningAnimation
- Stops an active animation when a new animation is started
- Stops an active animation when the user starts dragging, panning or zooming
- Refactor reorientCamera so it can be used in animations
- Enable animations by default
Continues the work of the material subsystem improvements.
This merge covers the continued development of the material editor. The
primary improvements are in the handling of 2D and 3D array properties.
These properties are now fully editable, and can be saved and restored.
The cards now separate the author and license. These were previously
saved as a single item. Future support will be provided for standard
open source licenses.
Saving operations validate the cards to ensure UUIDs of materials are
considered. Warnings are given when a save could potentially impact the
models, such as saving over a material instead of creating a new
instance.
The editor is still not complete. There are a number of functional
elements, such as drag/drop operations, folder creation, and deletion
operations that need to be added to the main tree. State needs to be
saved and restored to improve the user experience. The appearance
preview also needs significant work. This will be handled in a future
PR.
Continues the work of the material subsystem improvements.
This merge covers the continued development of the material editor. The
primary improvements are in the handling of 2D and 3D array properties.
These properties are now fully editable, and can be saved and restored.
The cards now separate the author and license. These were previously
saved as a single item. Future support will be provided for standard
open source licenses.
Saving operations validate the cards to ensure UUIDs of materials are
considered. Warnings are given when a save could potentially impact the
models, such as saving over a material instead of creating a new
instance.
The editor is still not complete. There are a number of functional
elements, such as drag/drop operations, folder creation, and deletion
operations that need to be added to the main tree. State needs to be
saved and restored to improve the user experience. The appearance
preview also needs significant work. This will be handled in a future
PR.
Continues the work of the material subsystem improvements.
This merge covers the continued development of the material editor. The
primary improvements are in the handling of 2D and 3D array properties.
These properties are now fully editable, and can be saved and restored.
The cards now separate the author and license. These were previously
saved as a single item. Future support will be provided for standard
open source licenses.
Saving operations validate the cards to ensure UUIDs of materials are
considered. Warnings are given when a save could potentially impact the
models, such as saving over a material instead of creating a new
instance.
The editor is still not complete. There are a number of functional
elements, such as drag/drop operations, folder creation, and deletion
operations that need to be added to the main tree. State needs to be
saved and restored to improve the user experience. The appearance
preview also needs significant work. This will be handled in a future
PR.
A selected edge of a sketch is not in local coordinates and thus its corresponding axis mustn't be multiplied with the sketch placement as
this will lead to a wrong direction vector.
Forum: https://forum.freecad.org/viewtopic.php?t=82022
* Draft: added the new Draft_Hyperlink command
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Draft: added the new Draft_Hyperlink command
* Updated regex condition for more Windows file paths and network resources
* Added check for file existence
* Modified syntax for Win32/CygWin case
* Declared ret variable outside if statement
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Draft: added the new Draft_Hyperlink command
* Replaced os.startfile and subprocess.call with QDesktopServices.openUrl
* Removed unused Python dependencies
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
---------
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
Related issue:
#5603.
* The history idx value was not handled properly.
* Part.getShape() ignores the Placement of a selected BuildingPart. Have to use `place * obj.Placement`.
* Remove private unused field 'sketchView'
* Mark constructor with single argument as explicit
* Mark virtual methods of base class as override
* Fix clang code model parsing error
* Avoid too short identifiers
* Avoid redundant ternary operators
* Avoid passing Base::Unit by value but by const reference
Related issue:
#5603.
* An 'auto' WP should not be added to the history if the previous WP in the history is also 'auto'.
* The `get_working_plane` function should only call `set_to_default` if the GUI is up. The axis of the returned WP should match global +Z if the GUI is not up.
- The string of the some tooltips are very long that use all screen width.
- In other .ui files seems to be a max width of about 80 characters.
- This commit shortens the long strings.
- Also fixes some words capitalization noted by david69 on Crowdin
Forum topic:
https://forum.freecad.org/viewtopic.php?t=81997
Additionally:
* Fixed offset and extrusion for non-planar faces.
* Improved the addSubobjects function,
* Cleaned up the code a little bit.
Related issue:
#5603
Previous PR:
#11010
* This PR implements the new PlaneGui class for the Draft_SelectPlane command.
* As mentioned in the previous PR, almost all working plane related code has been removed from gui_selectplane.py.
* The task panel has a new button "Next" to switch to the next working plane in the history.
* Both the "Previous" and "Next" buttons are only enabled if there is a corresponding step in the history.
* PlaneGui stores a working plane per 3D view, but the other commands have to be updated before that system is fully functional.
* Code to update the toolbar when switching to a different view will be added later.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=81956
This PR basically reverts PR #10556.
The angular offset required for the Draft_Arc command is handled in the gui_arc.py file instead. Also removed the unused `urotated` variable from that file.
* Added uppercase extensions for supported formats
In the file App\Application.cpp
* Added file types in upper case
* Adds uppercase file types to the file import filter.
Fixes#10879
* Added filter for *.fcmacro *.fcscript
The PR refactors FindPreferencePacksInPackage() and splits program logic from exception handling. It also handles std::exception to give more
information about a possible failure
* Adding the Help module - fixes 10527, fixes#10512
* Aded Help to pre-commit
* [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>
===============================================
Sets the full interface between the DrawSketchHandler and a tool widget available somewhere in the UI.
Signalling is as follows:
1. On activation of the tool, DrawSketchHandler notifies the tool widget.
2. The tool widget retrieves tool information necessary for representation (type of widget, visibility, ...)
3. When the tool widget has created an appropriate widget, it notifies back a widget change.
4. The tool receives the widget handler and can now configure and interact with the widget.
This commit adds "<mod>/overlay" path to search paths of "overlay"
prefix. This allows preference packs to register custom overlay
stylesheets.
Fixes: #11023
FreeCAD 3D View is often somewhat dark even if the UI is in light
colors. So if user has not speficially applied "Light" stylesheet we
should prefer to use "Dark-Outline" stylesheet which provides proper and
fully transparent overlay panels.
Related issue:
#5603.
Previous PRs:
#10766#10838#10931
Short explanation:
* The PlaneGui class handles several GUI related aspects of the WP including a WP history.
* The `get_working_plane` function should be used to get a WP.
* Some of the code was taken from gui_selectplane.py. The intention is to remove almost all WP related code from that file. The icon, tooltip and label for the draftToolBar are also handled by PlaneGui.
* The tooltip shows extended information about the WP (position and axes vectors). An asteriks is appended to the label if the origin does not match the global origin.
* The `_update_all` function still updates FreeCAD.DraftWorkingPlane for compatibility.
* Some confusing names from the Plane class have been changed: `weak` -> `auto`, `reset` -> `set_to_auto`, `setup` -> `auto_align`.
Next step:
Implementing PlaneGui in Draft and Arch. The gui_selectplane.py file will be updated first.
* QMetaObject::invokeMethod: No such method Gui::OverlayManager::raiseAll()
* variable 'total' set but not used [-Wunused-but-set-variable]
* 'globalPos' is deprecated: Use globalPosition() [-Wdeprecated-declarations]
* Import: Support DXF text rotation - fixes#10882
- Reads and supports text rotation in builtin DXF import
- Makes the builtin DXF import produce Draft texts instead of App::Annotations
- Extends the arguments of Draft make_text()
* [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>
Fixes#6187.
Other fixes:
* Made handling of shapes and global placement more consistent.
* Shapes without curves were also triangulated.
* Polygonal faces could have flipped normals and duplicate points.
When saving the thumbnail there is a check if the 3D window is the active window. This check fails if a document is saved for the first time because
the appearing file dialog causes the 3D window to not be active any more. Thus, no snapshot of the 3D window will be created and the program logo will be
saved instead. A workaround is to save the document twice.
This PR removes the check for the active window so that the snapshot can be created. The issue might be related to #10937.
With PR #10016 the saving of thumbnails is on by default but the spin box to set the size is still disabled.
This results into an inconsistency and one has to click the Save thumbnails check box twice to enable the size widget.
The commit adds some new functions:
* getThumbnailDir()
Returns the path to the thumbnail directory which is a sub-directory of the Cache directory.
There is no need to always create a unique directory after each restart because it doesn't harm
if the thumbnail directoy contains deprecated files.
* createThumbnailDir()
Creates the thumbnail directoy if it doesn't exist yet.
* getSha1Hash
Helper function to compute a SHA-1 hash of a given path. If the same path is passed
then the hash value will be the same.
This way it can be avoided to create a different image file from a project file
after each restart.
* getUniquePNG
Computes the path of a PNG image file for a given project file. It's also possible
to pass an arbitrary string as argument.
* useCachedPNG
If the PNG image exists and if it's newer than the project file True is returned
and False otherwise.
The changes in detail are:
1. For a given project file it is checked if the thumbnail directory already contains
a cached image. If it's newer than the project file it will used, otherwise it will
be re-created.
2. For the system icon to a given file format it is only checked if the icon already exists.
If yes, it will be used.
=================================
Original idea of Werner:
https://github.com/FreeCAD/FreeCAD/pull/10643#issuecomment-1712966545
I really liked this syntax to avoid repetition and even explicit consideration of Types when type checking.
I thought it would be a pitty to get it lost.
Update Python tests to work with other locales
This fixes issues #10917 and #10924
Numeric values were beign compared to strings that did not take into account localizations. The test was modified to work regardless of localization.
There is still a known issue when working with pt_BR.UTF8. The default encoder for this localization is not UTF8 resulting in an error working with a parameter that returned the UTF character for the Greek letter mu in its units.
=================================================================
When in Sketcher edit mode, a tool button is activated, while the view has been changing to view of a different type, it segfaults.
This commit checks the pointer of the view to ensure correct type before activation, and refusing to activate if not of the correct type.
fixes#10809
Currently this check isn't enabled but when pushing a PR then the lint checker warns about non-explicit constructors which is
a bit annoying because the PR must be updated to fix the warning or in most cases it won't be fixed at all.
By enabling this check the developer already sees the warning before pushing a PR.
Related issue:
#5603.
Previous PRs:
#10766#10838
The remaining Plane class functions have been processed (some are unchanged):
`setup`
* Updated to use new functions.
* The `direction` etc. arguments are never used AFAICT.
* Added `from draftutils import gui_utils`.
`reset`
* Unchanged.
`setTop`
* Calls `super().set_to_top()`. That function does not use `align_to_point_and_axis` but specifies exact vectors for improved accuracy.
* `import FreeCADGui` already happens at the top of the file.
* The code block after `if FreeCAD.GuiUp:` was kept for now.
`setFront`
* Idem.
`setSide`
* This function sets the WP to the left side position, and not to the right side postion as in the Draft_SelectPlane command.
* Idem.
`getRotation`
* Revised.
* The function has an akward name as it returns a Placement.
* The special code for Arch active container is obsolete (was already commented out in other functions).
`getPlacement`
* The `rotated argument` is ignored now. It was only used in the context of the old `placement_from_face` algorithm. See `DraftGeomUtils.placement_from_face` for the new implementation.
* Calls `super().get_placement()`.
`getNormal`
* Basically unchanged.
`setFromPlacement`
* Revised to call `super()` functions.
`inverse`
* Unchanged.
`save`
* Unchanged.
`restore`
* More compact code, but basically unchanged.
`getLocalCoords`
* Calls `super().get_local_coords()` which does not rely on Draft code, but creates a matrix and returns `mtx.inverse().multVec(point)`.
`getGlobalCoords`
* Calls `super().get_global_coords()` which creates a matrix and returns `mtx.multVec(point)`.
`getLocalRot`
* Calls `super().get_local_coords()`.
`getGlobalRot`
* Calls `super().get_global_coords()`.
`getClosestAxis`
* Calls `super().get_closest_axis(vec)` which translates the vector to the WP coordinate system and then finds the closest axis by comparing the absolute coordinates of the vector.
`isGlobal`
* Not used anywhere AFAICT.
* Calls `super().is_global()` which also checks the `position` attribute.
* As before the function works without any tolerance.
`isOrtho`
* Not used anywhere AFAICT.
* The original algorithm did not work properly (there was a comment). All angles were measured relative to the global Y axis. If the WP was randomly rotated around that axis the function would still return `True`. The new algorithm, `super().is_ortho()`, uses rounded Yaw, Pitch and Roll angles to check for orthogonality.
`getDeviation`
* Not used anywhere AFAICT.
* Unchanged.
`getParameters`
* Calls `super().get_parameters()` which uses the local `_get_prop_list` function.
`setFromParameters`
* Calls `super().set_parameters()` which uses the local `_get_prop_list` function.
`_get_prop_list`
* Function used internally. Returns a list of attribute.
* Gui: added buttons to restore the default values of the selected Tab or Group
* reformatted texts for better translations
* Morphed buttons from QPushButton to QToolButton
* added code to resize items list and buttons on language change
Signed-off-by: CalligaroV <vincenzo.calligaro@gmail.com>
* Add new method ExportOCAF::exportObjects() to avoid code duplication
* Simplify handling of arguments passed to Python handler
* Fix several lint warnings
* Move ImportOCAFExt to the corresponding source files
This adds G43 tool height compensation to the centroid CAM post-processor using
a similar approach to the G43 support in the MACH3 post.
Specifically, G43 is emitted at every tool change by default and a new
`--no-tlo` post argument can restore the old behaviour of no height
compensation being emitted. These both match how the MACH3 post does it.
After this PR the `Plane` class inherits from the `PlaneBase` class.
Related issue:
#5603.
Previous PR:
#10766
The following functions have been updated:
`__init__`
* `u` argument can be a WP now.
* Input vectors are copied.
* Added the `weak` argument.
* the `doc` attribute was not used and has been removed.
`__repr__`
* Inherited.
* The `position` is now also shown.
`copy`
* Uses `match` from the parent class which uses the local `_get_prop_list` function. Again vectors are copied.
`offsetToPoint`
* I could not find evidence that this function is used anywhere.
* The `direction` argument did not make a lot of sense (only worked in 2D). It is now ignored.
* Removed the overly long docstring.
* The function now uses an external function: `DraftGeomUtils.distance_to_plane`.
`projectPoint`
* The function calls `super().project_point` which in turn calls `DraftGeomUtils.project_point_on_plane`.
* `from sys import float_info` is no longer required.
`projectPointOld`
* Obsolete and removed.
`align*`
* All align* functions now have an `offset` argument.
* All align* functions return `True` or `False`.
`alignToPointAndAxis`
* The function ignored `upvec` if `axis` was parallel to the global X axis. This meant that the "Set WP" button of the Draft_Wire command did not work properly if the WP was aligned with the Right or Left view.
* The function calls `align_to_point_and_axis` which determines the rotation with `FreeCAD.Rotation(Vector(), upvec, axis, "ZYX")`.
`alignToPointAndAxis_SVG`
* The function calls `super().align_to_point_and_axis_svg` which contains the code from the old function.
`alignToCurve`
* Was not implemented.
`alignToEdges`
* Original code required two parallel edges (for example from an axis system), else the `u` and `v` vectors would not be perpendicular.
* The function calls `super().align_to_edges_vertexes` now.
`alignToFace`
* The function now uses an external function: `DraftGeomUtils.placement_from_face`. The rotation algorithm for the `u` and `v` vectors has been moved there.
`alignTo3Points`
* Basically unchanged. `Part` is already imported at the top of the file.
`alignToSelection`
* Basically unchanged. Will be replaced in the `PlaneGui` class.
Some notes:
Earlier, when adding to the list `connected_to`. the numbers are added in order
from `range(len(groups)`, so we are already in order and every `i_group` is unique.
* fix 10742
* moved expression string modifier to helper function
* Tests: Add example tests for SketchObject
* [pre-commit.ci] auto fixes from pre-commit.com hooks
for more information, see https://pre-commit.ci
* made expr modifier func static, pass by value and added unit tests
---------
Co-authored-by: Chris Hennes <chennes@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Rework of the material handling system.
This first part concntrates on a rework of the material cards.
Rather than use a fixed list of possible properties, properties can
be defined separately in their own files and mixed to provide a
complete list of possible properties. Properties can be inherited.
The cards then provide values for the properties. These can also
be inherited allowing for small changes in cards as required.
The new property definitions are more extensive than previously.
2 and 3 dimensional arrays of properties can be defined. Values
are obtained by calling an API instead of reading from a dictionary.
For compatibility, a Python dictionary of values can be obtained
similar to how it was done previously, but this is considered a
deprecated API and won't support the newer advanced features.
The editor is completely reworked. It will be able to edit older format
material cards, but can only save them in the new format.
For testing during the development phase, a system preference can
specifiy wether the old or new material editors are to be used. This
option will be removed before release.
Rework of the material handling system.
This first part concntrates on a rework of the material cards.
Rather than use a fixed list of possible properties, properties can
be defined separately in their own files and mixed to provide a
complete list of possible properties. Properties can be inherited.
The cards then provide values for the properties. These can also
be inherited allowing for small changes in cards as required.
The new property definitions are more extensive than previously.
2 and 3 dimensional arrays of properties can be defined. Values
are obtained by calling an API instead of reading from a dictionary.
For compatibility, a Python dictionary of values can be obtained
similar to how it was done previously, but this is considered a
deprecated API and won't support the newer advanced features.
The editor is completely reworked. It will be able to edit older format
material cards, but can only save them in the new format.
For testing during the development phase, a system preference can
specifiy wether the old or new material editors are to be used. This
option will be removed before release.
Since Py3.11 the methods names __setstate__ and __getstate__ conflict with the method names added to the object class.
Thus rename them to 'loads' and 'dumps'
This PR introduces the new PlaneBase class.
Most of its functions are rewritten versions of the functions in the original Plane class, with the exception of align_to_point_and_axis_svg.
Note that after this PR the original Plane class does not yet inherit from PlaneBase. This will be done in several following PRs. I will then also explain the reasons behind some of the revised functions in PlaneBase.
The introduction of the PlaneGui class will follow after that.
Issue: #5603.
We use a lambda function with a copy of variables
that might be destructed in the original calling thread,
possibly producing dangling references.
See: https://forum.freecad.org/viewtopic.php?t=81260
Remove "Std_LinkSelectActions" from the toolbar.
Remove "Std_SelBack" & "Std_SelForward" from the toolbar
Remove "Std_SelBoundingBox"
from the toolbar
Reorder the toolbar entries.
* [Gui] Fix ColorBar position and labelling
* [Gui] Improve formatting
* [Gui] ColorBar adjusts if user squashes window height
* [Gui] Changes following feedback
With the current code, if you place a simple door and change its Opening property to 50, the door leaf and the frame intersect. This PR fixes that issue.
* [Stylesheets] Fixed and added more accent colors.
Added accent colors to Behave dark ProDark and Dark contrast.
Used accent color 3 to the button gradients.
Added Gradient to the Modern styles, because you can disable the gradient by giving 2 accent colors the same color.
The functions have been copied from the WorkingPlane class. It makes sense to also have them available outside that class. The WorkingPlane class will later be updated to use these functions so that duplicate code is avoided.
Note that the default tolerance of the project_point_on_plane function is 1e-7. In the original projectPoint function it is sys.float_info.epsilon (too small for FreeCAD IMO).
If a project contains an unknown geometry extension then the attempt to create it returns a null pointer which isn't checked and causes a segmentation fault.
See also forum: https://forum.freecad.org/viewtopic.php?t=81091
* The menu text and tooltip of the Sketcher_ConstrainRadius command shouldn't be different if part of the group command or not.
The explicit mentioning to change the weight of a B-Spline is pointless and confusing.
* The order of Sketcher_ConstrainRadius and Sketcher_ConstrainDiameter has flippend when used in Sketcher_CompDimensionTools
* The command Sketcher_ConstrainRadiam is completely missing
* The command Sketcher_ConstrainSnellsLaw was wrongly re-added
* CmdSketcherCompConstrainRadDia uses a wrong context
Added a "User parameter:BaseApp/Preferences/PythonConsole/ProfilerInterval" int
property which sets how often (in milliseconds) the Python profiler runs while
Python code is running. Setting this value to zero will totally disable it.
Also added a preference in the Python console screen which allows the user to
set the value of this property to between 0 (disabled) and 5000 (once every 5
seconds). (+1 squashed commits)
Squashed commits:
[cca88ac633] Made the Python profiler only run when the console is running code
This has two purposes. First, it prevents a performance impact from running the
profiler whenever Python code is running. Second, it prevents crashes caused by
Qt's process events function being called too frequently. When the Python code
is running in the console, it monopolizes the main thread and prevents events
from being processed. Therefore, causing events to be processed in the callback
should not force events to be processed too frequently, because the normal loop
is being prevented by the Python code. (+1 squashed commits)
Squashed commits:
[45f86917e6] Made long-running Python code not freeze the GUI without multithreading
Removed the background thread running Python code and replaced it with a custom
profiler which the Python interpreter runs frequently (at every Python opcode I
believe) on the main thread whenever Python code is running. The profiler will
make Qt process any new events every 200 ms, preventing "App not responding"
messages and making sure any Ctrl+C keypresses will be processed. This prevents
the previous issue where running anything GUI-related from Python would crash
the program (because Qt isn't thread-safe). (+1 squashed commits)
Squashed commits:
[0ef7d810b3] Made the process of getting thread IDs cross-platform compatible
Instead of using <threads.h>, now the standard <thread> header from C++
11 is used to find the thread ID, since <threads.h> is apparently not
available on Windows. (+1 squashed commits)
Squashed commits:
[74c7b867f2] # This is a combination of 2 commits.
Python from the console now runs in the background
In a nutshell, all Python code which is input from the interactive console
now runs in a seperate QThread which runs in the background, instead of
on the UI thread. This means that long operates operations will no longer
cause the app to display an "App not responding" message, because the UI
thread is now free to keep running unencumbered.
However, it is still not possible to run multiple Python statements at
the same time. If the user tries to run some Python while a previous
statement is still being processed, instead it will display an error
message in the console stating that the previous command is still
being processed.
I also added a seperate QTimer which runs once every 100ms to flush any
output from the Python code back to the console. I can't flush the output
to the console from the background thread because the relevant Qt5 code
is not thread-safe (it causes random segfaults). So I added this timer
as a work-around, since it runs in the main UI thread.
Implemented Ctrl+C keyboard interrupts in the console
This is implemented by detecting a Ctrl+C key event in the Python
console in the main Qt UI thread, and sending a keyboard interrupt
to the background thread that runs the Python code.
patches for #10459 and #10426...
a few small details escaped attention need to be fixed
😉
Removing unnecessary strings from Crowdin and improving typos.
Steps to verify the issue:
1. Open FreeCAD.
2. Switch to Std_ViewTop.
3. Click one of the curved arrows of the Navigation Cube.
4. Switch to the Draft WB.
5. Make sure Draft_SelectPlane is set to "Auto".
6. Start Draft_Arc and click 2 points (for the radius and the start angle).
7. Result: The displayed arc does not match the start angle or the current point.
Additonally:
* Removed the normal argument from `__init__`. The tracker does not work properly with just a normal. AFAICT there is no code that specifies this normal.
* Minor improvement to `getAngle`: Switched the vectors.
Presumably due to an copy/paste error, carbonCopy used to verify the
referenced object via `isExternalAllowed` (just like addExternal).
Now using `isCarbonCopyAllowed`, the resulting error message is the
expected one for wrong objects, not a generic one after the operation
failed.
The part behind the column represents the function name itself, not an
error message. So previously, an argument error looked like this:
("Give an object" is not the method name)
```
>>> obj.carbonCopy()
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: Give an object() takes at least 1 argument (0 given)
>>> obj.carbonCopy(123)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: Give an object() argument 1 must be str, not int
```
While the format string also supports a text for the complete error message
(using a semicolon instead), I decided against this: Pythons standard text
is more precise than this:
(the type error here is not "Give an object")
```
>>> obj.carbonCopy()
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: Give an object
>>> obj.carbonCopy(123)
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: Give an object
```
- Animations are played through an Animator
- Standard animations have a fixed duration and inherit from QVariantAnimation
- The animation duration can be changed in the preferences
- Fix animations when using the two arrows above the NaviCube
- Start an animation or start and wait for an animation
- Replaces standard camera animations (e.g. by selecting standard views or NaviCube) with FixedTimeAnimation
- Replace View3DInventorViewer's CameraAnimation with FixedTimeAnimation
- Replace OpenInventor navigation style infinite spin animation with SpinningAnimation
- Stops an active animation when a new animation is started
- Stops an active animation when the user starts dragging, panning or zooming
- Refactor reorientCamera so it can be used in animations
- Enable animations by default
Example Error :
File "/home/john/freecad-daily-build/Mod/Start/StartPage/StartPage.py", line 422, in handle
ALTCSS = f.read()
^^^^^^^^
File "/usr/lib/python3.11/encodings/ascii.py", line 26, in decode
return codecs.ascii_decode(input, self.errors)[0]
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 421: ordinal not in range(128)
This commit updates description of Problem report issue template to be
more descriptive and to include what kinds of issues could be reported.
Field with description is moved to be second one so it will be rendered
on the top of issue instead of near the end.
Fixes#10448
Currently the GroupCommand by default sets the action group as non-exclusive, checkable and having a drop-down menu which isn't always the desired behaviour in sub-classes.
Thus, some new methods are added to let a sub-class in its constructor decide how it should behave.
definition of implicit copy assignment operator for '_Base_iterator' is deprecated because it has a user-provided copy constructor [-Wdeprecated-copy-with-user-provided-copy]
When setting the selection filter below and hovering over an object causes a segmentation fault:
filter = Gui.Selection.Filter('SELECT Part::Feature')
Gui.Selection.addSelectionGate(filter)
A SoNode* is not necessarily a SoFCSelectionRoot*, and when this
assumption breaks the code causes UB (the comment related to one of the
chunks explicitly says that it is safe, but unfortunately it is not).
Instead of storing `SoFCSelectionRoot*` and blindly cast a generic
`SoNode*` to that, we can do the opposite. In this way it is obviously
necessary to use a dynamic cast when trying to reach for
`SoFCSelectionRoot` specific features, but in this way the abstraction
should be sound.
Co-authored-by: Chris Hennes <chennes@pioneerlibrarysystem.org>
* if 2nd argument of getActiveObject() is False and the requested object doesn't exist then return (None, None, "")
* remove the exact same implementations from View3DInventorPy
* [Stylesheets] Fixed and added more accent colors.
Added accent colors to Behave dark ProDark and Dark contrast.
Used accent color 3 to the button gradients.
Added Gradient to the Modern styles, because you can disable the gradient by giving 2 accent colors the same color.
* changed to so accent color 3 is text.
As Length and Offset represents the same concept in different way it is
useful to keep them in sync when it is possible. Update to one of them
will update the other with approperiate value. This behaviour behaviour
works only if both properties are not coming from expression engine -
those will stay not touched.
This commit adds two separate modes for defining angular spacing between
elements in the PD's Polar Pattern:
1. Overall Angle - which behaves exactly like it behaved before,
2. Offset Angle - which allows user to specify separation angle between
consecutive elements.
This change is analogue to that introduced for LinearPattern in previous
commits.
This commit adds support for two separate modes of defining distance
between elements in PD's Linear Pattern.
1. Overall Length - which works exactly like it works before,
2. Spacing - which allows user to explicitly define distance (offset) between
features.
The get_support function did not work for objects nested in, for example, Std_Parts.
Additionally improved and cleaned up the code, and reduced the docstrings.
It makes sense to have this attribute. It will also facilitate the coming work related to the Plane class.
Additionally: Removed the `not self.doc` check from `Activated` as `IsActive` already handles this.
* Make StartPage new file template buttons use if instead of match
* Make StartPage Part design new file template not create a sketch
* Remove StartPage Part new file template and rename Part Design template based on community feedback
* StartPage LoadNew.py fix indentation
Various function existed that had no arguments but were still treated as
if they were vararg functions. This has no been changed to
add_noargs_method declarations, cleaning up the code.
Whole objects selected in the model tree will be ignored for the measurement element selection.
This allows for selecting and toggling the visibility of an object in the model tree.
Now all escaping required for the C++ code generation is done when the
.cpp/.h files are generated. Previously, only newlines were escaped
automatically. This was a) inconsistent and b) leaked c++ details into
the xml data.
In addition, the escaping is now done in one central place, harmonizing
the three previous implementations.
Pre-existing c++ escape sequences in the XML files have been replaced by
their literal equivalent so that the resulting python doc sting remains
unchanged.
Building the C++ unit tests failed for
tests/src/Mod/Sketcher/App/SketchObject.cpp
because some XML headers were not found. This was because the XercesC
include dir was not in the search list for headers.
Details:
> In file included from /Users/jonas/src/FreeCAD/FreeCAD-git/tests/src/Mod/Sketcher/App/SketchObject.cpp:7:
> In file included from /Users/jonas/src/FreeCAD/FreeCAD-git/src/App/Application.h:33:
> /Users/jonas/src/FreeCAD/FreeCAD-git/src/Base/Parameter.h:55:10: fatal error: 'xercesc/util/XercesDefs.hpp' file not found
> #include <xercesc/util/XercesDefs.hpp>
> ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~
This is the same issue as already adresses previously with PR9657 [1] but
the test for SketchObject was added later [2].
[1]: https://github.com/FreeCAD/FreeCAD/pull/9657
[2]: https://github.com/FreeCAD/FreeCAD/commit/532b391b6971c7ce1dee4bbe0e782ce070051db9
The recent migration from boost::bind to std::bind [1] broke the build
on Mac (Apple clang version 13.0.0 (clang-1300.0.29.30) on macOS-11.7.8).
In all other cases the `boost::bind` was replaced by `std::bind` (among
with the place holders) but in these two spread sheet files
src/Mod/Spreadsheet/Gui/SheetModel.cpp
src/Mod/Spreadsheet/Gui/SpreadsheetView.cpp
the original code only referenced `bind`, which used to get resolved to
`boost::bind` but now raises this error:
> /Users/jonas/src/FreeCAD/FreeCAD-git/src/Mod/Spreadsheet/Gui/SheetModel.cpp:50:36: error: use of undeclared identifier 'bind'; did you mean 'boost::bind'?
> sheet->cellUpdated.connect(bind(&SheetModel::cellUpdated, this, sp::_1));
> ^~~~
> boost::bind
This commit changes this to `std::bind` expicitly, just like it's done in
the other files. This works on my system/compiler.
[1]: https://github.com/FreeCAD/FreeCAD/commit/68d22d864b801231c83c0ef961073ac5f8764aa4
The QGuiApplication::setDesktopFileName() call was changed in [1] but
the desktop file and other files that reference it were not.
As shown by Looking Glass [2] on X11 updating these files is still
not enough for GNOME to associate the process with the desktop file,
a StartupWMClass entry is added to the desktop file to fix this.
[1]
129d5882a7 ("Migrate domain name from freecadweb to freecad (#9352)", 2023-04-24)
[2]
https://blogs.gnome.org/mclasen/2016/11/15/help-my-app-icon-is-missing/
It's not recommended any more to keep the export macro in the PreCompiled.h because many IDEs fail to fetch the export macro and raise a parsing error instead.
Problem description
To display a shape, the ViewProvider creates a mesh of the shape data. The
resolution depends also on the two parameters "Angular Deflection" and
"Deviation" in the View properties. (The values of these parameters are also
updated for all objects when changing these settings in the Preferences
dialog).
Changing the parameters from a high value to a lower value has an immediate
effect on the displayed shape -- for example a circle will be displayed finer
with more line segments. But changing the parameter back to the higher value
(with less resolution) will keep the finer view-mesh instead of calculating a
coarser one. To get back to the coarse view, the object has to be manually
recomputed or the file re-opened.
Solution
I just set the meshing parameter AllowQualityDecrease to True. I guess that
this was not implemented before because this parameter is quite new (introduced
in OCC v7.5 in the year 2020).
Improve sliders and checkboxes
* Delete CMakePresets.json
* Delete VSInheritEnvironments.txt
* Fix for calltips transparant issue https://github.com/FreeCAD/FreeCAD/pull/9715#issuecomment-1633146515
* removed inkscape from a bunch of svg files
* Small bug grid color for draft workbench was to dark.
* The sketcher colors are added.
* The transparant calltips: https://github.com/FreeCAD/FreeCAD/pull/9715#issuecomment-1633146515
* There were some corner dots that I removed.
* I fixed the splitter not working with hovering.
* I also removed the extra dark splitter background, so now you won't see the splitters unless you hover over them.
* Also fixed the url label color.
* These fixes can be tested true the theme's beta addon.
* added preference packs
* Fix for transparant in Qwidget disabled. https://github.com/FreeCAD/FreeCAD/issues/10077
* [Base] Add hasExtension for multiple values
* [Gui] Use hasExtension for multiple values
* [Drawing] Use hasExtension for multiple values
* [Fem] Use hasExtension for multiple values
* [Import] Use hasExtension for multiple values
* [Mesh] Use hasExtension for multiple values
* [Part] Use hasExtension for multiple values
* [TechDraw] Use hasExtension for multiple values
The underlying C++ class use an unsigned long to reference neighbour facets. ULONG_MAX is used to indicate a missing neighbour facet.
Since the value of ULONG_MAX is platform dependent and can be confusing in Python the Python wrapper FacetPy now explicitly uses -1 to indicate missing neighbour facets
description:Have you found something that does not work well, is too hard to do or is missing altogether? Please create a Problem Report.
labels:["Status: Needs triage"]
body:
- type:checkboxes
id:existing_issue
attributes:
label:Is there an existing issue for this?
description:Please search to see if an issue already exists for the problem you encountered.
description:Please [search](https://github.com/FreeCAD/FreeCAD/issues) to see if a similar issue already exists for the problem you encountered.
options:
- label:I have searched the existing issues
required:true
- type:dropdown
id:version
- type:textarea
id:description
attributes:
label:Version
description:What version of FreeCAD are you running?
options:
- 0.20(Release)
- 0.21(Development)
label:Problem description
description:Describe the problem and how it impacts user experience, workflow, maintainability or speed of the code. If the problem appears to be a bug with the current functionality, provide as test case or recipe that reproduces the error. Ideally record a macro and attach it.
placeholder:Description of the problem
validations:
required:true
- type:textarea
@@ -35,30 +32,23 @@ body:
label:Subproject(s) affected?
options:
- Addon Manager
- Arch
- Assembly
- BIM
- CAM
- Core
- Draft
- Expressions
- FEM
- File formats
- GCS
- Mesh
- OpenSCAD
- Part
- PartDesign
- Path
- Project Tools & Websites
- Sketcher
- Spreadsheet
- Techdraw
- TechDraw
- Other (specify in description)
- type:textarea
id:description
attributes:
label:Problem description
description:Describe the problem and how it impacts user experience, workflow, maintainability or speed of the code. If the problem appears to be a bug with the current functionality, provide as test case or recipe that reproduces the error.
placeholder:Description of the problem
validations:
required:true
- type:textarea
id:anything_else
attributes:
@@ -66,6 +56,7 @@ body:
description:|
Links? References? Anything that will give us more context about the issue you are encountering!
If there is a discussion about the problem on the forum, provide link(s) here.
You can upload or copy your macro here to speed up the diagnosis and debugging.
Tip: You can attach images or log files by clicking this area to highlight it and then dragging files in. To attach a FCStd file, ZIP it first (GitHub won't recognize the extension otherwise).
validations:
@@ -74,7 +65,7 @@ body:
id:terms
attributes:
label:Code of Conduct
description:By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/FreeCAD/FreeCAD/blob/master/CODE_OF_CONDUCT.md)
description:By submitting this issue, you agree to follow our [Code of Conduct](https://github.com/FreeCAD/FreeCAD/blob/main/CODE_OF_CONDUCT.md)
options:
- label:I agree to follow this project's Code of Conduct
Thank you for creating a pull request to contribute to FreeCAD! Place an "X" in between the brackets below to "check off" to confirm that you have satisfied the requirement, or ask for help in the [FreeCAD forum](https://forum.freecadweb.org/viewforum.php?f=10) if there is something you don't understand.
- [ ] Your Pull Request meets the requirements outlined in section 5 of [CONTRIBUTING.md](https://github.com/FreeCAD/FreeCAD/blob/master/CONTRIBUTING.md) for a Valid PR
Please remember to update the Wiki with the features added or changed once this PR is merged.
**Note**: If you don't have wiki access, then please mention your contribution on the [1.0 Changelog Forum Thread](https://forum.freecad.org/viewtopic.php?f=10&t=69438).
@@ -41,7 +41,7 @@ The FreeCAD Contribution Process is expressed here with the following specific g
2. All contributions to FreeCAD MUST use a compatible license.
3. All contributions are owned by their authors unless assigned to another.
4. FreeCAD does not have a mandatory copyright assignment policy.
5. A Contributor who wishes to be identified in the Credits section of the application "About" dialog is responsible for identifying themselves. They should modify the Contributors file and submit a PR with a single commit for this modification only. The contributors file is found at https://github.com/FreeCAD/FreeCAD/blob/master/src/Doc/CONTRIBUTORS
5. A Contributor who wishes to be identified in the Credits section of the application "About" dialog is responsible for identifying themselves. They should modify the Contributors file and submit a PR with a single commit for this modification only. The contributors file is found at https://github.com/FreeCAD/FreeCAD/blob/main/src/Doc/CONTRIBUTORS
6. A contributor who does not wish to assume the copyright of their contribution MAY choose to assign it to the [FreeCAD project association](https://fpa.freecad.org) by mentioning **Copyright (c) 2022 The FreeCAD project association <fpa@freecad.org>** in the file's license code block.
## 5. Contribution Requirements
@@ -56,7 +56,7 @@ The FreeCAD Contribution Process is expressed here with the following specific g
8. A PR SHALL NOT include non-trivial code from other projects unless the Contributor is the original author of that code.
9. A PR MUST compile cleanly and pass project self-tests on all target platforms.
10. Each commit message in a PR MUST succinctly explain what the commit achieves. The commit message SHALL follow the suggestions in the `git commit --help` documentation, section DISCUSSION.
11. The PR message MUST consist of a single short line, the PR Title, summarizing the problem being solved, followed by a blank line and then the proposed solution in the Body. If a PR consists of more than one commit, the PR Title MUST succinctly explain what the PR achieves. The Body MAY be as detailed as needed.
11. The PR message MUST consist of a single short line, the PR Title, summarizing the problem being solved, followed by a blank line and then the proposed solution in the Body. If a PR consists of more than one commit, the PR Title MUST succinctly explain what the PR achieves. The Body MAY be as detailed as needed. If a PR changes the user interface (UI), the body of the text MUST include a presentation of these UI changes, preferably with screenshots of the previous and revised state.
12. A “Valid PR” is one which satisfies the above requirements.
## 6. Process
@@ -87,14 +87,18 @@ The FreeCAD Contribution Process is expressed here with the following specific g
## 7. Branches and Releases
1. The project SHALL have one branch (“master”) that always holds the latest in-progress version and SHOULD always build.
1. The project SHALL have one branch (“main”) that always holds the latest in-progress version and SHOULD always build.
2. The project SHALL NOT use topic branches for any reason. Personal forks MAY use topic branches.
3. To make a stable release a Maintainer SHALL tag the repository. Stable releases SHALL always be released from the repository master.
3. To make a stable release a Maintainer SHALL tag the repository. Stable releases SHALL always be released from the repository main branch.
## 8. Project Administration
1.The project Administrators will manage the set of project Maintainers. They SHALL maintain a sufficiently large pool of Maintainers to ensure their succession and permit timely review of contributions.
2.Contributors who have a history of successful PRs and have demonstrated continued professionalism should be invited to be Maintainers.
3.Administrators SHOULD remove Maintainers who are inactive for an extended period, or who repeatedly fail to apply this process accurately.
4. The list of Maintainers SHALL be publicly accessible and reflective of current activity on the project.
5.Administrators SHOULD block or ban “bad actors” who cause stress, animosity, or confusion to others in the project. This SHOULD be done after public discussion, with a chance for all parties to speak. A bad actor is someone who repeatedly ignores the rules and culture of the project, who is hostile or offensive, who impedes the productive exchange of information, and who is unable to self-correct their behavior when asked to do so by others.
1.Project Administrators are those individuals who are members of the FreeCAD Github organization and have the role of 'owner'. They have the task of administering the organization including adding and removing individuals from various teams.
2.Project Administrator is a technical role necessitated by the GitHub platform. Except for the specific exceptions listed below, the Project Administrators do not make the decision about individual team members. Rather, they carry out the collective wishes of the Maintainers team. Project Administrators will be selected from the Maintainers team by the Maintainers themselves.
3.To ensure continuity there SHALL be at least four Project Administrators at all times.
4. The project Administrators will manage the set of project Maintainers. They SHALL maintain a sufficiently large pool of Maintainers to ensure their succession and permit timely review of contributions. If the pool of Maintainers is insufficient, the Project Administrators will request that the Maintainers select additional individuals to add.
5.Contributors who have a history of successful PRs and have demonstrated continued professionalism should be invited to be Maintainers.
6. Administrators SHOULD remove Maintainers who are inactive for an extended period, or who repeatedly fail to apply this process accurately.
7. The list of Maintainers SHALL be publicly accessible and reflective of current activity on the project.
8. Administrators SHALL act expediently to protect the FreeCAD infrastructure and resources.
9. Administrators SHOULD block or ban “bad actors” who cause stress, animosity, or confusion to others in the project. This SHOULD be done after public discussion, with a chance for all parties to speak. A bad actor is someone who repeatedly ignores the rules and culture of the project, who is hostile or offensive, who impedes the productive exchange of information, and who is unable to self-correct their behavior when asked to do so by others.
The FreeCAD application does not collect, transmit, share or use any Personal Data.
FreeCAD is community-developed Free Software. The community does not condone the unauthorized usage of private data, so our software does not gather or send personal data.
The FreeCAD website is mostly static, it does not contain any trackers, neither ours nor third-party. The website uses cookies to remember logged in status, timezone and other
data related to navigating the site.
The website does not contain advertisements.
The software does not contain advertisements or trackers either.
## Caveats
FreeCAD is able to load or save files to/from remote servers (for some protocols and platforms). If you choose to load or save a remote file, your IP or other private data might be shared as part of the normal connection flow for the given protocol. This is out of our control and it is up to you to decide whether you trust a remote host.
The FreeCAD eco system includes user developed workbenches. These workbenches can be installed/updated using the Add-on Manager. The Add-on Manager retrieves workbenches from remote servers across the internet. Add-on workbenches are not checked for malicious content. It is your responsibility to decide whether you trust an add-on workbench.
FreeCAD is meant to manipulate CAD files which may contain metadata. It is your responsibility to verify the metadata contained in your files before you share them with others. These files may contain local directory paths which could reveal user names if the user name forms part of the path - as in “C:\MrsCAD\Documents\myFreeCADFile.FCstd”.
FreeCAD can also be used to create and run macros. These are Python scripts that can perform any action that the user can perform on a system. When running a macro from an outside source, it is your responsibility to ensure you trust the author.
While running and for subsequent runs, FreeCAD uses local persistent storage for logs, configuration files, cache, thumbnails, recently accessed files and other information which may contain private data. This stays on local storage.
When reading the online version of the User Manual within FreeCAD, manual contents is requested through HTTPS connections.
FreeCAD is Free Software and therefore may be packaged by other people, who may include additional software or modify the source code. We do not vouch for these third-party packages and cannot tell you what they contain and what they do regarding your privacy. The official packages are explicitly listed in our download page.
- [based on the GIMP privacy policy](https://www.gimp.org/about/privacy.html)
-Link forum thread to bug tracker ticket and vice-a-versa;
- Use the most updated stable or development versions of FreeCAD;
- Post version info from eg. `Help > About FreeCAD > Copy to clipboard`;
-Consider posting to the [Forum](https://forum.freecad.org), [Discord](https://discord.com/invite/F4hdxzYZfc) channel, or [Reddit](https://www.reddit.com/r/FreeCAD) to verify the issue;
-Search the existing [issues](https://github.com/FreeCAD/FreeCAD/issues) for potential duplicates;
- Use the most updated stable or [development versions](https://github.com/FreeCAD/FreeCAD-Bundle/releases/tag/weekly-builds) of FreeCAD;
- Post version info from e.g. `Help > About FreeCAD > Copy to clipboard`;
- Start recording a macro `Macro > Macro recording...` and repeat all steps. Stop recording after the issue occurs and upload the saved macro or copy the macro code in the issue;
- Post a Step-By-Step explanation on how to recreate the issue;
- Upload an example file to demonstrate problem.
- Upload an example file (FCStd as ZIP file) to demonstrate the problem;
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.