From 406a834a6d5247668e824fc198918c60f3f0b02d Mon Sep 17 00:00:00 2001 From: marioalexis Date: Thu, 27 Mar 2025 09:31:07 -0300 Subject: [PATCH] Base: Add volume charge density unit --- src/App/Application.cpp | 1 + src/App/PropertyUnits.cpp | 11 +++++++++++ src/App/PropertyUnits.h | 13 +++++++++++++ src/Base/Unit.cpp | 4 +++- src/Base/Unit.h | 1 + src/Base/UnitsSchemaInternal.cpp | 8 ++++++-- src/Base/UnitsSchemaMKS.cpp | 4 ++++ 7 files changed, 39 insertions(+), 3 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 6c7c5222d5..54099df40c 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -2045,6 +2045,7 @@ void Application::initTypes() App::PropertyElectricalResistance ::init(); App::PropertyElectricCharge ::init(); App::PropertySurfaceChargeDensity ::init(); + App::PropertyVolumeChargeDensity ::init(); App::PropertyElectricCurrent ::init(); App::PropertyElectricPotential ::init(); App::PropertyElectromagneticPotential ::init(); diff --git a/src/App/PropertyUnits.cpp b/src/App/PropertyUnits.cpp index b4ed219cd9..f2c30c6dce 100644 --- a/src/App/PropertyUnits.cpp +++ b/src/App/PropertyUnits.cpp @@ -403,6 +403,17 @@ PropertySurfaceChargeDensity::PropertySurfaceChargeDensity() setUnit(Base::Unit::SurfaceChargeDensity); } +//************************************************************************** +// PropertyVolumeChargeDensity +//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + +TYPESYSTEM_SOURCE(App::PropertyVolumeChargeDensity, App::PropertyQuantity) + +PropertyVolumeChargeDensity::PropertyVolumeChargeDensity() +{ + setUnit(Base::Unit::VolumeChargeDensity); +} + //************************************************************************** // PropertyElectricCurrent //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ diff --git a/src/App/PropertyUnits.h b/src/App/PropertyUnits.h index e81a8fd9c3..2e2cca365c 100644 --- a/src/App/PropertyUnits.h +++ b/src/App/PropertyUnits.h @@ -374,6 +374,19 @@ public: ~PropertySurfaceChargeDensity() override = default; }; +/** VolumeChargeDensity property + * This is a property for representing volume charge density. It is basically a float + * property. On the Gui it has a quantity like C/m^3. + */ +class AppExport PropertyVolumeChargeDensity: public PropertyQuantity +{ + TYPESYSTEM_HEADER_WITH_OVERRIDE(); + +public: + PropertyVolumeChargeDensity(); + ~PropertyVolumeChargeDensity() override = default; +}; + /** ElectricCurrent property * This is a property for representing electric currents. It is basically a * float property. On the Gui it has a quantity like A. diff --git a/src/Base/Unit.cpp b/src/Base/Unit.cpp index 17a30adb44..baa782972d 100644 --- a/src/Base/Unit.cpp +++ b/src/Base/Unit.cpp @@ -587,7 +587,7 @@ std::string Unit::getString() const std::string Unit::getTypeString() const { - static std::array, 56> unitSpecs {{ + static std::array, 57> unitSpecs {{ { Unit::Acceleration, "Acceleration" }, { Unit::AmountOfSubstance, "AmountOfSubstance" }, { Unit::Angle, "Angle" }, @@ -604,6 +604,7 @@ std::string Unit::getTypeString() const { Unit::ElectricalResistance, "ElectricalResistance" }, { Unit::ElectricCharge, "ElectricCharge" }, { Unit::SurfaceChargeDensity, "SurfaceChargeDensity" }, + { Unit::VolumeChargeDensity, "VolumeChargeDensity" }, { Unit::ElectricCurrent, "ElectricCurrent" }, { Unit::ElectricPotential, "ElectricPotential" }, { Unit::ElectromagneticPotential, "ElectromagneticPotential" }, @@ -683,6 +684,7 @@ const Unit Unit::ElectricalInductance (2, 1, -2, -2); const Unit Unit::ElectricalResistance (2, 1, -3, -2); const Unit Unit::ElectricCharge (0, 0, 1, 1); const Unit Unit::SurfaceChargeDensity (-2, 0, 1, 1); +const Unit Unit::VolumeChargeDensity (-3, 0, 1, 1); const Unit Unit::ElectricPotential (2, 1, -3, -1); const Unit Unit::ElectromagneticPotential (1, 1, -2, -1); const Unit Unit::Force (1, 1, -2); diff --git a/src/Base/Unit.h b/src/Base/Unit.h index b47d5c26ae..77b2273b3d 100644 --- a/src/Base/Unit.h +++ b/src/Base/Unit.h @@ -111,6 +111,7 @@ public: static const Unit ElectricPotential; static const Unit ElectricCharge; static const Unit SurfaceChargeDensity; + static const Unit VolumeChargeDensity; static const Unit MagneticFieldStrength; static const Unit MagneticFlux; static const Unit MagneticFluxDensity; diff --git a/src/Base/UnitsSchemaInternal.cpp b/src/Base/UnitsSchemaInternal.cpp index 4ef3fd217d..c1bf33c321 100644 --- a/src/Base/UnitsSchemaInternal.cpp +++ b/src/Base/UnitsSchemaInternal.cpp @@ -370,8 +370,12 @@ UnitsSchemaInternal::schemaTranslate(const Quantity& quant, double& factor, std: factor = 1.0; } else if (unit == Unit::SurfaceChargeDensity) { - unitString = "C/m^2"; - factor = 1e-6; + unitString = "C/mm^2"; + factor = 1.0; + } + else if (unit == Unit::VolumeChargeDensity) { + unitString = "C/mm^3"; + factor = 1.0; } else if (unit == Unit::CurrentDensity) { if (UnitValue <= 1e3) { diff --git a/src/Base/UnitsSchemaMKS.cpp b/src/Base/UnitsSchemaMKS.cpp index 0727c161c4..42ea0b0c79 100644 --- a/src/Base/UnitsSchemaMKS.cpp +++ b/src/Base/UnitsSchemaMKS.cpp @@ -320,6 +320,10 @@ UnitsSchemaMKS::schemaTranslate(const Quantity& quant, double& factor, std::stri unitString = "C/m^2"; factor = 1e-6; } + else if (unit == Unit::VolumeChargeDensity) { + unitString = "C/m^3"; + factor = 1e-9; + } else if (unit == Unit::CurrentDensity) { if (UnitValue <= 1e3) { unitString = "A/m^2";