After discussion in several recent PR review meetings the Maintainer
team has decided to roll back some recent work on object naming in STEP
files. Inadequate automated testing has led to a situation where every
change made to address one bug introduces another someplace else. It
is difficult to determine which, if any, of these fixes represent an
appropriate path forward, versus fixing a symptom rather than the
underlying problem.
---
Revert "[pre-commit.ci] auto fixes from pre-commit.com hooks"
This reverts commit 59715114f5.
Revert "core: fix various issues exporting step files, ie. #25540#24962#25567"
This reverts commit e226e9b06e.
Revert "export: step file preserve last feature when exporting step file, fix issue #25567"
This reverts commit 9c48c9a3e3.
Revert "core: preserve body name in step file when exporting part that contains body with feature, fixes#24962"
This reverts commit 246218b28b.
Revert "Import: STEP export preserve body names (#25042)"
This reverts commit f218c5f25c.
Revert "Import: Export tip when body is selected (#24678)"
This reverts commit 6fd6558040.
When importing DXF files using the C++ importer, TEXT and MTEXT entities
had incorrect heights. For example:
- text with height 100mm in the DXF file was imported as 35.28mm in FC.
The scaling factor was consistent to be 0.3528.
The issue was that we were applying a point-to-millimeter conversion to
the text height , but that seems to be incorrect since according to DXF
spec, TEXT and MTEXT entity heights are always specified in drawing
units, not in points, so just remove that code.
Similar case to the previous commit related to closed polylines having
coincident vertices, but this time for import. Basically if importing
DXF files containing closed polylines, FC would throw an exception.
This was because `BuildWireFromPolyline()` function in the DXF importer
attempted to create a closing edge for closed polylines by connecting
the last vertex back to first vertex.
So, this patch adds a skip for the closing edge if the vertices are
coincident.
AS the title says - when exporting closed curves (ellipses for example)
as polylines with the "Treat ellipses and splines as polylines" option,
the generated DXF file contained duplicate vertices. For example, an
ellipse polyline would have vertex1 and vertex40 which are identical in
terms of coordinates. This has caused exception upon importing.
Cause of that was that discretizer was blindly iterating through all
discretized points without checking if the first and last points are
coincident.
So, this patch adds a check for that to detect and skip the last
coincident point if it is in fact coincident during Export.
Currently if users enabled the "Treat ellipses and splines as polylines"
option in DXF export preferences and exported them, they were still
being exported as native primitives.
This was because we were reading from a wrong preferences location, UI
stored it in `BaseApp/Preferences/Mod/Draft`, but it was read from
`BaseApp/Preferences/Mod/Import`. Since the pref didn't exist, we were
taking default value which was set to `false`.
So the solution is obvious - just set it to the correct path.
Currently `removeSplitter()` function attempts to merge coplanar faces
by using `ModelRefine::FaceUniter`, which internally uses
`BRepBuilderAPI_Sewing`. This can fail in several scenarios, like
inability to produce a valid shell, failing in face unification due
to geometry incompatibilities, or when we have tolerance issue in the
reconstructed geometry from glTF triangulation that prevent us from face
merging.
That leads to the exception, which we are not handling correctly where
it's being handled the same way as this patch introduces in other parts
of FreeCAD.
So, this patch adds a try-catch block around `removeSplitter()` to
gracefully handle `Standard_Failure` exception and return the sewn shape
instead of crashing. Imported model will contain more individual faces
than necessary (since coplanar won't be merged), resulting in a more
complex topology in the places of those fails, but geometry and visual
appearance will be preserved.
* Removed outdated UTF8 declaration
* [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>
"Professional CMake" book suggest the following:
"Targets should build successfully with or without compiler support for precompiled headers. It
should be considered an optimization, not a requirement. In particular, do not explicitly include a
precompile header (e.g. stdafx.h) in the source code, let CMake force-include an automatically
generated precompile header on the compiler command line instead. This is more portable across
the major compilers and is likely to be easier to maintain. It will also avoid warnings being
generated from certain code checking tools like iwyu (include what you use)."
Therefore, removed the "#include <PreCompiled.h>" from sources, also
there is no need for the "#ifdef _PreComp_" anymore
only 4 of these warnings are still relevant, CMake shall be used to disable them
Compiler definitions:
NOMINMAX:
* is already globally defined in SetGlobalCompilerAndLinkerSettings.cmake
WIN32_LEAN_AND_MEAN:
* use CMake target_compile_options on relevant targets
Warnings that still occur:
C4251, C4273, C4275: all related to dllimport / export
* use CMake target_compile_options on relevant targets
C4661: no suitable definition provied for explicit template instantiation request
* triggered in Mesh because of Vector3D in Base - not all functions are defined in header
* use CMake target_compile_options on relevant targets
Warnings that are Currently not triggered (fix code if they appear again):
C4005: macro redefinition
C4244: argument conversion, possible loss of data
C4267: conversion from size_t to type, possible loss of data
C4305: truncation from type1 to type2
* only occurrence disabled in Reader.cpp
C4522: multiple assignment operator specified
C5208: unnamed class in typedef name
Obsolete Compiler warnings:
C4181: not mentioned in Microsoft docs anymore
C4290: C++ exception specification ignored except to indicate a function is not __declspec(nothrow)
* throw(optional_type_list) deprecated in C++17
C4482: nonstandard extension used: enum 'enumeration' used in qualified name
* not generated for compilers that support C++11
C4503: 'identifier': decorated name length exceeded, name was truncated
* obsolete since Visual Studio 2017
C4786: not mentioned in Microsoft docs anymore
* Import: DXF importer, block and inserts overhaul
Implement support for blocks as definitions and inserts
as instances.
A BLOCK definition becomes a hidden master object in a
_BlockDefinitions group (currently a Part::Compound).
An INSERT becomes a visible App::Link that points to
that master definition.
* Import: DXF parser/importer add debug print statements
* Import: DXF importer, various improvements
- Add more code comments
- Correctly increase object count
- Improve readability of anonymous block checks
* Import: DXF (all) report anonymous blocks separately
* Import: DXF importer (App + GUI) add nested inserts support
* Import: DXF importer (GUI) fix preserving colors for inserts
* Import: DXF importer, make primitives naming more specific
* Import: DXF parser/importer remove debug print statements
* Import: DXF parser, work around DXF color index 7
* Import: DXF importer GUI, temporary debug print to show layer color data
* Import: DXF importer, fix nested inserts hierarchy
* Import: DXF importer, prefix and suffix underscores to names
To work around mangling from FreeCAD's unique name generator.
* Import: DXF importer, implement flattening blocks on import
* Revert "Import: DXF importer GUI, temporary debug print to show layer color data"
This reverts commit b6ece395c9d2b8a1e0796d6f7b0d58842a2f3686.
* Import: DXF importer, fix imported text orientation
The DXF file provides the text rotation angle in degrees.
The used rotZ function expects the angle in radians,
thus the conversion needs to be made.
Fixes: #21548
* Import: DXF importer, honour the preference to not import layouts
* Import: DXF importer, move unreferenced blocks to separate group
This provides better classification, but it has a performance hit:
we import all blocks as before, we sort them and we reparent them
to the correct group. The reparentipart with Grou.setValues()
appears to be an expensive call. Probably because internally the
FreeCAD dependency graph is modified.
* Import: DXF importer, count compound children in the report
* Import: DXF importer, cleanup defined blocks group if empty
Now for unsupported features we report on line numbers and on the entity
handle, in case that unsupported feature is a DXF entity. To avoid
flooding the output, only a maximum of 5 instances are reported with
details. The rest simply add up to the global count and are ellipsized
in the report.
Report output is now in sentence case.