MultiFocusRequest.java
package org.fresnel.backend.api;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import jakarta.validation.constraints.Positive;
import org.fresnel.optics.MaskType;
import org.fresnel.optics.MultiFocusParameters;
import org.fresnel.optics.Polarity;
import java.util.ArrayList;
import java.util.List;
/** REST request body for a multi-point / line focus design. */
public record MultiFocusRequest(
@NotNull @Positive Double apertureDiameterMm,
@NotEmpty List<FocusPointDto> focusPoints,
@NotNull @Positive Double wavelengthNm,
@NotNull @Positive Double dpi,
MaskType maskType,
Polarity polarity
) {
public record FocusPointDto(
@NotNull Double xMm,
@NotNull Double yMm,
@NotNull @Positive Double zMm
) {
public MultiFocusParameters.FocusPoint toCore() {
return new MultiFocusParameters.FocusPoint(xMm, yMm, zMm);
}
}
public MultiFocusParameters toParameters() {
List<MultiFocusParameters.FocusPoint> pts = new ArrayList<>();
for (FocusPointDto d : focusPoints) pts.add(d.toCore());
return new MultiFocusParameters(
apertureDiameterMm, pts, wavelengthNm, dpi,
maskType == null ? MaskType.BINARY_AMPLITUDE : maskType,
polarity == null ? Polarity.POSITIVE : polarity);
}
}