HexMacroCellRequest.java

package org.fresnel.backend.api;

import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import org.fresnel.optics.HexMacroCellParameters;
import org.fresnel.optics.MaskType;
import org.fresnel.optics.Polarity;

/** REST request body for a hexagonal macro cell design. */
public record HexMacroCellRequest(
        @NotNull @Positive Double macroRadiusMm,
        @NotNull @Positive Double subDiameterMm,
        @NotNull @Positive Double subPitchMm,
        @NotNull @Positive Double focalLengthMm,
        Double targetOffsetXmm,
        Double targetOffsetYmm,
        @NotNull @Positive Double wavelengthNm,
        @NotNull @Positive Double dpi,
        MaskType maskType,
        Polarity polarity
) {
    public HexMacroCellParameters toParameters() {
        return new HexMacroCellParameters(
                macroRadiusMm, subDiameterMm, subPitchMm,
                focalLengthMm,
                targetOffsetXmm == null ? 0.0 : targetOffsetXmm,
                targetOffsetYmm == null ? 0.0 : targetOffsetYmm,
                wavelengthNm, dpi,
                maskType == null ? MaskType.BINARY_AMPLITUDE : maskType,
                polarity == null ? Polarity.POSITIVE : polarity);
    }
}