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