Release notes 0.20

FreeCAD 0.20 was released on DD Month 202x, get it from the Download page. This is a summary of the most interesting changes. The complete list of changes can be found in the MantisBT bugtracker FC 0.20 changelog.

Older FreeCAD release notes can be found in Feature list.

Compilation
Since this release FreeCAD can only be compiled using Qt 5 and Python 3.

To compile FreeCAD under Windows, there are different Libpacks (prepackaged libraries) available:
 * Libpack for Windows with Qt xx, OCC yy, and Python zz

Lowest supported Python version is 3.6.9 according to this FC forum thread.

Supported operating systems:
 * Windows 7, 8 and 10
 * Linux Ubuntu Bionic Beaver (18.04) and Focal Fossa (20.04)
 * MacOS minimum version 10.12 Sierra

Further user interface improvements

 * Two new mouse navigation styles have been added. One based on OpenSCAD, the other on TinkerCAD. Forum discussion OpenSCAD, Forum discussion TinkerCAD, commit 1, commit 2, commit 3.
 * It is now possible to pan the view of the dependency graph with the mouse. Forum discussion, Pull request #4638.
 * Fixed an issue where using a tablet pen devices (e.g. Wacom tablet) was slow to the point of being completely unusable. Forum discussion, Pull request #4687.
 * The coordinate system in the 3D view can be resized in the preferences in the section Display → 3D View. Pull request #5182
 * A new setting in Preferences → General allows to substitute the numerical keypad decimal separator with the appropriate locale separator if they are different. Pull request #3256 Pull request #5150 Pull request 5203
 * It is now possible to set the key as a standalone shortcut key without the need to specify an additional modifier key. Pull request #5428

Core

 * A new type of add-on called a Preference Pack was added, allowing a subset of a user preferences (user.cfg) file to be distributed and applied. Forum discussion, Pull request #4787

New Python API

 * Circle2dPy::getCircleCenter: Gets the circle center defined by three points. commit 3dc91fa2


 * ComplexGeoDataPy::applyRotation: Applies an additional rotation to the placement. commit 32592de8
 * ComplexGeoDataPy::applyTranslation: Applies an additional translation to the placement. commit 32592de8
 * ComplexGeoDataPy::countSubElements: Returns the number of elements of a type. commit 32592de8
 * ComplexGeoDataPy::getElementTypes: Returns a list of element types. commit 32592de8
 * ComplexGeoDataPy::getFaces: Returns a tuple of points and triangles with a given accuracy. commit 32592de8
 * ComplexGeoDataPy::getLines: Returns a tuple of points and lines with a given accuracy. commit 32592de8
 * ComplexGeoDataPy::getLinesFromSubelement: Returns vertexes and lines from a sub-element. commit 32592de8
 * ComplexGeoDataPy::getPoints: Returns a tuple of points and normals with a given accuracy. commit 32592de8
 * ComplexGeoDataPy::transformGeometry: Applies a transformation to the underlying geometry. commit 32592de8


 * ControlPy::showModelView: Shows the model view. commit 033bf619


 * DocumentPy::clearDocument: Clears the whole document. commit 526dc1a0
 * DocumentPy::getFileName: For a regular document it returns its file name property. For a temporary document it returns its transient directory. commit 526dc1a0
 * DocumentPy::getProgramVersion: Gets the program version that a project file was created with. commit 526dc1a0
 * DocumentPy::isClosable: Checks if the document can be closed.. commit 526dc1a0
 * DocumentPy::isSaved: Checks if the document is saved. commit 526dc1a0
 * DocumentPy::isTouched: Checks if any object is in touched state. commit 526dc1a0
 * DocumentPy::mustExecute: Checks if any object must be recomputed. commit 526dc1a0
 * DocumentPy::purgeTouched: Purges the touched state of all objects. commit 526dc1a0
 * DocumentPy::setClosable: Sets a flag that allows or forbids to close a document. commit 526dc1a0


 * DrawPagePy::requestPaint: Paints a TechDraw page. commit 79f9fb68


 * HLRBRep_AlgoPy: To access Part's hidden line removal (HLR). commit 73a98671
 * HLRBRep_PolyAlgoPy: To access Part's poly hidden line removal (HLR). commit ea85cf5e
 * HLRToShapePy: To access Part's hidden line removal (HLR). commit 73a98671
 * PolyHLRToShapePy: To access Part's poly hidden line removal (HLR). commit ea85cf5e


 * MDIViewPy::printPdf: Prints a PDF. commit c93031da
 * MDIViewPy::printPreview: Prints a preview. commit c93031da
 * MDIViewPy::printView: Prints a view. commit c93031da
 * MDIViewPy::redoActions: Redoes actions. commit c93031da
 * MDIViewPy::undoActions: Undoes actions. commit c93031da


 * PrecisionPy: To access the precision defined by the OpenCascade kernel. commit 20b86e55


 * PropertyContainerPy::setDocumentationOfProperty: Sets the documentation string of a dynamic property of this class. commit 8cf3cf33
 * PropertyContainerPy::setGroupOfProperty: Set the name of the group of a dynamic property. commit 8cf3cf33


 * RotationPy::fromEuler: Sets the Euler angles of a rotation or gets the Euler angles in a given sequence for a rotation. commit 951a0be9
 * RotationPy::toEulerAngles: Gets the Euler angles in a given sequence for this rotation.. commit c1454dfb


 * SpreadsheetViewPy: To access spreadsheets. commit 6e713628


 * View3DInventorPy::getCornerCrossSize: Returns current corner axis cross size. commit 9d15df29
 * View3DInventorPy::setPopupMenuEnabled: Enables popup menu. commit 9def811a
 * View3DInventorPy::isCornerCrossVisible: Returns current corner axis cross visibility. commit 9d15df29
 * View3DInventorPy::isPopupMenuEnabled: Returns if popup menu is enabled. commit 9def811a
 * View3DInventorPy::projectPointToLine: Projects the given 2d point to a line. commit b6527a70
 * View3DInventorPy::setCornerCrossSize: Defines corner axis cross size. commit 9d15df29
 * View3DInventorPy::setCornerCrossVisible: Defines corner axis cross visibility. commit 9d15df29


 * ViewProviderSpreadsheetPy: To handle spreadsheet cells.commit 16bbe123 and commit 093f15dc

Changed API

 * MeshObject::trim(base, normal) was changed to MeshPy::trimByPlane(base, normal): Trims the mesh with a given plane. commit 837de28e

Draft Workbench

 * A checkbox was added to the task panel of many drafting commands. Checking it allows input of coordinates in the global coordinate system even if the working plane is not aligned with the global XY plane.


 * The Draft_Hatch.svg Draft Hatch command was introduced. It creates hatches on the faces of a selected object using patterns from AutoCAD PAT files.


 * The Draft_AddNamedGroup.svg Draft AddNamedGroup command was introduced. The Draft_AddToGroup.svg Draft AddToGroup command was extended with the same functionality.


 * Work on the Draft_SetStyle.svg Draft SetStyle command, still in progress in FreeCAD version 0.19, was completed.


 * A double-click edit option was added for Draft_Text.svg Draft Texts. It opens the same edit task panel used when creating a text.


 * For Draft_Dimension.svg Draft Dimensions the  for imperial architectural dimensions was introduced.


 * Draft_Shape2DView.svg Draft Shape2DView objects now have an property. Setting it to  can be useful if there are many Draft Shape2DViews in a document or if they are complex.


 * It is now possible to reverse a Draft Wire via the Draft_Edit.svg Draft Edit context menu. Forum discussion, Pull request #4811.

Further Draft improvements

 * Fixed Draft Snap Grid when the cursor is over a face. Forum discussion. Git commit.


 * New Draft Texts are now aligned with the working plane, Pull request #5092.


 * Support for two DWG converters was added: LibreDWG and QCAD pro. See Import Export Preferences and FreeCAD and DWG Import for more information.

Further FEM improvements

 * A new solver was added: . Multiple commits.
 * A new constraint was added: . Pull request #4982
 * The element order of Gmsh meshes can be changed via the mesh dialog. Pull request #4660
 * Material cards can now contain values for the electrical conductivity. Pull request #4647
 * Material cards added for Nitrogen and Argon. Pull request #4649
 * Support for the Gmsh mesh algorithms "HXT" (3D) and "Packing Parallelograms" (2D) added. Pull request #4654
 * Allow to set for the Gmsh property High Order Optimize a certain algorithm. Pull request #4705
 * Nonlinear solid materials with simple hardening can now have an arbitrary number of yield points. Pull request #5024
 * Allow modal adding/removal of geometric entities to constraints acting on boundaries. Pull request #5117
 * Most FEM constraint dialogs now behave uniformly and provide the same 3D object selection features. Pull request #5391

Improved support for NASTRAN GRID elements
The Mesh import tool now supports the high-precision "GRID*" element. The standard-precision "GRID" element was also improved, now supporting both space-delimited numeric input as well as fixed-field-width input, per the NASTRAN95 format documentation.

Further Mesh improvements
Fixed false negatives during self-intersection tests when facets are coplanar: Pull request #5002.

OpenSCAD Workbench
Interoperability with OpenSCAD has been improved, adding support for several operations missing from earlier versions (linear extrude with rotations, rotational extrusions). Several operations are modified to provide improved FreeCAD object equivalents, particularly for twisted extrusions. Surface generation from discrete data was modified to give more OpenSCAD-like results, rather than splined surfaces.

Add OpenSCAD element - now has additional options Load   - load a scad file Save   - save a scad file Refresh - Update FreeCAD view Clear  - Clear text input

There is also a text box for feedback of OpenSCAD errors.



Further Part improvements

 * The dialog to edit Cylinders allows now to specify an angle in respect to the normal of the chosen attachment plane. This way one can create skew cylinders. Pull request #4708

Further PartDesign improvements

 * In the Helix feature one can now also use the sketch normal as axis. Pull request #5199
 * The Sprocket feature can now create also ISO-normed sprockets. Forum thread Pull request #4478
 * The Loft and Pipe features now allow using the body's faces for sections. Pull request #5155
 * It is now possible to select several faces before calling the Pad or Pocket dialog. In this case the first selected face will be used to determine the default padding/pocketing direction. commit d34a5616
 * In the Chamfer and Fillet dialogs all edges of a body can be selected via the context menu while in Add mode. Pull request #5269 When you selected a 3D object before clicking the icon to create a fillet or chamfer, all object edges will automatically be selected. Pull request #5328
 * Chamfer and Fillet dialogs now each have a new Use all edges checkbox, which is connected to the Use All Edges property for these objects. When the box is checked the property is set to True, when unchecked the property is set to False.  When checked the Add and Remove buttons and the list box of edges are disabled and all the edges of the object will be filleted or chamfered.  Note: when Use All Edges is True there is protection against the topological naming problem because then all of the edges of the base object are used regardless of how many edges there are. Pull request #5340

Further Sketcher improvements

 * Refactored Trim support. Pull request #4330 Forum discussion <-- Needs screencasts
 * The behavior of the Sketcher_CreateSlot.svg Slot tool has changed. Slots can now be created by defining the center of both semicircles. Pull request Forum discussion
 * Visibility automation allows to open Sketcher in Section mode when entering edit mode. Pull request #4742 Forum discussion
 * Visibility automation allows to force camera in Orthographic mode when entering edit mode. Pull request #4778 Forum discussion
 * Option to display the dimensional constraint name and use a custom format for it. Pull request Forum discussion
 * When sketching a 3-point arc with Autoconstraint enabled, tangent constraint is proposed for all 3 points when hovering a line/curve. Pull request #4945 Forum discussion
 * Radius/diameter constraints are displayed using an angular rotation to ease visualization. Angle and optional randomness are user settable through parameters documented in Fine-tuning. Pull request #4934 Forum discussion
 * It is now possible to fix the angle of the direction when using the Rectangular array tool. commit Forum discussion
 * It is now possible to fix the angle of the direction when using the tools Clone, Copy and Move. commit Forum discussion
 * New Sketcher_BSplineInsertKnot.svg Insert Knot tool that allows the user to insert a knot in an existing B-spline. Pull request #5311

Spreadsheet Workbench

 * It is now possible to select in the row/column context-menu at what positions new rows/columns will be inserted. Pull request #4704.

Further Spreadsheet improvements

 * Import XLSX (used by Std Import): Added support for floor and ceil functions. Pull request #5015.
 * Cell binding: instruct a set of cells to display the contents of another set of cells. Part of Pull request #2862.
 * Improved navigation using the and  keys.
 * Improved interface for cutting and pasting blocks of cells.

Further TechDraw improvements

 * It is now possible to Copy and Move Views.
 * When there are several Pages and a View, ProjectionGroup etc. is added, there is now a dialog to ask to what page the view should be added. Pull request #5309.

External workbenches
these are the new workbenches created in this development cycle, or older workbenches that received updates. See external workbenches for more workbenches that can be installed, and which cover a wide variety of topics. If you want to see your workbench added, join the forum and present your code.

FCGear
The FCGear Workbench received a couple of improvements


 * For involute gears, the outside (aka tip) and root diameter are exposed as properties (details)
 * Gear objects are now attachable (details)
 * Gear objects can now be used as additive features in PartDesign Bodies (details)
 * The creation of gear objects now appears in the undo stack (details)