Beispiel #1
0
    def _audit_fit_points(self, auditor: "Auditor"):
        name = str(self)
        order = self.dxf.degree + 1
        # Assuming end tangents will be estimated if not present,
        # like by ezdxf:
        n_fit_points_required = required_fit_points(order, tangents=True)

        # Splines with to few fit points can't be processed:
        n_fit_points = len(self.fit_points)
        if n_fit_points < n_fit_points_required:
            auditor.fixed_error(
                code=AuditError.INVALID_SPLINE_FIT_POINT_COUNT,
                message=f"Removed {name} with invalid fit point count: "
                f"{n_fit_points} < {n_fit_points_required}",
            )
            auditor.trash(self)
            return

        # Knot values have no meaning for splines defined by fit points:
        if len(self.knots):
            auditor.fixed_error(
                code=AuditError.INVALID_SPLINE_KNOT_VALUE_COUNT,
                message=f"Removed unused knot values for {name} "
                f"defined by fit points.",
            )
            self.knots = []

        # Weights have no meaning for splines defined by fit points:
        if len(self.weights):
            auditor.fixed_error(
                code=AuditError.INVALID_SPLINE_WEIGHT_COUNT,
                message=f"Removed unused weights for {name} "
                f"defined by fit points.",
            )
            self.weights = []
    def test_if_fit_point_count_is_valid(self, auditor, spline, degree):
        order = degree + 1
        spline.dxf.degree = degree
        add_n_fit_points(spline, required_fit_points(order, tangents=True) - 1)

        spline.audit(auditor)
        assert len(auditor.fixes) == 1
        assert auditor.fixes[
                   0].code == AuditError.INVALID_SPLINE_FIT_POINT_COUNT

        # Test if invalid spline will be destroyed:
        auditor.empty_trashcan()
        assert spline.is_alive is False
def test_required_fit_points_with_given_end_tangents(order, expected):
    assert required_fit_points(order, tangents=True) == expected