extend Python api of units:

+ get list of all available schemas
+ get currently set schema
+ translate a quantity to a given schema
This commit is contained in:
wmayer
2017-08-13 16:55:00 +02:00
parent 2cd535e015
commit 892e78d445
4 changed files with 146 additions and 17 deletions

View File

@@ -80,6 +80,50 @@ UnitsApi::~UnitsApi()
{
}
const char* UnitsApi::getDescription(UnitSystem system)
{
switch (system) {
case SI1:
return "Standard (mm/kg/s/degree)";
case SI2:
return "MKS (m/kg/s/degree)";
case Imperial1:
return "US customary (in/lb)";
case ImperialDecimal:
return "Imperial decimal (in/lb)";
case Centimeters:
return "Building Euro (cm/m²/m³)";
case ImperialBuilding:
return "Building US (ft-in/sqft/cuft)";
case MmMin:
return "Metric small parts & CNC(mm, mm/min)";
default:
return "Unknown schema";
}
}
UnitsSchema* UnitsApi::createSchema(UnitSystem s)
{
switch (s) {
case SI1:
return new UnitsSchemaInternal();
case SI2:
return new UnitsSchemaMKS();
case Imperial1:
return new UnitsSchemaImperial1();
case ImperialDecimal:
return new UnitsSchemaImperialDecimal();
case Centimeters:
return new UnitsSchemaCentimeters();
case ImperialBuilding:
return new UnitsSchemaImperialBuilding();
case MmMin:
return new UnitsSchemaMmMin();
}
return 0;
}
void UnitsApi::setSchema(UnitSystem s)
{
if (UserPrefSystem) {
@@ -87,18 +131,16 @@ void UnitsApi::setSchema(UnitSystem s)
delete UserPrefSystem;
UserPrefSystem = 0;
}
switch (s) {
case SI1 : UserPrefSystem = new UnitsSchemaInternal(); break;
case SI2 : UserPrefSystem = new UnitsSchemaMKS(); break;
case Imperial1: UserPrefSystem = new UnitsSchemaImperial1(); break;
case ImperialDecimal: UserPrefSystem = new UnitsSchemaImperialDecimal(); break;
case Centimeters: UserPrefSystem = new UnitsSchemaCentimeters(); break;
case ImperialBuilding: UserPrefSystem = new UnitsSchemaImperialBuilding(); break;
case MmMin: UserPrefSystem = new UnitsSchemaMmMin(); break;
default : UserPrefSystem = new UnitsSchemaInternal(); s = SI1; break;
UserPrefSystem = createSchema(s);
actSystem = s;
// for wrong value fall back to standard schema
if (!UserPrefSystem) {
UserPrefSystem = new UnitsSchemaInternal();
actSystem = SI1;
}
actSystem = s;
UserPrefSystem->setSchemaUnits(); // if necesarry a unit schema can change the constants in Quantity (e.g. mi=1.8km rather then 1.6km).
}