Skip to content

Commit

Permalink
Added stiffness units to FreeCAD [mN/m, N/m, kN/m, MN/m]
Browse files Browse the repository at this point in the history
  • Loading branch information
Helios113 committed Aug 16, 2021
1 parent 09d9caf commit 4ab37fc
Show file tree
Hide file tree
Showing 14 changed files with 469 additions and 357 deletions.
6 changes: 6 additions & 0 deletions src/App/ExpressionParser.l
Expand Up @@ -248,6 +248,12 @@ EXPO [eE][-+]?[0-9]+
"kN" COUNTCHARS; yylval.quantity.scaler = Quantity::KiloNewton; yylval.quantity.unitStr = yytext; return UNIT; // kilo Newton
"MN" COUNTCHARS; yylval.quantity.scaler = Quantity::MegaNewton; yylval.quantity.unitStr = yytext; return UNIT; // mega Newton

"N/m" COUNTCHARS; yylval.quantity.scaler = Quantity::NewtonPerMeter; yylval.quantity.unitStr = yytext; return UNIT; // NewtonPerMeter (N/m or kg/s^2)
"mN/m" COUNTCHARS; yylval.quantity.scaler = Quantity::MilliNewtonPerMeter; yylval.quantity.unitStr = yytext; return UNIT; // milli NewtonPerMeter
"kN/m" COUNTCHARS; yylval.quantity.scaler = Quantity::KiloNewtonPerMeter; yylval.quantity.unitStr = yytext; return UNIT; // kilo NewtonPerMeter
"MN/m" COUNTCHARS; yylval.quantity.scaler = Quantity::MegaNewtonPerMeter; yylval.quantity.unitStr = yytext; return UNIT; // mega NewtonPerMeter


"Pa" COUNTCHARS; yylval.quantity.scaler = Quantity::Pascal; yylval.quantity.unitStr = yytext; return UNIT; // Pascal (kg/m*s^2 or N/m^2)
"kPa" COUNTCHARS; yylval.quantity.scaler = Quantity::KiloPascal; yylval.quantity.unitStr = yytext; return UNIT; // kilo Pascal
"MPa" COUNTCHARS; yylval.quantity.scaler = Quantity::MegaPascal; yylval.quantity.unitStr = yytext; return UNIT; // mega Pascal
Expand Down
7 changes: 7 additions & 0 deletions src/App/FreeCADInit.py
Expand Up @@ -707,6 +707,11 @@ def report(self,msg,func,*args,**kargs):
App.Units.KiloNewton = App.Units.Quantity('kN')
App.Units.MegaNewton = App.Units.Quantity('MN')

App.Units.NewtonPerMeter = App.Units.Quantity('N/m')
App.Units.MilliNewtonPerMeter = App.Units.Quantity('mN/m')
App.Units.KiloNewtonPerMeter = App.Units.Quantity('kN/m')
App.Units.MegaNewtonPerMeter = App.Units.Quantity('MN/m')

App.Units.Pascal = App.Units.Quantity('Pa')
App.Units.KiloPascal = App.Units.Quantity('kPa')
App.Units.MegaPascal = App.Units.Quantity('MPa')
Expand Down Expand Up @@ -828,6 +833,8 @@ def report(self,msg,func,*args,**kargs):
App.Units.Work = App.Units.Unit(2,1,-2)
App.Units.Power = App.Units.Unit(2,1,-3)

App.Units.Stiffness = App.Units.Unit(0,1,-2)

App.Units.SpecificEnergy = App.Units.Unit(2,0,-2)
App.Units.ThermalConductivity = App.Units.Unit(1,1,-3,0,-1)
App.Units.ThermalExpansionCoefficient = App.Units.Unit(0,0,0,0,-1)
Expand Down
5 changes: 5 additions & 0 deletions src/Base/Quantity.cpp
Expand Up @@ -314,6 +314,11 @@ Quantity Quantity::MilliNewton (1.0 ,Unit(1,1,-2));
Quantity Quantity::KiloNewton (1e+6 ,Unit(1,1,-2));
Quantity Quantity::MegaNewton (1e+9 ,Unit(1,1,-2));

Quantity Quantity::NewtonPerMeter (1.00 ,Unit(0,1,-2)); //Newton per meter (N/m or kg/s^2)
Quantity Quantity::MilliNewtonPerMeter (1e-3 ,Unit(0,1,-2));
Quantity Quantity::KiloNewtonPerMeter (1e3 ,Unit(0,1,-2));
Quantity Quantity::MegaNewtonPerMeter (1e6 ,Unit(0,1,-2));

Quantity Quantity::Pascal (0.001 ,Unit(-1,1,-2)); // Pascal (kg/m/s^2 or N/m^2)
Quantity Quantity::KiloPascal (1.00 ,Unit(-1,1,-2));
Quantity Quantity::MegaPascal (1000.0 ,Unit(-1,1,-2));
Expand Down
5 changes: 5 additions & 0 deletions src/Base/Quantity.h
Expand Up @@ -244,6 +244,11 @@ class BaseExport Quantity
static Quantity KiloNewton;
static Quantity MegaNewton;

static Quantity NewtonPerMeter;
static Quantity MilliNewtonPerMeter;
static Quantity KiloNewtonPerMeter;
static Quantity MegaNewtonPerMeter;

static Quantity Pascal;
static Quantity KiloPascal;
static Quantity MegaPascal;
Expand Down
741 changes: 384 additions & 357 deletions src/Base/QuantityLexer.c

Large diffs are not rendered by default.

5 changes: 5 additions & 0 deletions src/Base/QuantityParser.l
Expand Up @@ -138,6 +138,11 @@ CGRP '\,'[0-9][0-9][0-9]
"kN" yylval = Quantity::KiloNewton; return UNIT; // kilo Newton
"MN" yylval = Quantity::MegaNewton; return UNIT; // mega Newton

"N/m" yylval = Quantity::NewtonPerMeter; return UNIT; // Newton per meter (N/m or kg/s^2)
"mN/m" yylval = Quantity::MilliNewtonPerMeter;return UNIT; // milli Newton per meter
"kN/m" yylval = Quantity::KiloNewtonPerMeter; return UNIT; // kilo Newton per meter
"MN/m" yylval = Quantity::MegaNewtonPerMeter; return UNIT; // mega Newton per meter

"Pa" yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m/s^2 or N/m^2)
"kPa" yylval = Quantity::KiloPascal; return UNIT; // kilo Pascal
"MPa" yylval = Quantity::MegaPascal; return UNIT; // mega Pascal
Expand Down
4 changes: 4 additions & 0 deletions src/Base/Unit.cpp
Expand Up @@ -454,6 +454,7 @@ QString Unit::getTypeString(void) const
if(*this == Unit::Force ) return QString::fromLatin1("Force");
if(*this == Unit::Work ) return QString::fromLatin1("Work");
if(*this == Unit::Power ) return QString::fromLatin1("Power");
if(*this == Unit::Stiffness ) return QString::fromLatin1("Stiffness");
if(*this == Unit::SpecificEnergy ) return QString::fromLatin1("SpecificEnergy");
if(*this == Unit::ThermalConductivity ) return QString::fromLatin1("ThermalConductivity");
if(*this == Unit::ThermalExpansionCoefficient ) return QString::fromLatin1("ThermalExpansionCoefficient");
Expand Down Expand Up @@ -509,6 +510,9 @@ Unit Unit::UltimateTensileStrength (-1,1,-2);
Unit Unit::YieldStrength (-1,1,-2);
Unit Unit::YoungsModulus (-1,1,-2);

// Stiffness [kg/s^-2]
Unit Unit::Stiffness (0,1,-2);

Unit Unit::Force (1,1,-2);
Unit Unit::Work (2,1,-2);
Unit Unit::Power (2,1,-3);
Expand Down
2 changes: 2 additions & 0 deletions src/Base/Unit.h
Expand Up @@ -134,6 +134,8 @@ class BaseExport Unit
static Unit YieldStrength;
static Unit YoungsModulus;

static Unit Stiffness;

static Unit Force;
static Unit Work;
static Unit Power;
Expand Down
4 changes: 4 additions & 0 deletions src/Base/UnitsSchemaImperial1.cpp
Expand Up @@ -132,6 +132,10 @@ QString UnitsSchemaImperial1::schemaTranslate(const Quantity &quant, double &fac
factor = 6.894744825494;
}
}
else if (unit == Unit::Stiffness) { // Conversion to lbf/in
unitString = QString::fromLatin1("lbf/in");
factor = 4.448222/0.0254;
}
else if (unit == Unit::Velocity) {
unitString = QString::fromLatin1("in/min");
factor = 25.4/60;
Expand Down
19 changes: 19 additions & 0 deletions src/Base/UnitsSchemaInternal.cpp
Expand Up @@ -218,6 +218,25 @@ QString UnitsSchemaInternal::schemaTranslate(const Quantity &quant, double &fact
factor = 0.001;
}
}
else if ((unit == Unit::Stiffness)) {
if (UnitValue < 1){// mN/m is the smallest
unitString = QString::fromLatin1("mN/m");
factor = 1e-3;
}
if (UnitValue < 1e3) {
unitString = QString::fromLatin1("N/m");
factor = 1.0;
}
else if (UnitValue < 1e6) {
unitString = QString::fromLatin1("kN/m");
factor = 1e3;
}
else {
unitString = QString::fromLatin1("MN/m");
factor = 1e6;

}
}
else if (unit == Unit::Force) {
if (UnitValue < 1e3) {
unitString = QString::fromLatin1("mN");
Expand Down
19 changes: 19 additions & 0 deletions src/Base/UnitsSchemaMKS.cpp
Expand Up @@ -169,6 +169,25 @@ QString UnitsSchemaMKS::schemaTranslate(const Quantity &quant, double &factor, Q
factor = 0.001;
}
}
else if ((unit == Unit::Stiffness)) {
if (UnitValue < 1){// mN/m is the smallest
unitString = QString::fromLatin1("mN/m");
factor = 1e-3;
}
if (UnitValue < 1e3) {
unitString = QString::fromLatin1("N/m");
factor = 1.0;
}
else if (UnitValue < 1e6) {
unitString = QString::fromLatin1("kN/m");
factor = 1e3;
}
else {
unitString = QString::fromLatin1("MN/m");
factor = 1e6;

}
}
else if (unit == Unit::ThermalConductivity) {
if (UnitValue > 1000000) {
unitString = QString::fromLatin1("W/mm/K");
Expand Down
1 change: 1 addition & 0 deletions src/Gui/DlgUnitsCalculatorImp.cpp
Expand Up @@ -87,6 +87,7 @@ DlgUnitsCalculator::DlgUnitsCalculator( QWidget* parent, Qt::WindowFlags fl )
<< Base::Unit::ElectricPotential
<< Base::Unit::Frequency
<< Base::Unit::Force
<< Base::Unit::Stiffness
<< Base::Unit::HeatFlux
<< Base::Unit::Length
<< Base::Unit::LuminousIntensity
Expand Down
4 changes: 4 additions & 0 deletions src/Mod/Material/StandardMaterial/TEMPLATE.FCMat
Expand Up @@ -92,6 +92,10 @@ YieldStrength =
; https://en.wikipedia.org/wiki/Young%27s_modulus
YoungsModulus =

; Stiffness (or Spring Stiffness) in [FreeCAD Stiffness unit]
; https://en.wikipedia.org/wiki/Stiffness
Stiffness =


[Thermal]
; Specific capacity in [FreeCAD SpecificHeat unit]
Expand Down
4 changes: 4 additions & 0 deletions src/Mod/Material/Templatematerial.yml
Expand Up @@ -138,6 +138,10 @@
Type: 'Quantity'
URL: 'https://en.wikipedia.org/wiki/Young%27s_modulus'
Description: "Young's modulus (or E-Module) in [FreeCAD Pressure unit]"
Stiffness:
Type: 'Quantity'
URL: 'https://en.wikipedia.org/wiki/Stiffness'
Description: "Stiffness (or Spring Stiffness) in [FreeCAD Stiffness unit]"
- Thermal:
SpecificHeat:
Type: 'Quantity'
Expand Down

0 comments on commit 4ab37fc

Please sign in to comment.