The profile operation is forcing cut side to `Outside` when profiling whole models. This change in code also allows for profiling `Inside` of entire models. Apart from limiting profiling capabilities of entire models, this override could cause problems with profiling of selected faces or edges in very specific use cases. Also, this fix removes the property assignment of a key control property within the execution code, which should not happen, apart from feedback properties.
Remove all first-draft rotational-related code from Path workbench to make way for more stable, long-term integration of a rotational indexing capability.
When profiling open edges, the user must currently select a top edge and then set the Final Depth manually to a value below the selected edge(s).
This fix provides the user with feedback for the empty path generated.
Fix error when working with selections containing edges and faces. This fix effectively processes edges and only passes faces on to next processing step. This simplifies the code a bit and changes some `obj.Base` references to `otherBase` to improve readability.
Path: Improve `obj.Base` reading and processing
`obj.Base` is first read in `self._processEdges()`. All edges are identified and processed there. Remaining features are saved in `remainingObjBaseFeatures` to be processed in the next section of the Profile code.
Path: Change `if` to `elif`
This fixes error when attempting to profile loop of vertical faces, thus maintaining original Profile Faces behavior by default for vertical looped face set.
Error discovered during recent troubleshooting of Pocket_Shape with rotation.
Initial application of new operation yields path, but subsequent changes and applications failed due to `if ...` statement removed here for the fix.
Generalize the `extractFaceOffset` method to `getOffsetArea`, which can
handle both face offsetting and projection. Another difference is that
the new method exposes Area's ability to preserve internal holes,
defaulting to preserving. The method is moved to the PathUtils module,
reflecting its generality and fairly wide used across Path.
This method is then used to provide a drop-in alternative to
`FindUnifiedRegions` via a small wrapper in PathSurfaceSupport. The Area
implementation is generally quick, but can fail (throw) in some cases,
so the wrapper is trying the Area method as an optimization first, and
falls back to the full `FindUnifiedRegions` logic if that fails.
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.
The 0.25 constant used might need to be modified later. Or, the entire `_makeIntersectionTags()` method might need to be improved if other micro-edge use cases cause failure.
Open-edges will now work in simple cases where user selects bottom edge, without requiring adjustment to Final Depth. This will speed up procedural usage of the operation for open edges by re-enabling the `select-edge_create_OK` work flow.
The guessing procedure for Final Depth based on Base Geometry selected is fixed in `UpdateDepths()` method.
Improvements to user messages.
Remove unnecessary code and comments.
Improve debugging feedback.