1 // Created on: 1995-11-15
2 // Created by: Jean-Louis Frenkel <rmi@pernox>
3 // Copyright (c) 1995-1999 Matra Datavision
4 // Copyright (c) 1999-2014 OPEN CASCADE SAS
6 // This file is part of Open CASCADE Technology software library.
8 // This library is free software; you can redistribute it and/or modify it under
9 // the terms of the GNU Lesser General Public License version 2.1 as published
10 // by the Free Software Foundation, with special exception defined in the file
11 // OCCT_LGPL_EXCEPTION.txt. Consult the file LICENSE_LGPL_21.txt included in OCCT
12 // distribution for complete text of the license and disclaimer of any warranty.
14 // Alternatively, this file may be used under the terms of Open CASCADE
15 // commercial license or contractual agreement.
17 #ifndef _UnitsAPI_HeaderFile
18 #define _UnitsAPI_HeaderFile
20 #include <Standard.hxx>
21 #include <Standard_DefineAlloc.hxx>
22 #include <Standard_Handle.hxx>
24 #include <Standard_Real.hxx>
25 #include <Standard_CString.hxx>
26 #include <UnitsAPI_SystemUnits.hxx>
27 #include <Standard_Boolean.hxx>
28 class Units_Dimensions;
31 //! The UnitsAPI global functions are used to
32 //! convert a value from any unit into another unit.
34 //! Conversion is executed among three unit systems:
36 //! - the user's Local System
37 //! - the user's Current System.
38 //! The SI System is the standard international unit
39 //! system. It is indicated by SI in the synopses of
40 //! the UnitsAPI functions.
41 //! The MDTV System corresponds to the SI
42 //! international standard but the length unit and all
43 //! its derivatives use millimeters instead of the meters.
44 //! Both systems are proposed by Open CASCADE;
45 //! the SI System is the standard option. By
46 //! selecting one of these two systems, the user
47 //! defines his Local System through the
48 //! SetLocalSystem function. The Local System is
49 //! indicated by LS in the synopses of the UnitsAPI functions.
50 //! The user's Local System units can be modified in
51 //! the working environment. The user defines his
52 //! Current System by modifying its units through
53 //! the SetCurrentUnit function. The Current
54 //! System is indicated by Current in the synopses
55 //! of the UnitsAPI functions.
63 //! Converts the current unit value to the local system units value.
64 //! Example: CurrentToLS(1.,"LENGTH") returns 1000. if the current length unit
65 //! is meter and LocalSystem is MDTV.
66 Standard_EXPORT static Standard_Real CurrentToLS (const Standard_Real aData, const Standard_CString aQuantity);
68 //! Converts the current unit value to the SI system units value.
69 //! Example: CurrentToSI(1.,"LENGTH") returns 0.001 if current length unit
71 Standard_EXPORT static Standard_Real CurrentToSI (const Standard_Real aData, const Standard_CString aQuantity);
73 //! Converts the local system units value to the current unit value.
74 //! Example: CurrentFromLS(1000.,"LENGTH") returns 1. if current length unit
75 //! is meter and LocalSystem is MDTV.
76 Standard_EXPORT static Standard_Real CurrentFromLS (const Standard_Real aData, const Standard_CString aQuantity);
78 //! Converts the SI system units value to the current unit value.
79 //! Example: CurrentFromSI(0.001,"LENGTH") returns 1 if current length unit
81 Standard_EXPORT static Standard_Real CurrentFromSI (const Standard_Real aData, const Standard_CString aQuantity);
83 //! Converts the local unit value to the local system units value.
84 //! Example: AnyToLS(1.,"in.") returns 25.4 if the LocalSystem is MDTV.
85 Standard_EXPORT static Standard_Real AnyToLS (const Standard_Real aData, const Standard_CString aUnit);
87 //! Converts the local unit value to the local system units value.
88 //! and gives the associated dimension of the unit
89 Standard_EXPORT static Standard_Real AnyToLS (const Standard_Real aData, const Standard_CString aUnit, Handle(Units_Dimensions)& aDim);
91 //! Converts the local unit value to the SI system units value.
92 //! Example: AnyToSI(1.,"in.") returns 0.0254
93 Standard_EXPORT static Standard_Real AnyToSI (const Standard_Real aData, const Standard_CString aUnit);
95 //! Converts the local unit value to the SI system units value.
96 //! and gives the associated dimension of the unit
97 Standard_EXPORT static Standard_Real AnyToSI (const Standard_Real aData, const Standard_CString aUnit, Handle(Units_Dimensions)& aDim);
99 //! Converts the local system units value to the local unit value.
100 //! Example: AnyFromLS(25.4,"in.") returns 1. if the LocalSystem is MDTV.
101 //! Note: aUnit is also used to identify the type of physical quantity to convert.
102 Standard_EXPORT static Standard_Real AnyFromLS (const Standard_Real aData, const Standard_CString aUnit);
104 //! Converts the SI system units value to the local unit value.
105 //! Example: AnyFromSI(0.0254,"in.") returns 0.001
106 //! Note: aUnit is also used to identify the type of physical quantity to convert.
107 Standard_EXPORT static Standard_Real AnyFromSI (const Standard_Real aData, const Standard_CString aUnit);
109 //! Converts the aData value expressed in the
110 //! current unit for the working environment, as
111 //! defined for the physical quantity aQuantity by the
112 //! last call to the SetCurrentUnit function, into the unit aUnit.
113 Standard_EXPORT static Standard_Real CurrentToAny (const Standard_Real aData, const Standard_CString aQuantity, const Standard_CString aUnit);
115 //! Converts the aData value expressed in the unit
116 //! aUnit, into the current unit for the working
117 //! environment, as defined for the physical quantity
118 //! aQuantity by the last call to the SetCurrentUnit function.
119 Standard_EXPORT static Standard_Real CurrentFromAny (const Standard_Real aData, const Standard_CString aQuantity, const Standard_CString aUnit);
121 //! Converts the local unit value to another local unit value.
122 //! Example: AnyToAny(0.0254,"in.","millimeter") returns 1. ;
123 Standard_EXPORT static Standard_Real AnyToAny (const Standard_Real aData, const Standard_CString aUnit1, const Standard_CString aUnit2);
125 //! Converts the local system units value to the SI system unit value.
126 //! Example: LSToSI(1.,"LENGTH") returns 0.001 if the local system
127 //! length unit is millimeter.
128 Standard_EXPORT static Standard_Real LSToSI (const Standard_Real aData, const Standard_CString aQuantity);
130 //! Converts the SI system unit value to the local system units value.
131 //! Example: SIToLS(1.,"LENGTH") returns 1000. if the local system
132 //! length unit is millimeter.
133 Standard_EXPORT static Standard_Real SIToLS (const Standard_Real aData, const Standard_CString aQuantity);
135 //! Sets the local system units.
136 //! Example: SetLocalSystem(UnitsAPI_MDTV)
137 Standard_EXPORT static void SetLocalSystem (const UnitsAPI_SystemUnits aSystemUnit = UnitsAPI_SI);
139 //! Returns the current local system units.
140 Standard_EXPORT static UnitsAPI_SystemUnits LocalSystem();
142 //! Sets the current unit dimension <aUnit> to the unit quantity <aQuantity>.
143 //! Example: SetCurrentUnit("LENGTH","millimeter")
144 Standard_EXPORT static void SetCurrentUnit (const Standard_CString aQuantity, const Standard_CString aUnit);
146 //! Returns the current unit dimension <aUnit> from the unit quantity <aQuantity>.
147 Standard_EXPORT static Standard_CString CurrentUnit (const Standard_CString aQuantity);
149 //! saves the units in the file .CurrentUnits of the directory pointed by the
150 //! CSF_CurrentUnitsUserDefaults environment variable.
151 Standard_EXPORT static void Save();
153 Standard_EXPORT static void Reload();
155 //! return the dimension associated to the quantity
156 Standard_EXPORT static Handle(Units_Dimensions) Dimensions (const Standard_CString aQuantity);
158 Standard_EXPORT static Handle(Units_Dimensions) DimensionLess();
160 Standard_EXPORT static Handle(Units_Dimensions) DimensionMass();
162 Standard_EXPORT static Handle(Units_Dimensions) DimensionLength();
164 Standard_EXPORT static Handle(Units_Dimensions) DimensionTime();
166 Standard_EXPORT static Handle(Units_Dimensions) DimensionElectricCurrent();
168 Standard_EXPORT static Handle(Units_Dimensions) DimensionThermodynamicTemperature();
170 Standard_EXPORT static Handle(Units_Dimensions) DimensionAmountOfSubstance();
172 Standard_EXPORT static Handle(Units_Dimensions) DimensionLuminousIntensity();
174 Standard_EXPORT static Handle(Units_Dimensions) DimensionPlaneAngle();
176 //! Returns the basic dimensions.
177 Standard_EXPORT static Handle(Units_Dimensions) DimensionSolidAngle();
179 //! Checks the coherence between the quantity <aQuantity>
180 //! and the unit <aUnits> in the current system and
181 //! returns FALSE when it's WRONG.
182 Standard_EXPORT static Standard_Boolean Check (const Standard_CString aQuantity, const Standard_CString aUnit);
196 Standard_EXPORT static void CheckLoading (const UnitsAPI_SystemUnits aSystemUnit);
209 #endif // _UnitsAPI_HeaderFile