Source code for gcs.verify.verify_radius

from __future__ import annotations

from typing import TYPE_CHECKING
import numpy as np
from gcs.utils import optimal_scaling_factor, summed_cosine

if TYPE_CHECKING:
    import gcs

# Minimum radius (mm)
MIN_RADIUS = 0.01


[docs]def verify_radius(shape: gcs.GCS, verbose: bool = False) -> bool: """Checks if the GCS minimum radius is valid. This check reduces the risk of print defects by ensuring print paths are well spaced. Parameters ---------- shape : GCS.gcs The GCS. verbose : bool, (default=`False`) Set to `True` to receive verify messages. Returns ------- valid : bool `True` if ``shape`` passes the radius check. Examples -------- >>> shape = gcs.GCS(...) >>> check = gcs.verify.verify_radius(shape=shape) >>> shape = gcs.GCS(...) >>> check = shape.valid_radius """ parameters = shape.parameters thetas = np.arange(start=0, stop=2 * np.pi, step=parameters['d_theta']) r0 = optimal_scaling_factor(length=shape.base_perimeter, c4=parameters['c4_base'], c8=parameters['c8_base'], n_steps=thetas.size) radii = np.apply_along_axis(func1d=summed_cosine, axis=0, arr=thetas, r0=r0, c4=parameters['c4_base'], c8=parameters['c8_base']) min_base_radius = np.min(radii) r0 = optimal_scaling_factor(length=shape.top_perimeter, c4=parameters['c4_top'], c8=parameters['c8_top'], n_steps=thetas.size) radii = np.apply_along_axis(func1d=summed_cosine, axis=0, arr=thetas, r0=r0, c4=parameters['c4_top'], c8=parameters['c8_top']) min_top_radius = np.min(radii) min_radius = np.min([min_base_radius, min_top_radius]) valid = bool(min_radius >= MIN_RADIUS) if verbose: if not valid: print(f'minimum radius ({min_radius}) is less then {MIN_RADIUS}.') return valid