// (c) 2025 ANSYS, Inc. Unauthorized use, distribution, or duplication is prohibited.
syntax = "proto3";

package ansys.api.speos.sensor.v1;

// Integration made orthogonally with the sensor plane.
message IlluminanceTypePlanar {}
// Illuminance sensor with radial integration type.
message IlluminanceTypeRadial {}
// Illuminance sensor with hemispherical integration type.
message IlluminanceTypeHemispherical {}
// Illuminance sensor with cylindrical integration type.
message IlluminanceTypeCylindrical {}
// Illuminance sensor with semi cylindrical integration type.
message IlluminanceTypeSemiCylindrical {}

// Spectral range to use for simulation.
message WavelengthsRange {
	double w_start = 1; // Defines the minimum wavelength. (nm)
	double w_end = 2; // Defines the maximum wavelength. (nm)
	uint32 w_sampling = 3; // Defines the number of wavelengths to be taken into account between the minimum and maximum wavelengths set.
}

// Dimensions of the sensor
message SensorDimensions {
	double x_start = 1; // Start distance from center along X direction (mm).
	double x_end = 2; // End distance from center along X direction (mm).
	uint32 x_sampling = 3; // Number of pixels along X direction.
	double y_start = 4; // Start distance from center along Y direction (mm).
	double y_end = 5; // End distance from center along Y direction (mm).
	uint32 y_sampling = 6; // Number of pixels along Y direction.
}

// The sensor considers the visible spectrum and gets the results.
message SensorTypePhotometric {}
// Color results without any spectral data or layer separation.
message SensorTypeColorimetric {
	WavelengthsRange wavelengths_range = 1; // Spectral excursion to use for simulation
}
// The sensor considers the entire spectrum and gets the results.
message SensorTypeRadiometric {}
// Color results and spectral data separated by wavelength.
message SensorTypeSpectral {
	WavelengthsRange wavelengths_range = 1; // Spectral excursion to use for simulation
}

// Dimensions of the non conoscopic intensity sensor
message IntensityDimensions {
	double x_start = 1; // Start angle along X direction (deg).
	double x_end = 2; // End angle along X direction (deg).
	uint32 x_sampling = 3; // Number of pixels along X direction.
	double y_start = 4; // Start angle along Y direction (deg).
	double y_end = 5; // End angle along Y direction (deg).
	uint32 y_sampling = 6; // Number of pixels along Y direction.
}

// Dimensions of the conoscopic intensity sensor
message ConoscopicIntensityDimensions {
	double theta_max = 1; // Maximum theta angle (deg).	
	uint32 sampling = 2; // Number of pixels along Theta.	
}

// The sensor considers X direction as meridian and Y direction as parallel.
message IntensityOrientationXAsMeridian {
	IntensityDimensions intensity_dimensions = 1; // Dimensions for non conoscopic sensor
}
// The sensor considers X direction as parallel and Y direction as meridian.
message IntensityOrientationXAsParallel {
	IntensityDimensions intensity_dimensions = 1; // Dimensions for non conoscopic sensor
}
// The sensor considers conoscopic orientation.
message IntensityOrientationConoscopic {
	ConoscopicIntensityDimensions conoscopic_intensity_dimensions = 1; // Dimensions for non conoscopic sensor
}

// The polar intensity sensor generates an Iesna A type file.
message PolarIntensityIesnaA {}
// The polar intensity sensor generates an Iesna B type file.
message PolarIntensityIesnaB {}
// The polar intensity sensor generates an Iesna C type file.
message PolarIntensityIesnaC {}
// The polar intensity sensor generates an Eulumdat file.
message PolarIntensityEulumdat {}

// Near field intensity or polar intensity sensor
message SensorNearField {
	double cell_distance = 1; // Distance of the cell from the center of the intensity sensor (mm).
	double cell_integration_angle = 2; // Integration angle of the cell (deg). Used with cell_distance to calculate the cell diameter.
}

// Intensity result viewing direction
message FromSourceLookingAtSensor {}
message FromSensorLookingAtSource {}

// Dimensions of the conoscopic intensity sensor
message PolarIntensityDimensions {	
	int32 horizontal_sampling = 1; // Number of horizontal samples of the intensity file (IESNA or EULUMDAT).
	int32 vertical_sampling = 2; // Number of vertical samples of the intensity file (IESNA or EULUMDAT).
}
