* 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
* Draft: Remove main QGroupBox from Circular Array tool
* Draft: Remove main QGroupBox from Polar Array tool
* Draft: Remove main QGroupBox from Ortho Array tool
* Draft: Remove AxisMode QGroup from Ortho Array tool
* Draft: Remove main QGroup from ShapeString tool
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.
Draft Label ViewObject.Justification property was overriden by Object.StraightDistance property. The Justification in the 3D view was reset after recompute. This commit fixes the problem by setting Object.StraightDistance automatically when ViewObject.Justification is changed and vice versa. Also fixes the frame position when Justification is Center.
* Fix#19422 SVG: use tag create wrong size object
Fix#19072 SVG: import <defs> keyword as object without <use>
and Fix bug that not reported, <symbol> keyword as object without <use>
and Fix bug that not reported, nested use tag not import correctly.
To do this. I make preprocessor that replace use tag to it's referenced object.
and remove symbol tag and defs tag from loaded svg.
there is a subeffect, name of imported object that related to symbol tag is changed.
* Fix incorrect import when use tag nesting context.
* fix error when use tag not exist.
* rebased aprospero PR20293.
fix several bugs.
1,x and y attribute of use tag is not processed under certain condition.
2,Doesn't finish importing when referenced ID is not exist.
3,Doesn't finish importing when use tag use href instead of xlink:href
* Refactor: Use data.get() for cleaner dictionary key handling
* Refactored code for simplicity following suggested changes.
* Add <a> tag support.( <a>tag is almost same with <g> tag at visual effect )
* Correct mistakes in the if condition handling href and xlink:href
* Modify the code to retain the original namespace definitions, as removing all namespaces may cause incorrect importing process.
* Draft: Introduce 1-axis mode for ortho array
As the title says - the 1 axis mode allows to switch between all of the
axises mode and allows to modify only 1 axis at the time that user can
select with the checkbox.
* Draft: Rename to Linear Mode and remove redundant comments
* Draft: Display only one interval for the selected axis
* Draft: Cache selected variables in user.cfg - axis mode, intervals, etc...
* Draft: Make sure the checkboxes in OrthoArray are exclusively selected
* Draft: Apply review comments
Changed a couple of things according to review:
* linear mode is now being used as default during first startup (it
wasn't before)
* applied Roy's comments about coding style, etc.
* grouped everything into separate QGroupBox which is dedicated for
Linear Mode and has it's own labels, although spinboxes are shared so
during mode switch we reparent them now
* removed Orthogonal Array's icon
* in the QGroup applied naming suggested in the review, X Intervals ->
interval, etc.
* changed to radio buttons since we want exclusivity in selection
Fixes: #7387.
See comment: https://github.com/FreeCAD/FreeCAD/issues/7387#issuecomment-2915599566
PR to change the base object of BezCurve, BSpline and Wire to `Part::FeaturePython`. This will only affect new objects. So code will have to also keep handling the old object type (`Part::Part2DObjectPython`).
The modification of BimPreflight.py needs to be verified. The steps in the old code lacked logic IMO. But I may have misunderstood.
This PR fixes a V1.1 regression.
The default for the last point should be the origin of the working plane if Global mode is off.
Forum topic:
https://forum.freecad.org/viewtopic.php?t=97452
* The new align_to_face_and_edge functions would align the Y axis to the edge. This should be the X axis.
* The align_to_point_and_axis functions did not accept a zero length upvec.
* Added a return value to the _next function for compatibilty with its counterpart the _previous function.
* BIM: Use checkbox in model tree for Activation/Deactivation of WP
* BIM: Set active object after deactivating current object if it exists
Currently we can get into a scenario where user can activate two working
planes, one after another. For example, Level, and then Level001. If
they activate both, and then deactivate Level001, working plane switches
back to Level. But, we didn't set the object as the active one, so user
didn't have clear information that they can deactivate it, only the
working plane was switching it.
So this patch sets the object as the active one, if it exists.
* BIM: Add support for deactivation active object to BIM Views Tree
As the title says - it adds the checkbox that's similarly done in Part
workbench, so user can select/deselect the item and if they had previous
active object, it will also fall back to the previous object.
Also, moved out part of the common logic from ArchBuildingPart and
BimViews to utils.
* BIM: Handle correct context on activating WP for NativeIFC/BIM
* BIM: Remove redundant logic from BIM Views upon double click
As all of the logic is being handled now in `activate` function in
BimViews, this logic is redundant
* BIM: Rename button for taskbar and BIM Views from Activate to Active
* Allow to align the working plane on selected edge + face of a same object, which aligns the plane with the face, but positions it on the edge (the WP is positioned on the edge's first vertex, the WP's X axis is aligned with the edge, and the face's center point provides the third point to define the plane)
* Added a "Recenter" in-command shortcut. This moves the WP to be centered on the current snap position (the WorkingPlane snap button is taken into account, so one can only move the WP in the same plane or not).
The 'CTRL to snap' option is not the default, it should therefore not be included in the tooltips.
Additionally:
* Some obsolete info was removed.
* Some minor improvements,