From 15ecd1ffe82c38bd107b16414dbca03f33a36a7b Mon Sep 17 00:00:00 2001 From: jriegel Date: Sat, 30 Nov 2013 21:46:36 +0100 Subject: [PATCH] Adding Unit definition to the python modul --- src/App/Application.cpp | 5 + src/App/FreeCADInit.py | 75 ++++++++++ src/Base/Quantity.cpp | 4 + src/Base/Quantity.h | 78 +++++----- src/Base/QuantityLexer.c | 283 +++++++++++++++++++------------------ src/Base/QuantityParser.l | 1 + src/Base/QuantityPy.xml | 12 +- src/Base/QuantityPyImp.cpp | 23 ++- 8 files changed, 301 insertions(+), 180 deletions(-) diff --git a/src/App/Application.cpp b/src/App/Application.cpp index 4d14f4280..bcb959a61 100644 --- a/src/App/Application.cpp +++ b/src/App/Application.cpp @@ -73,6 +73,8 @@ #include #include #include +#include +#include #include "GeoFeature.h" #include "FeatureTest.h" @@ -233,6 +235,9 @@ Application::Application(ParameterManager * /*pcSysParamMngr*/, //insert Units module PyObject* pUnitsModule = Py_InitModule3("Units", Base::UnitsApi::Methods, "The Unit API"); + Base::Interpreter().addType(&Base::QuantityPy ::Type,pUnitsModule,"Quantity"); + Base::Interpreter().addType(&Base::UnitPy ::Type,pUnitsModule,"Unit"); + Py_INCREF(pUnitsModule); PyModule_AddObject(pAppModule, "Units", pUnitsModule); diff --git a/src/App/FreeCADInit.py b/src/App/FreeCADInit.py index 9eeb633b0..315e036b0 100644 --- a/src/App/FreeCADInit.py +++ b/src/App/FreeCADInit.py @@ -135,6 +135,81 @@ FreeCAD.EndingAdd("FreeCAD document (*.FCStd)","FreeCAD") # set to no gui, is overwritten by InitGui App.GuiUp = 0 +# fill up unit definitions +App.Units.NanoMeter = App.Units.Quantity('nm') +App.Units.MicroMeter = App.Units.Quantity('ym') +App.Units.MilliMeter = App.Units.Quantity('mm') +App.Units.CentiMeter = App.Units.Quantity('cm') +App.Units.DeciMeter = App.Units.Quantity('dm') +App.Units.Meter = App.Units.Quantity('m') +App.Units.KiloMeter = App.Units.Quantity('km') + +App.Units.Liter = App.Units.Quantity('l') + +App.Units.MicroGram = App.Units.Quantity('yg') +App.Units.MilliGram = App.Units.Quantity('mg') +App.Units.Gram = App.Units.Quantity('g') +App.Units.KiloGram = App.Units.Quantity('kg') +App.Units.Ton = App.Units.Quantity('t') + +App.Units.Second = App.Units.Quantity('s') +App.Units.Minut = App.Units.Quantity('min') +App.Units.Hour = App.Units.Quantity('h') + +App.Units.Ampere = App.Units.Quantity('A') +App.Units.MilliAmpere = App.Units.Quantity('mA') +App.Units.KiloAmpere = App.Units.Quantity('kA') +App.Units.MegaAmpere = App.Units.Quantity('MA') + +App.Units.Kelvin = App.Units.Quantity('K') +App.Units.MilliKelvin = App.Units.Quantity('mK') +App.Units.MicroKelvin = App.Units.Quantity('yK') + +App.Units.Mole = App.Units.Quantity('mol') + +App.Units.Candela = App.Units.Quantity('cd') + +App.Units.Inch = App.Units.Quantity('in') +App.Units.Foot = App.Units.Quantity('fo') +App.Units.Thou = App.Units.Quantity('th') +App.Units.Yard = App.Units.Quantity('yr') +App.Units.Mile = App.Units.Quantity('mile') + +App.Units.Pound = App.Units.Quantity('lb') +App.Units.Ounce = App.Units.Quantity('oz') +App.Units.Stone = App.Units.Quantity('st') +App.Units.Hundredweights= App.Units.Quantity('cwt') + +App.Units.Newton = App.Units.Quantity('N') +App.Units.KiloNewton = App.Units.Quantity('kN') +App.Units.MegaNewton = App.Units.Quantity('MN') +App.Units.MilliNewton = App.Units.Quantity('mN') + +App.Units.Pascal = App.Units.Quantity('Pa') +App.Units.KiloPascal = App.Units.Quantity('kPa') +App.Units.MegaPascal = App.Units.Quantity('MPa') +App.Units.GigaPascal = App.Units.Quantity('GPa') + +App.Units.PSI = App.Units.Quantity('psi') + +App.Units.Watt = App.Units.Quantity('W') +App.Units.VoltAmpere = App.Units.Quantity('VA') + +App.Units.Joul = App.Units.Quantity('J') +App.Units.NewtonMeter = App.Units.Quantity('Nm') +App.Units.VoltAmpereSecond = App.Units.Quantity('VAs') +App.Units.WattSecond = App.Units.Quantity('Ws') + +App.Units.MPH = App.Units.Quantity('mile/h') +App.Units.KMH = App.Units.Quantity('km/h') + + +App.Units.Degree = App.Units.Quantity('deg') +App.Units.Radian = App.Units.Quantity('rad') +App.Units.Gon = App.Units.Quantity('gon') + + + # clean up namespace del(InitApplications) diff --git a/src/Base/Quantity.cpp b/src/Base/Quantity.cpp index c7651efe6..cbc3323a8 100644 --- a/src/Base/Quantity.cpp +++ b/src/Base/Quantity.cpp @@ -183,6 +183,7 @@ Quantity Quantity::Inch (25.4 ,Unit(1)); Quantity Quantity::Foot (304.8 ,Unit(1)); Quantity Quantity::Thou (0.0254 ,Unit(1)); Quantity Quantity::Yard (914.4 ,Unit(1)); +Quantity Quantity::Mile (1609344.0 ,Unit(1)); Quantity Quantity::Pound (0.45359237 ,Unit(0,1)); Quantity Quantity::Ounce (0.45359237 ,Unit(0,1)); @@ -209,6 +210,9 @@ Quantity Quantity::NewtonMeter (1e+6 ,Unit(2,1,-2)); // Joule (kg Quantity Quantity::VoltAmpereSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) Quantity Quantity::WattSecond (1e+6 ,Unit(2,1,-2)); // Joule (kg*m^2/s^2) +Quantity Quantity::KMH (277.778 ,Unit(1,0,-1)); // km/h +Quantity Quantity::MPH (447.04 ,Unit(1,0,-1)); // Mile/h + Quantity Quantity::Degree (1.0 ,Unit(0,0,0,0,0,0,0,1)); // degree (internal standard angle) Quantity Quantity::Radian (180/M_PI ,Unit(0,0,0,0,0,0,0,1)); // radian Quantity Quantity::Gon (360.0/400.0 ,Unit(0,0,0,0,0,0,0,1)); // gon diff --git a/src/Base/Quantity.h b/src/Base/Quantity.h index e92ab9e83..86454c520 100644 --- a/src/Base/Quantity.h +++ b/src/Base/Quantity.h @@ -101,56 +101,60 @@ public: static Quantity KiloGram; static Quantity Ton; - static Quantity Second ; - static Quantity Minut ; - static Quantity Hour ; + static Quantity Second; + static Quantity Minut; + static Quantity Hour; - static Quantity Ampere ; - static Quantity MilliAmpere ; - static Quantity KiloAmpere ; - static Quantity MegaAmpere ; + static Quantity Ampere; + static Quantity MilliAmpere; + static Quantity KiloAmpere; + static Quantity MegaAmpere; - static Quantity Kelvin ; - static Quantity MilliKelvin ; - static Quantity MicroKelvin ; + static Quantity Kelvin; + static Quantity MilliKelvin; + static Quantity MicroKelvin; - static Quantity Mole ; + static Quantity Mole; - static Quantity Candela ; + static Quantity Candela; - static Quantity Inch ; - static Quantity Foot ; - static Quantity Thou ; - static Quantity Yard ; + static Quantity Inch; + static Quantity Foot; + static Quantity Thou; + static Quantity Yard; - static Quantity Pound ; - static Quantity Ounce ; - static Quantity Stone ; - static Quantity Hundredweights ; + static Quantity Pound; + static Quantity Ounce; + static Quantity Stone; + static Quantity Hundredweights; + static Quantity Mile; - static Quantity Newton ; - static Quantity KiloNewton ; - static Quantity MegaNewton ; - static Quantity MilliNewton ; + static Quantity Newton; + static Quantity KiloNewton; + static Quantity MegaNewton; + static Quantity MilliNewton; - static Quantity Pascal ; - static Quantity KiloPascal ; - static Quantity MegaPascal ; - static Quantity GigaPascal ; + static Quantity Pascal; + static Quantity KiloPascal; + static Quantity MegaPascal; + static Quantity GigaPascal; - static Quantity PSI ; + static Quantity PSI; - static Quantity Watt ; - static Quantity VoltAmpere ; + static Quantity Watt; + static Quantity VoltAmpere; - static Quantity Joul ; - static Quantity NewtonMeter ; + static Quantity Joul; + static Quantity NewtonMeter; static Quantity VoltAmpereSecond; - static Quantity WattSecond ; + static Quantity WattSecond; - static Quantity Degree ; - static Quantity Radian ; - static Quantity Gon ; + static Quantity KMH; + static Quantity MPH; + + static Quantity Degree; + static Quantity Radian; + static Quantity Gon; //@} diff --git a/src/Base/QuantityLexer.c b/src/Base/QuantityLexer.c index efaceda43..c5b93964d 100644 --- a/src/Base/QuantityLexer.c +++ b/src/Base/QuantityLexer.c @@ -361,8 +361,8 @@ static void yy_fatal_error (yyconst char msg[] ); *yy_cp = '\0'; \ (yy_c_buf_p) = yy_cp; -#define YY_NUM_RULES 82 -#define YY_END_OF_BUFFER 83 +#define YY_NUM_RULES 83 +#define YY_END_OF_BUFFER 84 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info @@ -370,23 +370,23 @@ struct yy_trans_info flex_int32_t yy_verify; flex_int32_t yy_nxt; }; -static yyconst flex_int16_t yy_accept[136] = +static yyconst flex_int16_t yy_accept[138] = { 0, - 0, 0, 0, 0, 83, 82, 4, 5, 33, 35, - 6, 63, 23, 82, 82, 53, 27, 82, 42, 82, - 82, 51, 1, 82, 82, 82, 65, 82, 17, 22, - 82, 82, 14, 12, 82, 82, 82, 82, 20, 19, - 82, 3, 2, 5, 62, 63, 56, 0, 26, 44, - 0, 54, 46, 52, 57, 0, 0, 0, 0, 31, + 0, 0, 0, 0, 84, 83, 4, 5, 33, 35, + 6, 64, 23, 83, 83, 54, 27, 83, 43, 83, + 83, 52, 1, 83, 83, 83, 66, 83, 17, 22, + 83, 83, 14, 12, 83, 83, 83, 83, 20, 19, + 83, 3, 2, 5, 63, 64, 57, 0, 26, 45, + 0, 55, 47, 53, 58, 0, 0, 0, 0, 31, 10, 0, 0, 0, 11, 0, 34, 0, 32, 25, - 43, 0, 18, 13, 38, 0, 24, 28, 45, 16, - 0, 9, 0, 7, 39, 64, 0, 0, 0, 0, - 0, 40, 0, 36, 29, 15, 8, 37, 62, 0, + 44, 0, 18, 13, 39, 0, 24, 28, 46, 16, + 0, 9, 0, 7, 40, 65, 0, 0, 0, 0, + 0, 41, 0, 36, 29, 15, 8, 37, 63, 0, - 49, 48, 55, 72, 0, 0, 0, 70, 41, 58, - 71, 60, 47, 74, 21, 73, 30, 76, 50, 59, - 77, 0, 79, 0, 61, 66, 67, 68, 0, 78, - 81, 80, 69, 75, 0 + 50, 49, 56, 73, 0, 0, 0, 71, 42, 59, + 72, 61, 48, 75, 0, 21, 74, 30, 77, 51, + 60, 78, 0, 80, 0, 62, 67, 68, 69, 0, + 38, 79, 82, 81, 70, 76, 0 } ; static yyconst flex_int32_t yy_ec[256] = @@ -430,45 +430,45 @@ static yyconst flex_int32_t yy_meta[49] = 1, 1, 1, 1, 1, 1, 1, 1 } ; -static yyconst flex_int16_t yy_base[137] = +static yyconst flex_int16_t yy_base[139] = { 0, - 0, 0, 46, 47, 177, 178, 178, 173, 178, 178, - 178, 47, 178, 153, 153, 178, 178, 40, 136, 146, - 158, 127, 178, 35, 36, 37, 123, 129, 128, 178, - 128, 56, 25, 67, 128, 116, 52, 137, 48, 57, - 66, 178, 178, 159, 100, 109, 178, 135, 178, 178, - 134, 178, 178, 116, 178, 115, 118, 122, 129, 178, - 178, 111, 109, 120, 178, 111, 178, 112, 178, 178, - 178, 123, 178, 178, 178, 116, 178, 178, 178, 178, - 109, 178, 71, 178, 178, 178, 101, 111, 115, 89, - 84, 178, 78, 178, 178, 178, 178, 178, 113, 122, + 0, 0, 46, 47, 179, 180, 180, 175, 180, 180, + 180, 47, 180, 155, 155, 180, 180, 40, 138, 148, + 160, 129, 180, 35, 36, 37, 125, 131, 130, 180, + 130, 56, 25, 67, 130, 118, 52, 139, 48, 57, + 66, 180, 180, 161, 100, 109, 180, 137, 180, 180, + 136, 180, 180, 118, 180, 117, 120, 124, 131, 180, + 180, 113, 111, 122, 180, 113, 180, 114, 180, 180, + 180, 125, 180, 180, 180, 118, 180, 180, 180, 180, + 30, 180, 71, 180, 180, 180, 104, 114, 118, 108, + 103, 180, 106, 180, 180, 180, 180, 180, 113, 122, - 178, 178, 178, 178, 71, 67, 64, 178, 178, 178, - 178, 178, 178, 87, 178, 178, 178, 178, 178, 178, - 63, 50, 37, 126, 130, 178, 178, 57, 57, 178, - 178, 178, 178, 178, 178, 53 + 180, 180, 180, 180, 84, 88, 78, 180, 180, 180, + 180, 180, 180, 104, 75, 180, 180, 180, 180, 180, + 180, 69, 53, 63, 126, 130, 180, 180, 83, 61, + 180, 180, 180, 180, 180, 180, 180, 53 } ; -static yyconst flex_int16_t yy_def[137] = +static yyconst flex_int16_t yy_def[139] = { 0, - 135, 1, 136, 136, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 137, 1, 138, 138, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 0, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 0, 137 } ; -static yyconst flex_int16_t yy_nxt[227] = +static yyconst flex_int16_t yy_nxt[229] = { 0, 6, 7, 8, 9, 10, 11, 11, 6, 12, 12, 12, 12, 13, 14, 6, 15, 16, 17, 18, 19, @@ -476,54 +476,54 @@ static yyconst flex_int16_t yy_nxt[227] = 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 6, 38, 39, 40, 6, 6, 41, 6, 6, 6, 45, 75, 49, 42, 45, 46, 46, 46, 46, 50, - 51, 56, 57, 76, 60, 134, 64, 133, 70, 132, + 51, 56, 57, 76, 60, 115, 64, 116, 70, 136, 43, 43, 61, 65, 62, 71, 72, 58, 59, 77, 63, 90, 93, 95, 78, 86, 79, 73, 91, 94, - 87, 92, 74, 131, 88, 130, 129, 96, 80, 116, + 87, 92, 74, 135, 88, 134, 133, 96, 80, 117, - 81, 128, 97, 82, 127, 83, 117, 98, 99, 99, - 99, 99, 45, 126, 100, 123, 45, 46, 46, 46, - 46, 99, 99, 99, 99, 122, 121, 100, 124, 100, - 125, 125, 125, 125, 125, 125, 125, 125, 125, 125, - 125, 125, 100, 120, 119, 118, 115, 114, 113, 112, - 111, 110, 109, 108, 107, 106, 105, 104, 103, 102, - 101, 44, 89, 85, 84, 69, 68, 67, 66, 55, - 54, 53, 52, 48, 47, 44, 135, 5, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 81, 132, 97, 82, 131, 83, 118, 98, 99, 99, + 99, 99, 45, 130, 100, 129, 45, 46, 46, 46, + 46, 99, 99, 99, 99, 128, 127, 100, 125, 100, + 126, 126, 126, 126, 126, 126, 126, 126, 126, 126, + 126, 126, 100, 124, 123, 122, 121, 120, 119, 114, + 113, 112, 111, 110, 109, 108, 107, 106, 105, 104, + 103, 102, 101, 44, 89, 85, 84, 69, 68, 67, + 66, 55, 54, 53, 52, 48, 47, 44, 137, 5, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 } ; -static yyconst flex_int16_t yy_chk[227] = +static yyconst flex_int16_t yy_chk[229] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 4, - 12, 33, 18, 136, 12, 12, 12, 12, 12, 18, - 18, 24, 24, 33, 25, 129, 26, 128, 32, 123, + 12, 33, 18, 138, 12, 12, 12, 12, 12, 18, + 18, 24, 24, 33, 25, 81, 26, 81, 32, 130, 3, 4, 25, 26, 25, 32, 32, 24, 24, 34, 25, 39, 40, 41, 34, 37, 34, 32, 39, 40, - 37, 39, 32, 122, 37, 121, 114, 41, 34, 83, + 37, 39, 32, 129, 37, 124, 123, 41, 34, 83, - 34, 107, 41, 34, 106, 34, 83, 41, 45, 45, - 45, 45, 46, 105, 45, 93, 46, 46, 46, 46, - 46, 99, 99, 99, 99, 91, 90, 99, 100, 45, - 100, 100, 100, 100, 124, 124, 124, 124, 125, 125, - 125, 125, 99, 89, 88, 87, 81, 76, 72, 68, - 66, 64, 63, 62, 59, 58, 57, 56, 54, 51, - 48, 44, 38, 36, 35, 31, 29, 28, 27, 22, - 21, 20, 19, 15, 14, 8, 5, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, + 34, 122, 41, 34, 115, 34, 83, 41, 45, 45, + 45, 45, 46, 114, 45, 107, 46, 46, 46, 46, + 46, 99, 99, 99, 99, 106, 105, 99, 100, 45, + 100, 100, 100, 100, 125, 125, 125, 125, 126, 126, + 126, 126, 99, 93, 91, 90, 89, 88, 87, 76, + 72, 68, 66, 64, 63, 62, 59, 58, 57, 56, + 54, 51, 48, 44, 38, 36, 35, 31, 29, 28, + 27, 22, 21, 20, 19, 15, 14, 8, 5, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135, 135, 135, 135, 135, - 135, 135, 135, 135, 135, 135 + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137, 137, 137, + 137, 137, 137, 137, 137, 137, 137, 137 } ; static yy_state_type yy_last_accepting_state; @@ -791,13 +791,13 @@ yy_match: while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; ++yy_cp; } - while ( yy_current_state != 135 ); + while ( yy_current_state != 137 ); yy_cp = (yy_last_accepting_cpos); yy_current_state = (yy_last_accepting_state); @@ -1005,98 +1005,98 @@ yylval = Quantity::Yard; return UNIT; // yard YY_BREAK case 38: YY_RULE_SETUP -#line 81 "QuantityParser.l" -yylval = Quantity::Pound; return UNIT; // pound +#line 79 "QuantityParser.l" +yylval = Quantity::Mile; return UNIT; // mile YY_BREAK case 39: YY_RULE_SETUP #line 82 "QuantityParser.l" -yylval = Quantity::Ounce; return UNIT; // ounce +yylval = Quantity::Pound; return UNIT; // pound YY_BREAK case 40: YY_RULE_SETUP #line 83 "QuantityParser.l" -yylval = Quantity::Stone; return UNIT; // Stone +yylval = Quantity::Ounce; return UNIT; // ounce YY_BREAK case 41: YY_RULE_SETUP #line 84 "QuantityParser.l" -yylval = Quantity::Hundredweights; return UNIT; // hundredweights +yylval = Quantity::Stone; return UNIT; // Stone YY_BREAK case 42: YY_RULE_SETUP -#line 86 "QuantityParser.l" -yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) +#line 85 "QuantityParser.l" +yylval = Quantity::Hundredweights; return UNIT; // hundredweights YY_BREAK case 43: YY_RULE_SETUP #line 87 "QuantityParser.l" -yylval = Quantity::KiloNewton; return UNIT; // Newton +yylval = Quantity::Newton; return UNIT; // Newton (kg*m/s^2) YY_BREAK case 44: YY_RULE_SETUP #line 88 "QuantityParser.l" -yylval = Quantity::MegaNewton; return UNIT; // Newton +yylval = Quantity::KiloNewton; return UNIT; // Newton YY_BREAK case 45: YY_RULE_SETUP #line 89 "QuantityParser.l" -yylval = Quantity::MilliNewton; return UNIT; // Newton +yylval = Quantity::MegaNewton; return UNIT; // Newton YY_BREAK case 46: YY_RULE_SETUP -#line 91 "QuantityParser.l" -yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) +#line 90 "QuantityParser.l" +yylval = Quantity::MilliNewton; return UNIT; // Newton YY_BREAK case 47: YY_RULE_SETUP #line 92 "QuantityParser.l" -yylval = Quantity::KiloPascal; return UNIT; // Pascal +yylval = Quantity::Pascal; return UNIT; // Pascal (kg/m*s^2 or N/m^2) YY_BREAK case 48: YY_RULE_SETUP #line 93 "QuantityParser.l" -yylval = Quantity::MegaPascal; return UNIT; // Pascal +yylval = Quantity::KiloPascal; return UNIT; // Pascal YY_BREAK case 49: YY_RULE_SETUP #line 94 "QuantityParser.l" -yylval = Quantity::GigaPascal; return UNIT; // Pascal +yylval = Quantity::MegaPascal; return UNIT; // Pascal YY_BREAK case 50: YY_RULE_SETUP -#line 96 "QuantityParser.l" -yylval = Quantity::PSI; return UNIT; // pounds/in^2 +#line 95 "QuantityParser.l" +yylval = Quantity::GigaPascal; return UNIT; // Pascal YY_BREAK case 51: YY_RULE_SETUP -#line 98 "QuantityParser.l" -yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) +#line 97 "QuantityParser.l" +yylval = Quantity::PSI; return UNIT; // pounds/in^2 YY_BREAK case 52: YY_RULE_SETUP #line 99 "QuantityParser.l" -yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) +yylval = Quantity::Watt; return UNIT; // Watt (kg*m^2/s^3) YY_BREAK case 53: YY_RULE_SETUP -#line 101 "QuantityParser.l" -yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) +#line 100 "QuantityParser.l" +yylval = Quantity::VoltAmpere; return UNIT; // VoltAmpere (kg*m^2/s^3) YY_BREAK case 54: YY_RULE_SETUP #line 102 "QuantityParser.l" -yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::Joul; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 55: YY_RULE_SETUP #line 103 "QuantityParser.l" -yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::NewtonMeter; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 56: YY_RULE_SETUP #line 104 "QuantityParser.l" -yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) +yylval = Quantity::VoltAmpereSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 57: YY_RULE_SETUP @@ -1105,23 +1105,23 @@ yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 58: YY_RULE_SETUP -#line 107 "QuantityParser.l" -yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) +#line 106 "QuantityParser.l" +yylval = Quantity::WattSecond; return UNIT; // Joule (kg*m^2/s^2) YY_BREAK case 59: YY_RULE_SETUP #line 108 "QuantityParser.l" -yylval = Quantity::Radian; return UNIT; // radian +yylval = Quantity::Degree; return UNIT; // degree (internal standard angle) YY_BREAK case 60: YY_RULE_SETUP #line 109 "QuantityParser.l" -yylval = Quantity::Gon; return UNIT; // gon +yylval = Quantity::Radian; return UNIT; // radian YY_BREAK case 61: YY_RULE_SETUP -#line 111 "QuantityParser.l" -{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} +#line 110 "QuantityParser.l" +yylval = Quantity::Gon; return UNIT; // gon YY_BREAK case 62: YY_RULE_SETUP @@ -1131,104 +1131,109 @@ YY_RULE_SETUP case 63: YY_RULE_SETUP #line 113 "QuantityParser.l" -{yylval = atof( yytext ); return NUM;} +{for(char* c=yytext;*c!='\0';c++)if(*c==',')*c='.'; yylval = atof( yytext ); return NUM;} YY_BREAK case 64: YY_RULE_SETUP -#line 115 "QuantityParser.l" -{yylval = M_PI ; return NUM;} // constant pi +#line 114 "QuantityParser.l" +{yylval = atof( yytext ); return NUM;} YY_BREAK case 65: YY_RULE_SETUP #line 116 "QuantityParser.l" -{yylval = M_E ; return NUM;} // constant e +{yylval = M_PI ; return NUM;} // constant pi YY_BREAK case 66: YY_RULE_SETUP -#line 118 "QuantityParser.l" -return ACOS; +#line 117 "QuantityParser.l" +{yylval = M_E ; return NUM;} // constant e YY_BREAK case 67: YY_RULE_SETUP #line 119 "QuantityParser.l" -return ASIN; +return ACOS; YY_BREAK case 68: YY_RULE_SETUP #line 120 "QuantityParser.l" -return ATAN; +return ASIN; YY_BREAK case 69: YY_RULE_SETUP #line 121 "QuantityParser.l" -return ATAN2; +return ATAN; YY_BREAK case 70: YY_RULE_SETUP #line 122 "QuantityParser.l" -return COS; +return ATAN2; YY_BREAK case 71: YY_RULE_SETUP #line 123 "QuantityParser.l" -return EXP; +return COS; YY_BREAK case 72: YY_RULE_SETUP #line 124 "QuantityParser.l" -return ABS; +return EXP; YY_BREAK case 73: YY_RULE_SETUP #line 125 "QuantityParser.l" -return MOD; +return ABS; YY_BREAK case 74: YY_RULE_SETUP #line 126 "QuantityParser.l" -return LOG; +return MOD; YY_BREAK case 75: YY_RULE_SETUP #line 127 "QuantityParser.l" -return LOG10; +return LOG; YY_BREAK case 76: YY_RULE_SETUP #line 128 "QuantityParser.l" -return POW; +return LOG10; YY_BREAK case 77: YY_RULE_SETUP #line 129 "QuantityParser.l" -return SIN; +return POW; YY_BREAK case 78: YY_RULE_SETUP #line 130 "QuantityParser.l" -return SINH; +return SIN; YY_BREAK case 79: YY_RULE_SETUP #line 131 "QuantityParser.l" -return TAN; +return SINH; YY_BREAK case 80: YY_RULE_SETUP #line 132 "QuantityParser.l" -return TANH; +return TAN; YY_BREAK case 81: YY_RULE_SETUP #line 133 "QuantityParser.l" -return SQRT; +return TANH; YY_BREAK case 82: YY_RULE_SETUP -#line 135 "QuantityParser.l" +#line 134 "QuantityParser.l" +return SQRT; + YY_BREAK +case 83: +YY_RULE_SETUP +#line 136 "QuantityParser.l" ECHO; YY_BREAK -#line 1232 "QuantityLexer.c" +#line 1237 "QuantityLexer.c" case YY_STATE_EOF(INITIAL): case YY_STATE_EOF(C_COMMENT): yyterminate(); @@ -1522,7 +1527,7 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; @@ -1550,11 +1555,11 @@ static int yy_get_next_buffer (void) while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; - if ( yy_current_state >= 136 ) + if ( yy_current_state >= 138 ) yy_c = yy_meta[(unsigned int) yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c]; - yy_is_jam = (yy_current_state == 135); + yy_is_jam = (yy_current_state == 137); return yy_is_jam ? 0 : yy_current_state; } @@ -2187,4 +2192,4 @@ void yyfree (void * ptr ) #define YYTABLES_NAME "yytables" -#line 135 "QuantityParser.l" +#line 136 "QuantityParser.l" diff --git a/src/Base/QuantityParser.l b/src/Base/QuantityParser.l index 5fe915587..f1dfddf77 100644 --- a/src/Base/QuantityParser.l +++ b/src/Base/QuantityParser.l @@ -76,6 +76,7 @@ ID [a-z][a-z0-9]* "'" yylval = Quantity::Foot; return UNIT; // foot "th" yylval = Quantity::Thou; return UNIT; // thou "yr" yylval = Quantity::Yard; return UNIT; // yard + "mile" yylval = Quantity::Mile; return UNIT; // mile "lb" yylval = Quantity::Pound; return UNIT; // pound diff --git a/src/Base/QuantityPy.xml b/src/Base/QuantityPy.xml index 7dfeaefc3..7f56971e9 100644 --- a/src/Base/QuantityPy.xml +++ b/src/Base/QuantityPy.xml @@ -58,5 +58,15 @@ Quantity(string) -- arbitrary mixture of numbers and chars defining a Quantity - + + + + + Definition of NanoMeter + + + + + + diff --git a/src/Base/QuantityPyImp.cpp b/src/Base/QuantityPyImp.cpp index d0ccf2370..d4bfe96b4 100644 --- a/src/Base/QuantityPyImp.cpp +++ b/src/Base/QuantityPyImp.cpp @@ -33,10 +33,17 @@ int QuantityPy::PyInit(PyObject* args, PyObject* kwd) Quantity *self = getQuantityPtr(); double f = DOUBLE_MAX; - - if (PyArg_ParseTuple(args, "|d", &f)) { + int i1=0; + int i2=0; + int i3=0; + int i4=0; + int i5=0; + int i6=0; + int i7=0; + int i8=0; + if (PyArg_ParseTuple(args, "|diiiiiiii", &f,&i1,&i2,&i3,&i4,&i5,&i6,&i7,&i8)) { if(f!=DOUBLE_MAX) - *self = Quantity(f); + *self = Quantity(f,Unit(i1,i2,i3,i4,i5,i6,i7,i8)); return 0; } PyErr_Clear(); // set by PyArg_ParseTuple() @@ -170,4 +177,14 @@ int QuantityPy::setCustomAttributes(const char* /*attr*/, PyObject* /*obj*/) return 0; } +// All the standard unit definitions =============================== + +Py::Object QuantityPy::getNanoMeter(void) const +{ + return Py::Object(new QuantityPy(new Quantity(Quantity::NanoMeter))); +} + + + +