When facemakers were introduced, Solid property of Revolve and Extrude
was made strict: it calls facemaker if Solid==true, and facemaker would
fail if shape being extruded/revolved is a face.
This is fixed by testing there are no faces in source shape prior to
calling facemaker.
Part::FaceMaker::ConstructFromType() could return null pointer if
abstract class type is supplied.
Here, it is fixed by checking for null pointer in facemaker itself,
rather than in every place ConstructFromType is being used.
new features supported:
* fill offset in collective mode when result wires are closed
* offsetting faces in collective mode
Remaining TODOs:
- collective offset of open wires in "skin" mode
* new Part.Shape.Face() constructor footprints with facemaker class
supplied as string mane of C++ class.
* add Part.makeFace method that uses facemaker.
FaceMakerCheese: based on code extracted from Part FeatureExtrude,
exactly the same as facemaking code in PartDesign.
FaceMakerBullseye: new facemaker, that supports nesting like hole inside
a face inside a hole of another face...
Fixes#2699
It was found out that when direction of normal found by FindPlane
depends on if we are using result of offset directly, or after copying.
The fix (workaround) is to copy offset result inside offset routine, so
that no unstable behavior makes its way to the user.
Supports:
* offsetting wire, compound of wires.
* offsetting compounds in collective or independent manners
('intersection' parameter)
* two offset modes (parameter 'allowOpenResult')
* filling offset when offsetting one wire, or compound in independent
manner
Not supported yet (planned):
* filling offset when offset in collective manner (intersection= true)
* offsetting planar faces
* split Dir into Dir+Length; added second Length
* support for parametric linked direction: to arbitrary edge, and to
normal
* options: reverse, symmetric
* second taper angle
* changed offset join mode for tapered extrusion on OCCT7
I didn't know BRepAdaptor_Curve does not take shape orientation
(reverseness) into account.
The commit can break existing projects. If revolution feature was
created with axis linked to reversed edge, and angle span is not 360,
the revolution direction will now swap. The chances of this situation
are pretty low, and revolution supports axis linkage for not long yet.
So I hope it won't cause any noticeable trouble.
--DeepSOIC