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
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.