Units/fr

Pour commencer, voici un peu de lecture sur les unités :


 * système SI
 * unités Imperiales
 * SId unités derivées
 * unités d'angles

Exemples
# -- some examples of the FreeCAD unit translation system -- FreeCAD.Units.parseQuantity tu('10 m') tu('3/8 in') tu('100 km/h') tu('100 km/h')/tu('m/s') tu('m^2*kg*s^-3*A^-2') # or tu('(m^2*kg)/(A^2*s^3)') tu('2*pi rad') # full circle tu('2*pi rad') / tu('gon') tu('1ft+(3+7/16)in') tu('1\'(3+7/16)"') # the ' we have to escape because of python tu('sin(pi)') b = Part.makeBox(tu('2in'),tu('2m')/100,10)
 * 1) make a shortcut for the examples
 * 1) 10 meters in internal numbers
 * 1) doing math
 * 1) combined stuff
 * 1) transfer to other units
 * 1) derived units (Ohm)
 * 1) angles
 * 1) as gon
 * 1) more imperial
 * 1) or
 * 1) trigonometry
 * 1) Using translated units as parameters, this command will create a 50.8mm x 20mm x 10mm box

Unités supportées
Voici pour le moment, les unités définies dans FreeCAD. Il est facile pour l'utilisateur, et d'ajouter une nouvelle définition d'unité. La définition des unités supportées sont ici.

Longueurs Métriques "mm"   1.0;        // millimètre       (unité standard interne de longueur) "m"    1000.0;     // mètre "cm"   10.0;       // centimètre "dm"   100.0;      // décimètre "km"   1000000.0;  // kilomètre

Longueurs Imperiales "in" "\"" 25.4;       // inch "ft" "'"   304.8;      // foot "th"       0.0254;     // thou "yr"       914.4;      // yard

Masses Métriques "kg"   1.0;        // kilogramme       (unité standard interne de masse) "g"    0.001;      // gramme "mg"   0.000001;   // milligramme "t"    1000.0;     // tonne

Masse Imperiales "lb"   0.45359237; // pound "oz"   0.45359237; // ounce "st"   6.35029318; // Stone "cwt"  50.80234544;// hundredweights

Angle "deg"  1.0;        // degré         (unité standard interne de d'angle) "rad"  180/M_PI;   // radian "gon"  360.0/400.0;// grade Temps "s"    1.0;        // seconde         (unité standard interne de temps) "min"  60.0;       // minute "h"    3600.0;     // heure

Autres unités SI "A"    1.0;        // Ampère         (unité standard interne de courant électrique) "K"    1.0;        // Kelvin         (unité standard interne de température thermodynamique) "cd"   1.0;        // Candela        (unité standard interne de d'intensité lumineuse) "mol"  1.0;        // Mole           (unité standard interne de quantité de matière) Volumes Métriques "µl"   1.0;        // microlitre mm^3 (dérivé du volume standard) "ml"   1000.0;     // millilitre cm^3 "l"    1000000.0;  // Litre      dm^3

Objectifs et principes : propositions d'extension du système de gestion des unités
Un système de gestion de la vulgarisation des unités, est en développant. Le concept de système d'unités, est proposé dans les sections suivantes, activé lors d'une instance en cours d'exécution de FreeCAD. L'intérêt pour la définition d'un tel concept, est de travailler plus facilement avec le plus grand nombre de type d'unités physique que l'on veut, (même ceux créés par l'utilisateur), sans augmenter la complexité de la gestion de l'unité ni pour l'utilisateur, ni pour les développeurs de  FreeCAD.

En bref, un événement de mise à l'échelle d'unités, est localisé avec précision, et réalisée génériquement.

Atteindre une telle flexibilité, est particulièrement nécessaire lorsque l'on commence à traiter les propriétés des matériaux, qui peuvent avoir des unités très différentes, et difficiles à gérer manuellement.

Le raisonnement proposé, permet la manutention des unités telles que décrites dans le "Guide for the Use of the International System of Units (SI)" et "The International System of Units (SI)", tous les deux du NIST.

Dans cette proposition, une petite section de remise en mémoire, quels sont les contextes possibles, pour lesquelles une gestion des unités est nécessaire ?

In Organizing section, we present the data model retained to achieve unit management, based on 3 objects, the unit, the unit dictionary, and the unit system. Finally, a short API of a 4th object called the unit manager is presented as well.

Résultat
Merci pour cette extension, nous visons à faciliter l'échelle d'unité qui peut se produire, entre différentes tâches professionnelles. Par exemple, les dessins techniques peuvent être fait dans un système d'unité standard, tandis que la modélisation par éléments finis, peut être géré dans un système d'unité plus adapté pour cela.

L'échange de données, entre ces deux types d'activités devient plus facile avec cette extension.

Remise en mémoire
Dans cette section, sont présents les contextes d'utilisation d'un tel système de gestion d'unité. A partir de ces contextes, nous sommes alors en mesure de définir ses spécifications techniques.

2 contextes, sont essentiellement donnés, à titre d'exemple.

Contexte 1 : ouverture de fichiers de données
Ce cas est probablement le cas le plus fréquent. Vous recevez un fichier contenant par exemple un modèle géométrique, ou décrire un matériau avec beaucoup de propriétés. Le modèle géométrique est exprimé en mètres, ou les propriétés des matériaux selon le système d'unités international.

Dommage ...

Vous êtes un expert en FE modélisation, et vous travaillerez généralement avec, des millimètres pour la longueur, MegaPascal pour la pression, tonne pour la masse ...

Dans ce contexte, la gestion de l'unité est nécessaire à l'échelle des données, à partir d'un système unitaire initialement défini dans le fichier d'entrée, dans le système défini par l'utilisateur de l'unité cible.

Contexte 2 : changement entre systèmes d'unités pendant l'exécution
Dans ce cas, vous pouvez être en même temps celui qui réalise le dessin, et celui qui va gérer la modélisation des éléments finis (FE). Comme dans le cas précédent, les systèmes unitaires pour ces 2 tâches, ne sont pas les mêmes, et, vous avez besoin de changer le système d'unité initial, lors de l'exécution de celui que vous préférez.

Logique d'échelle d'une unité
Dans la section 2 de "Remise en mémoire", ont été présentés, les contextes, d'échelles et d'unités en cours d'exécution. Certains éléments, doivent être mis en évidence, à partir de ces deux contextes.

Cohérence d'unités tout au long de l'instance, en cours d'exécution
Le système proposé, est basé sur une hypothèse : l'utilisateur, travaille dans un système d'unité cohérent. Par exemple, cela signifie que si l'utilisateur exprime la longueur en millimètres, nécessairement la surface sera exprimée en millimètres carrés, et non en mètres carrés. Il s'agit d'une hypothèse.

Système d'unité
En raison d'une hypothèse, il est pertinent de définir un système d'unités. Un système d'unité s'applique à : Selon Guide "Guide for the Use of the International System of Units (SI)" du NIST, il y a 7 unités physiques de base. Nous avons choisi d'exprimer un système d'unités en fonction de ces 7 unités de base.
 * une instance FreeCAD en cours d'exécution, et, dans laquelle vous travaillez.
 * ou bien, peut également s'appliquer globalement au contenu d'un fichier ouvert.

Lorsque vous travaillez au sein d'une instance FreeCAD, l'utilisateur doit d'abord définir le système d'unités selon laquelle il/elle travaille, avant qu'il/elle décide de passer à un autre système d'unité, ou avant d'importer des données à partir d'un fichier.

Ce système s'appliquera, jusqu'à ce que l'utilisateur décide de changer l'unité. S'il/elle le fait, toutes les données de Grandeur seront réduites.

En considérant cette seule hypothèse, toutes les données que l'utilisateur va entrer manuellement dans FreeCAD, sont supposées être cohérentes avec le système d'unité choisi.

C'est l'avantage, de travailler avec un système d'unités, défini au niveau de l'instance en cours d'exécution de FreeCAD, ou, au niveau du fichier de données, (au lieu de l'unité définie au niveau des données) c'est alors, que la gestion de l'unité est considérablement simplifiée.

Voici quelques exemples de systèmes d'unités.
 * mètre, kilogramme, seconde, ampère, kelvin, mole, candela.
 * millimètre, tonne, milliseconde, ampère, kelvin, mole, candela.
 * millimètre, kilogramme, milliseconde, ampère, kelvin, mole, candela.

Unités de base et dérivées
les unités dérivées sont créées par la combinaison d'unités de base. Par exemple, d'une accélération (m/s), combine à la fois la longueur, et, le temps. Une image intéressante présentant les relations entre les unités de base, et, les unités dérivées, peut être vu ici, aussi de NIST.

Merci, à la définition d'une unité centrale, il est possible que l'utilisateur travaille avec n'importe quel type d'unités dérivées, sans la nécessité, que les développeurs de FreeCAD les prévoient à l'avance.

Symboles des unités de base dérivées
Selon The International System of Units (SI), les symboles pour préciser les unités, sont officiellement approuvées. Deux conséquences peuvent être misent en évidence à partir de cela.
 * il n'est pas facile pour un programme informatique de travailler avec les symboles d'unités, parce que certains symboles, sont des lettres grecques. Par conséquent, le traitement par un programme peut être difficile.
 * alors que certaines unités, et, leurs symboles peuvent être largement utilisés, ils peuvent, ne pas être approuvés officiellement, comme par exemple l'unité, la tonne (voir p32 The International System of Units (SI)).

Pour surmonter ces limites, et, garder une bonne flexibilité, le système proposé favorise l'utilisation des grandeurs d'unités au lieu des symboles d'unité, qui restent néanmoins disponibles pour une raison d'ergonomie.

Modèle de données
Les trois objets de base, du système de gestion de l'unité sont présents, à savoir l'unité, le dictionnaire d'unités et le système d'unités.

Unité
Comme avant-propos, il est important de souligner, que l'objet unité en lui-même indique, une grandeur comme la longueur, la masse, le temps ... Il n'en précise pas l'ampleur, comme le mètre, millimètre, kilomètre ... Cette dernière information est spécifiée par le système d'unité.

Grandeur
Obligatoirement, une chaîne, indique la Grandeur de l'unité. La Grandeur des 7 unités de base sont indiquées ci-dessous (à partir de Guide for the Use of the International System of Units (SI)).

L'attribut de Grandeur permet d'identifier l'unité. Deux unités ne peuvent pas partager la même Grandeur.

Signature
La signature, est dans tableau d'INTEGER (entiers) de 7 cases, la signature doit obligatoirement avoir une taille de 7 (chiffres), la position du chiffre dans le tableau définit l'unité.

La signature des 7 unités de base sont les suivantes:

À partir de ces 7 unités, nous sommes en mesure d'exprimer toutes les unités dérivées, définies dans Guide for the Use of the International System of Units (SI), et, au besoin, d'en créer de nouvelles, comme par exemple :

La signature, est l'attribut de mise à l'échelle, qui peut être réalisée pour l'unité, d'une manière générique.

Symboles
Un tableau de [real, string] (sens [grandeur (magnitude), symbol]) qui répertorie tous les symboles connus par FreeCAD. Merci pour ce tableau, de cette manière, l'API de mise à l'échelle d'une unité devient plus ergonomique, car les symboles et grandeurs connexes sont liées.

Ce tableau peut être étendu si nécessaire.

Par exemple, la liste des symboles de l'unité de longueur, et ses associés de grandeurs (magnitudes) est :

[1e+12,"Tm"],[1e+09,"Gm"],[1e+06,"Mm"], [1e+03,"km"],[1e+02,"hm"],[1e+01,"dam"], [1e+00,"m"],[1e-01,"dm"],[1e-02,"cm"], [1e-03,"mm"],[1e-06,"µm"],[1e-09,"nm"], [1e-12,"pm"],[1e-15,"fm"]

Les symboles standards peuvent être trouvés sur le site de NIST pages 23 à 26 et page 32 (metric ton ou tonne ) du The International System of Units (SI).

Base de données d'unités
Toutes les unités disponibles dans FreeCAD, et les nouvelles créés par l'utilisateur, doivent être stockées dans unit dictionary, qui est un fichier .XML (fichier de configuration FreeCAD), de façon à être récupéré en cas de besoin, soit lors de la réalisation d'échelle unité.

Units
Array of units, contained in the unit dictionary.

Unit system
A unit system is the object that allows the user defining the current unit magnitude of each base units with which she/he is working. For instance, knowing that the user is working with millimeter, tonne, and second, thanks to the use of a unit system, FreeCAD can know that energy is expressed in terms of milliJoule, force in terms of Newton, and stress in terms of MegaPascal. Hence a unit system is only defined by a name (for instance Standard unit system) and a magnitude table specifying for each of the 7 base units, what is its corresponding magnitude.

Name
String allowing to the user identifying what is the unit system.

Magnitudes
By specifying the magnitude of the 7 base units, a unit system is defined.

For instance [1e-03, 1e+03, 1, 1, 1, 1, 1], meaning millimeter, tonne, second, ampere, Kelvin, mole, candela

Unit management API
Only the logic of some methods is presented, in order to highlight some features. These methods could belong to an object called Unit manager.

isValid
The unit dictionary can be an XML file (FreeCAD configuration file). It contains a list of defined units. Such a dictionary is required for the proposed unit management system to work.

It must fulfills some conditions that should be checked before activating the unit management system. These conditions are:
 * check that all base units are defined
 * check that a dimension is not defined twice through the units
 * check that a symbol is not defined twice in all the existing symbols
 * check that the signatures of all units have all the same size
 * chacke that a standard symbol (for which magnitude is 1) is defined for all units

isCompatibleWithThisSignature
A unit dictionary defines a set of units and their known magnitudes. When managing a unit, it is relevant to check that its signature is compatible with the set of units registered in the unit dictionary, so as to process it. This check includes:
 * check that the input signature length is of the same size than the unit dictionary unit signatures

scaleUnitFromSymbolToSymbol
Knowing a value, an initial unit by its symbol, the target unit by its symbol, scale the value.

scaleUnitFromSymbolToUnitSystem
Knowing a value, an initial unit by its symbol, the target unit system, scale the value.

scaleUnitFromUnitSystemToSymbol
Knowing a value, an initial unit system, the target unit by its symbol, scale the value.

Motivations for such a management: example of application
Let's assume that we are going to setup a finite element model. To build our model, we need the mesh, material properties, and to define numerical parameters. Considering that they can be tens of material properties to manage, expressed with different units, sometimes not always very common, it is interesting for the user to only have to specify a global unit system, without caring much.

FreeCAD would then just do the job.

As FreeCAD developpers and FreeCAD users do not necessarily know all units that can be defined in the material property files, it is interesting to rely on a generic system.

Let's assume that in such a file we have a fair number of exotic material properties expressed with exotic units, and that we want to work in a specific unit system.

It is easy with the proposed extension to scale any of these properties by knowing their signatures, magnitudes, and the target unit system.

For each of the properties, the scaling is obtained by multiplying the initial property value with the factor $$\frac{initialMagnitude}{targetMagnitude}$$.

The targetMagnitude is then simply obtained with the operation $$\prod_{bu} targetMagnitude_{bu}^{signature_{bu}}$$, bu standing for base unit.

It becomes thus very easy to manage any number of properties with any kind of units with very few lines of Python.

Next actions

 * Implementing Quantity and Unit classes (mostly done)
 * Implementing InputField as User front end (in progress)
 * UnitsCalculator as test bed (in progress)
 * Quantity documentation (in progress)
 * UnitsCalculator documentation
 * Update Material framework to work only with Quantities
 * Test Cases