OCC currently does not reliably enforce linear deflection on curved
surfaces, especially curved lofts over nurbs splines. To avoid surprises
when tight tolerances are needed, replace the static default angular
deflection of 0.5 radians (~28 degrees), with a more sensible angular
deflection derived from the provided linear deflection tolerance.
By adding the default heuristic to TopoShape, we can keep typical
tessellate() and STL export functionality users simple, and also avoid
the need to implement similar heuristics in many places. If more
explicit control over angular deflection is needed for some use cases,
then we could still choose to expose the option to override the derived
default explicitly.
The hope is that OCC's linear deflection enforcement will be more
reliable at some point, at which point this heuristic will no longer be
needed.
In the past it used the `Draft.calculatePlacementsOnPath` function
but this function was moved and modified when the `PathArray`
was improved. The `calculatePlacementsOnPath` function
was moved to `draftobjects.patharray`
and renamed `placements_on_path`.
This doesn't completely fix the Fence object because some other
modifications need to be done in the calculation of the paths.
- Add `CutPattern` feature, defaulting to `ZigZag`.
- Change inter-pass retractions to SafeHeight for multi-pass operations.
- Fix division by zero instance for particular Perpendicular use case.
- Synchronize property values with inputs in both the Property View and Tasks Editor windows.
- Change `LayerMode` default value to `Multi-pass`.
- Improve debug messaging.
- Consolidate code and remove unused code.
Path: fix exception thrown
For huge models just parsing the IFC file in ifcopenshell takes
significant time. When importing via IFC explorer from the BIM
workbench, the file is already open.
This change allows to pass the ifcopenshell.file object instead of a
filename, making the process much more efficient.
Backwards compatible code to use this will be submitted for the BIM
workbench soon. Then we have a workflow, where we can insert items
from big IFC files in multiple rounds quickly.
The classes `ViewProviderDimensionBase`, `ViewProviderLinearDimension`,
`ViewProviderAngularDimension`, `ViewProviderText`, and
`ViewProviderLabel` use `super()` to call the `onChanged` method
of the parent class `ViewProviderDraftAnnotation`.
In this way the `AnnotationStyle` property correctly modifies
the properties of every annotation object.
Add view properties of dimensions, labels, and text objects
through methods, calling the parent classes, and `ViewProviderDraftAnnotation`
when needed.
This class is the base of the viewproviders of annotation-type
objects like dimensions (linear, radial, angular), labels,
and texts.
The basic properties of `ViewProviderDraftAnnotation`
are set up by a method `set_properties`, which can be called
in the derived classes.
In the general proxy object `DraftAnnotation` we implement
the `onDocumentRestored` method in order to add the missing
view property `AnnotationStyle` to older objects.
These style properties are used by `ViewProviderDraftAnnotation`
and by the Gui Command `Draft_AnnotationStyleEditor`.
Therefore, they are moved from `draftguitools.gui_annotationstyleeditor`
module to the `draftutils.utils` module, so that they
are in a central location where they won't cause circular
dependencies.
New slotting operation:
- Accepts selection of up to two features.
- Selectable features include: faces, edges, and vertices.
- User may select a single face or edge, or a pair of features.
- The path may be extended at the start and end.
- The path may be reversed.
- The path may be altered to the perpendicular in some cases.
- A unique Slot icon is included.
- Includes simple collision detection with warning message.
Two new properties, `ExpandProfile` (length) and `ExpandProfileStepOver` (percent) added for new feature.
New feature converts the normal single offset profile into a compound profile containing multiple increasing/decreasing offsets.
The new feature clears a each layer completely before stepping down to the next layer.
Adjust sorting procedure in PathAreaOp due to `ExpandProfile` modifications to open edges code.