From d48557cc4bf2c10c5518aebeab6231fc3b33fea1 Mon Sep 17 00:00:00 2001 From: Simon Schneider <10846939+raynigon@users.noreply.github.com> Date: Wed, 27 Mar 2024 13:13:18 +0100 Subject: [PATCH] Add Illuminance Units --- settings.gradle | 8 ++++++ unit-api-core/build.gradle | 10 ++++++++ .../unit/api/core/quantities/Luminance.java | 19 ++++++++++++++ .../unit/api/core/units/si/angle/Radian.java | 21 ++++++++++++++++ .../api/core/units/si/angle/Steradian.java | 20 +++++++++++++++ .../api/core/units/si/luminance/Candela.java | 23 +++++++++++++++++ .../si/luminance/CandelaPerSquareMetre.java | 24 ++++++++++++++++++ .../api/core/units/si/luminance/Lumen.java | 25 +++++++++++++++++++ .../unit/api/core/units/si/luminance/Lux.java | 22 ++++++++++++++++ unit-api-kotlin/build.gradle.kts | 2 +- 10 files changed, 173 insertions(+), 1 deletion(-) create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java create mode 100644 unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java diff --git a/settings.gradle b/settings.gradle index 04043f00..96cab8a8 100644 --- a/settings.gradle +++ b/settings.gradle @@ -1,3 +1,11 @@ +pluginManagement { + plugins { + id 'org.jetbrains.kotlin.jvm' version '1.9.22' + } +} +plugins { + id 'org.gradle.toolchains.foojay-resolver-convention' version '0.5.0' +} rootProject.name = 'unit-api' include 'unit-api-core' diff --git a/unit-api-core/build.gradle b/unit-api-core/build.gradle index f5bdfc5b..94cc1208 100644 --- a/unit-api-core/build.gradle +++ b/unit-api-core/build.gradle @@ -1,3 +1,13 @@ +plugins { + id 'org.jetbrains.kotlin.jvm' +} dependencies { implementation("org.reflections:reflections:0.10.2") + implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk8" +} +repositories { + mavenCentral() +} +kotlin { + jvmToolchain(17) } \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java new file mode 100644 index 00000000..2a569edb --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/quantities/Luminance.java @@ -0,0 +1,19 @@ +package com.raynigon.unit.api.core.quantities; + +import javax.measure.Quantity; +import javax.measure.quantity.Area; +import javax.measure.quantity.LuminousIntensity; + +/** + * Luminous intensity per unit area of light traveling in a given direction. + * The system unit for this quantity is "cd/m²" (candela per square meter). + * + * @author Jean-Marie Dautelle + * @author Werner Keil + * @version 1.3 + * + * @see LuminousIntensity + * @see Area + */ +public interface Luminance extends Quantity { +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java new file mode 100644 index 00000000..04c0b787 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Radian.java @@ -0,0 +1,21 @@ +package com.raynigon.unit.api.core.units.si.angle; + +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; + +import javax.measure.quantity.Angle; +import javax.measure.quantity.SolidAngle; + +public class Radian extends BaseUnit { + + public Radian() { + super( + SISystem.ID, + "rad", + "Radian", + Angle.class, + UnitDimension.NONE + ); + } +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java new file mode 100644 index 00000000..6c1943fe --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/angle/Steradian.java @@ -0,0 +1,20 @@ +package com.raynigon.unit.api.core.units.si.angle; + +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; + +import javax.measure.quantity.SolidAngle; + +public class Steradian extends BaseUnit { + + public Steradian() { + super( + SISystem.ID, + "sr", + "Steradian", + SolidAngle.class, + UnitDimension.NONE + ); + } +} \ No newline at end of file diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java new file mode 100644 index 00000000..bc2ae7b9 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Candela.java @@ -0,0 +1,23 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.quantity.Illuminance; +import javax.measure.quantity.LuminousIntensity; + +public class Candela extends BaseUnit { + + public Candela() { + super( + SISystem.ID, + "cd", + "Candela", + LuminousIntensity.class, + UnitDimension.LUMINOUS_INTENSITY + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java new file mode 100644 index 00000000..d18f0d69 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/CandelaPerSquareMetre.java @@ -0,0 +1,24 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.quantities.Luminance; +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.TransformedUnit; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; + +public class CandelaPerSquareMetre extends AlternateUnit { + + @SuppressWarnings("unchecked") + public CandelaPerSquareMetre() { + super( + SISystem.ID, + "lx", + "Lux", + (Unit) (new Candela().divide(new SquareMetre())), + Luminance.class + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java new file mode 100644 index 00000000..67e872b3 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lumen.java @@ -0,0 +1,25 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.general.BaseUnit; +import com.raynigon.unit.api.core.units.general.UnitDimension; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.angle.Steradian; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; +import javax.measure.quantity.LuminousFlux; + +public class Lumen extends AlternateUnit { + + @SuppressWarnings("unchecked") + public Lumen() { + super( + SISystem.ID, + "lm", + "Lumen", + (Unit) new Candela().multiply(new Steradian()), + LuminousFlux.class + ); + } +} diff --git a/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java new file mode 100644 index 00000000..832b65f3 --- /dev/null +++ b/unit-api-core/src/main/java/com/raynigon/unit/api/core/units/si/luminance/Lux.java @@ -0,0 +1,22 @@ +package com.raynigon.unit.api.core.units.si.luminance; + +import com.raynigon.unit.api.core.units.general.AlternateUnit; +import com.raynigon.unit.api.core.units.si.SISystem; +import com.raynigon.unit.api.core.units.si.area.SquareMetre; + +import javax.measure.Unit; +import javax.measure.quantity.Illuminance; + +public class Lux extends AlternateUnit { + + @SuppressWarnings("unchecked") + public Lux() { + super( + SISystem.ID, + "lx", + "Lux", + (Unit) new Lumen().divide(new SquareMetre()), + Illuminance.class + ); + } +} diff --git a/unit-api-kotlin/build.gradle.kts b/unit-api-kotlin/build.gradle.kts index 27f7b027..30450184 100644 --- a/unit-api-kotlin/build.gradle.kts +++ b/unit-api-kotlin/build.gradle.kts @@ -2,7 +2,7 @@ import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { - kotlin("jvm") version "1.9.22" + kotlin("jvm") id("org.jlleitschuh.gradle.ktlint") version "12.1.0" // Auto Update Versions