0.3.0
Performance Optimizations
- Adding
__slots__for all classes - Removing all usage of
@propertycalls from internal callers (to avoid function call overhead) - Avoiding un-necessary data copying, e.g.
nodes[[0], :]creates a copy butnodes[0, :].reshape((1, 2))does not (more details) - Adding
_verifyswitches to selectively disable overly defensive value checking. Added toCurvedPolygonconstructor,Surface.evaluate_barycentric()(doc),Surface.evaluate_cartesian()(doc),Surface.evaluate_multi()(doc) andSurface.intersect()(doc). Internal callers with already verified data now skip verification steps - Bailing out
early
if surface bounding boxes are disjoint in
Surface.intersect()method
Breaking Changes
- Requiring
degreeinCurve(doc) andSurface(doc) constructors, but addingCurve.from_nodes()(doc) andSurface.from_nodes()(doc) factories to accept nodes only (computing the degree in the constructor every time is a waste of flops, especially if the caller knows the degree) - Removing
public
Curve.copy()(doc) andSurface.copy()(doc) - Removing
custom equality checks for
Curve(doc) andSurface(doc) objects. The previous implementation did not factor in all relevant values - Returning
1xDarrays instead of flattenedD-dimensional 1D arrays fromCurve.evaluate()(doc),Surface.evaluate_barycentric()(doc),Surface.evaluate_cartesian()(doc), and related helpers - Renaming
Intersection.left/rightproperties asfirst/secondproperties (They were poorly named originally, since “left” and “right” were in reference to where they were used in code, not geometry. This class is not part of the public interface, but it is documented.)
Bug Fixes
- Handling cases where one corner of a surface touches another but
their interiors don’t intersect (in the
Surface.intersect()method). Addingignored_cornerclassification to handle these curve-curve intersecions that don’t contribute to a surface-surface intersection - Throwing exception in the
Curve.locate()method when the subdivided intervals are very far apart (#13) - Improving
Surface.is_validproperty by considering the signs of the Jacobian determinant at corner nodes (#12)