diff --git a/src/Base/CMakeLists.txt b/src/Base/CMakeLists.txt index b93079e67..4254b13cc 100644 --- a/src/Base/CMakeLists.txt +++ b/src/Base/CMakeLists.txt @@ -166,6 +166,8 @@ SET(FreeCADBase_UNITAPI_SRCS UnitsSchemaMKS.cpp UnitsSchemaImperial1.h UnitsSchemaImperial1.cpp + UnitsSchemaCentimeters.h + UnitsSchemaCentimeters.cpp Quantity.h Quantity.cpp QuantityPyImp.cpp diff --git a/src/Base/UnitsApi.cpp b/src/Base/UnitsApi.cpp index ca619f0b4..d0c6d23f5 100644 --- a/src/Base/UnitsApi.cpp +++ b/src/Base/UnitsApi.cpp @@ -31,7 +31,8 @@ #include "UnitsApi.h" #include "UnitsSchemaInternal.h" #include "UnitsSchemaImperial1.h" -#include "UnitsSchemaMKS.h" +#include "UnitsSchemaMKS.h" +#include "UnitsSchemaCentimeters.h" #ifndef M_PI #define M_PI 3.14159265358979323846 @@ -90,6 +91,7 @@ void UnitsApi::setSchema(UnitSystem s) case SI2 : UserPrefSystem = new UnitsSchemaMKS(); break; case Imperial1: UserPrefSystem = new UnitsSchemaImperial1(); break; case ImperialDecimal: UserPrefSystem = new UnitsSchemaImperialDecimal(); break; + case Centimeters: UserPrefSystem = new UnitsSchemaCentimeters(); break; default : UserPrefSystem = new UnitsSchemaInternal(); s = SI1; break; } diff --git a/src/Base/UnitsSchema.h b/src/Base/UnitsSchema.h index 4e68feb19..b9c0f0308 100644 --- a/src/Base/UnitsSchema.h +++ b/src/Base/UnitsSchema.h @@ -39,7 +39,8 @@ enum UnitSystem { SI1 = 0 , /** internal (mm,kg,s) SI system (http://en.wikipedia.org/wiki/International_System_of_Units) */ SI2 = 1 , /** MKS (m,kg,s) SI system */ Imperial1 = 2, /** the Imperial system (http://en.wikipedia.org/wiki/Imperial_units) */ - ImperialDecimal = 3 /** Imperial with length in inch only */ + ImperialDecimal = 3, /** Imperial with length in inch only */ + Centimeters = 4 /** All lengths in centimeters, areas and volumes in square/cubic meters */ } ; diff --git a/src/Base/UnitsSchemaCentimeters.cpp b/src/Base/UnitsSchemaCentimeters.cpp new file mode 100644 index 000000000..048399cda --- /dev/null +++ b/src/Base/UnitsSchemaCentimeters.cpp @@ -0,0 +1,59 @@ +/*************************************************************************** + * Copyright (c) 2016 Yorik van Havre * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#include "PreCompiled.h" +#ifdef __GNUC__ +# include +#endif + +#include +#include "Exception.h" +#include "UnitsApi.h" +#include "UnitsSchemaCentimeters.h" +#include + +using namespace Base; + + +QString UnitsSchemaCentimeters::schemaTranslate(Base::Quantity quant,double &factor,QString &unitString) +{ + Unit unit = quant.getUnit(); + if(unit == Unit::Length){ + // all length units in centimeters + unitString = QString::fromLatin1("cm"); + factor = 10.0; + }else if (unit == Unit::Area){ + // all area units in square meters + unitString = QString::fromLatin1("m^2"); + factor = 1000000.0; + }else if (unit == Unit::Volume){ + // all area units in cubic meters + unitString = QString::fromLatin1("m^3"); + factor = 1000000000.0; + }else{ + // default action for all cases without special treatment: + unitString = quant.getUnit().getString(); + factor = 1.0; + } + return QString::fromUtf8("%L1 %2").arg(quant.getValue() / factor).arg(unitString); +} diff --git a/src/Base/UnitsSchemaCentimeters.h b/src/Base/UnitsSchemaCentimeters.h new file mode 100644 index 000000000..e8366d267 --- /dev/null +++ b/src/Base/UnitsSchemaCentimeters.h @@ -0,0 +1,46 @@ +/*************************************************************************** + * Copyright (c) 2016 Yorik van Havre * + * * + * This file is part of the FreeCAD CAx development system. * + * * + * This library is free software; you can redistribute it and/or * + * modify it under the terms of the GNU Library General Public * + * License as published by the Free Software Foundation; either * + * version 2 of the License, or (at your option) any later version. * + * * + * This library is distributed in the hope that it will be useful, * + * but WITHOUT ANY WARRANTY; without even the implied warranty of * + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * + * GNU Library General Public License for more details. * + * * + * You should have received a copy of the GNU Library General Public * + * License along with this library; see the file COPYING.LIB. If not, * + * write to the Free Software Foundation, Inc., 59 Temple Place, * + * Suite 330, Boston, MA 02111-1307, USA * + * * + ***************************************************************************/ + + +#ifndef BASE_UNITSSCHEMACENTIMETERS_H +#define BASE_UNITSSCHEMACENTIMETERS_H + + +#include +#include +#include "UnitsSchema.h" + +namespace Base { + +/** + * The UnitSchema class + */ +class UnitsSchemaCentimeters: public UnitsSchema +{ +public: + virtual QString schemaTranslate(Base::Quantity quant,double &factor,QString &unitString); + +}; + +} // namespace Base + +#endif // BASE_UNITSSCHEMACENTIMETERS_H diff --git a/src/Gui/DlgSettingsUnits.ui b/src/Gui/DlgSettingsUnits.ui index b3267f7c1..88b96a2f8 100644 --- a/src/Gui/DlgSettingsUnits.ui +++ b/src/Gui/DlgSettingsUnits.ui @@ -41,16 +41,21 @@ MKS (m/kg/s/degree) - - - US customary (in/lb) - - - - - Imperial decimal (in/lb) - - + + + US customary (in/lb) + + + + + Imperial decimal (in/lb) + + + + + Building Euro (cm/m²/m³) + +