Expressions
Vue d'ensemble
Il est possible de définir des propriétés à l'aide d'expressions mathématiques. Dans l'interface graphique, les zones de sélection numérique ou les champs de saisie liés aux propriétés contiennent une icône bleue File:Sketcher Expressions.png. Cliquez sur l'icône ou tapez le signe égal = pour ouvrir l'éditeur d'expression pour cette propriété particulière.
Une expression FreeCAD est une expression mathématique qui suit la notation pour les opérateurs mathématiques standard et fonctionne comme décrit ci-dessous. En outre, l'expression peut faire référence à d'autres propriétés et également utiliser des conditions. Une unité facultative peut être attachée aux nombres d'une expression.
Les nombres peuvent utiliser une virgule ',' ou un point décimal '.' séparer les chiffres entiers des décimales. Lorsque le marqueur décimal est utilisé, il doit obligatoirement être suivi d'au moins un chiffre. Ainsi, les expressions 1.+2. et 1,+2, ne sont pas valides, mais 1.0+2.0 et 1,0+2,0 sont valables.
Les opérateurs et fonctions reconnaissent les unités de mesure et nécessitent des combinaisons valides si elles sont fournies. Par exemple, 2mm + 4mm est une expression valide, tandis que 2mm + 4 ne l'est pas (la raison est qu'une expression comme 1in + 4 sera très probablement interprété comme 1in + 4in par le dessinateur mais comme toutes les unités en interne sont converties au système international SI, et le système est totalement incapable de deviner de quelle unité il s'agit). Ces unités sont actuellement reconnues.
Vous pouvez utiliser constantes prédéfinies et fonctions prises en charge.
Référencement d'objets
Vous pouvez faire référence à un objet par son Name
ou son Label
. Dans le cas d'un Label
, vous devez l'entourer de double symboles <<
et >>
, comme ceci <<Label>>
.
Vous pouvez référencer n'importe quelle propriété numérique de cet objet. Par exemple, pour faire référence à la hauteur d'un cylindre, vous pouvez utiliser Cylinder.Height
ou <<Long_name_of_cylinder>>. Hauteur
.
Pour référencer des objets de la liste, la syntaxe est la suivante : <<object_label>>.list[list_index]
ou object_name.list [index_liste]
. Si vous voulez, par exemple, référencer une contrainte dans une esquisse, faire avec cette syntaxe <MySketch >>.Contraints [16]. Si vous êtes dans la même esquisse, vous pouvez omettre son nom et simplement utiliser Constraints [16].
Remarque : L'index commence par 0, la contrainte 17 a donc l'index 16.
Pour plus d'informations sur le référencement des objets, voir cette section.
Les opérations suivantes sont supportées:
Opération | Description |
---|---|
+ | Addition |
- | Soustraction |
* | Multiplication |
/ | Point flottant Division |
% | Reste |
^ | Exponentiation |
Constantes prises en charge
Les constantes suivantes sont supportées:
Constante | Description |
---|---|
e | nombre d'Euler |
pi | Pi |
Fonctions Supportées
Fonctions Mathématiques Générales
Les fonctions mathématiques suivantes sont disponibles.
Lorsqu'une fonction prend plusieurs arguments, ceux-ci peuvent être séparés par un point-virgule ';' ou une virgule suivie par un espace ','. Dans ce derniers cas, la virgule est convertie en point-virgule après la saisie. Quand on utilise un point-virgule, il n'est pas nécessaire de finir la ligne par un espace.
Les fonctions trigonométriques utilisent le degré comme unité par défaut. Pour la mesure en radian, ajoutez rad après la première valeur dans une expression. Par exemple cos(45) est identique à cos(pi rad / 4).
Ces fonctions trigonométriques sont supportées:
Fonction | Description | Plage des valeurs |
---|---|---|
acos(x) | Arc cosinus | -1 <= x <= 1 |
asin(x) | Arc sinus | -1 <= x <= 1 |
atan(x) | Arc tangente | tout |
atan2(x, y) | atan2 de x/y | tout sauf y = 0 |
cos(x) | Cosinus | tout |
cosh(x) | Cosinus hyperbolique | tout |
sin(x) | Sinus | tout |
sinh(x) | Sinus hyperbolique | tout |
tan(x) | Tangente | tout sauf x = n·90 avec n = entier |
tanh(x) | Tangente hyperbolique | tout |
Ces fonctions d’exponentiation et de logarithmisation sont prises en charge:
Fonction | Description | Plage des valeurs |
---|---|---|
exp(x) | Fonction exponentielle | tout |
log(x) | Logarithme népérien | x > 0 |
log10(x) | Logarithme décimal | x > 0 |
pow(x, y) | Les puissances | tout |
sqrt(x) | Racine carrée | x >= 0 |
Ces fonctions d'arrondi, de troncature et de reste sont supportées:
Fonction | Description | Plage des valeurs |
---|---|---|
abs(x) | Valeur absolue | tout |
ceil(x) | Partie entière par excès la plus petite valeur entière supérieure ou égale à x | tout |
floor(x) | Partie entière, la plus grande valeur entière inférieure ou égale à x | tout |
mod(x, y) | Reste après la division de x par y | tout sauf y = 0 |
round(x) | Arrondi au nombre entier le plus proche | tout |
trunc(x) | Troncature au nombre entier le plus proche | tout |
Statistiques et Fonctions cumulatives
Les fonctions cumulatives prennent un ou plusieurs arguments, séparés par un point-virgule ';' ou une virgule et un espace ','.
Les arguments peuvent inclure des références à des cellules dans une feuille de calcul. Les références de cellule sont constituées de lettres (CAPITAL) suivies du numéro de colonne.
Les arguments peuvent inclure des plages de cellules (deux références de cellules séparées par un deux-points), par exemple average(B1:B8).
Les fonctions cumulatives supportées sont
Fonction | Description | Plage des valeurs |
---|---|---|
average(x:y) | Moyenne arithmétique des valeurs dans les cellules x à y; sum(x:y) / count(x:y) | tout |
count(x:y) | Comptage de cellules de x à y | tout |
max(x:y) | Valeur Maximum dans les cellules x à y | tout |
min(x:y) | Valeur Minimum dans les cellules x à y | tout |
stddev(x:y) | Écart type de valeurs des cellules x à y | tout |
sum(x: y) | Somme de valeurs des cellules x à y | tout |
Expressions conditionnelles
Les expressions conditionnelles sont de la forme condition? resultTrue: resultFalse (condition ? résultat si VRAI : résultat si FAUX). La condition est définie comme une expression dont le résultat est '0' (faux) ou différent de zéro (vrai).
Les opérateurs relationnels suivants sont définis:
Unité | Description |
---|---|
== | égal à |
!= | différent de |
> | strictement plus grand que |
< | strictement plus petit que |
>= | plus grand ou égal à |
<= | plus petit ou égal à |
Unités
Les unités peuvent être directement utilisées dans des expressions. L'analyseur les connecte à la valeur précédente. Donc '2mm' ou '2 mm' sont valides tandis que ' mm' est invalide car il n'y a pas de valeur.
Toutes les valeurs doivent avoir une unité. Par conséquent, vous devez généralement utiliser une unité pour les valeurs dans les feuilles de calcul.
Dans certains cas, cela fonctionne même sans unité, par exemple si vous avez dans la cellule B1 du calculateur, juste le nombre 1.5 et qu'il se reporte à la hauteur du pavé. Cela ne fonctionne que parce que la hauteur du pad prédéfinit l'unité mm utilisée si aucune unité n'est donnée. Il échouera néanmoins si vous utilisez pour la hauteur du pad, par exemple Sketch1.Constraints.Width - Spreadsheet.B1 car Sketch1.Constraints.Width a une unité et Spreadsheet.B1 n'en a pas. euh ce n'est pas clair...
Les unités avec des exposants peuvent être directement entrées. Donc, par exemple mm^3 sera reconnu comme mm³ et m^3 sera reconnu comme m³.
Si vous avez une variable avec le nom d'une unité, vous devez la mettre entre << >>pour éviter qu'elle ne soit reconnue comme une unité. Par exemple, si vous avez la dimension 'Sketch.Constraints.A' , elle sera reconnue comme l'unité Ampère. Dans une expression, vous devez l'écrire sous la forme 'Sketch.Constraints.<<A>>'.
Les unités suivantes sont reconnues par l’analyseur d’expression:
Une quantité de matière:
Unité | Description |
---|---|
mmol | Millimole |
mol | Mole |
Angle:
Unité | Description |
---|---|
° | Degré; alternative à l'unité deg |
deg | Degré; alternative à l'unité ° |
rad | Radian |
gon | Gradian |
S | Seconde d'arc |
″ | Seconde d'arc; alternative à l'unité S |
M | Minute d'arc |
′ | Minute d'arc; à l'unité M |
Courant:
Unité | Description |
---|---|
mA | MilliAmpère |
A | Ampère |
kA | KiloAmpère |
MA | MégaAmpère |
Capacité électrique:
Unité | Description |
---|---|
pF | Picofarad, introduit dans la version 0.19 |
nF | Nanofarad, introduit dans la version 0.19 |
uF | Microfarad; alternative à l'unité µF, introduit dans la version 0.19 |
µF | Microfarad; alternative à l'unité uF, introduit dans la version 0.19 |
mF | Millifarad, introduit dans la version 0.19 |
F | Farad; 1 F = 1 s^4·A^2/m^2/kg, introduit dans la version 0.19 |
Conductance électrique:
Unité | Description |
---|---|
uS | Microsiemens; alternative à l'unité µS, introduit dans la version 0.19 |
µS | Microsiemens; alternative à l'unité uS, introduit dans la version 0.19 |
mS | Millisiemens, introduit dans la version 0.19 |
S | Siemens; 1 S = 1 s^3·A^2/kg/m^2, introduit dans la version 0.19 |
Inductance électrique:
Unité | Description |
---|---|
nH | Nanohenry, introduit dans la version 0.19 |
uH | Microhenry; alternative à l'unité µH, introduit dans la version 0.19 |
µH | Microhenry; alternative à l'unité uH, introduit dans la version 0.19 |
mH | Millihenry, introduit dans la version 0.19 |
H | Henry; 1 H = 1 kg·m^2/s^2/A^2, introduit dans la version 0.19 |
Résistance électrique:
Unité | Description |
---|---|
Ohm | Ohm; 1 Ohm = 1 kg·m^2/s^3/A^2, introduit dans la version 0.19 |
kOhm | Kiloohm, introduit dans la version 0.19 |
MOhm | Megaohm, introduit dans la version 0.19 |
Charge électrique:
Unité | Description |
---|---|
C | Coulomb; 1 C = 1 A·s, introduit dans la version 0.19 |
Différence de potentiel électrique:
Unité | Description |
---|---|
mV | Millivolt |
V | Volt |
kV | Kilovolt |
Energie / Travail:
Unité | Description |
---|---|
mJ | Millijoule |
J | Joule |
kJ | Kilojoule, introduit dans la version 0.19 |
eV | Electronvolt ; 1 ev = 1.602176634e-19 J, introduit dans la version 0.19 |
keV | Kiloelectronvolt, introduced in version 0.19 |
MeV | Megaelectronvolt, introduced in version 0.19 |
kWh | Kilowatt heure ; 1 kWh = 3.6e6 J, introduit dans la version 0.19 |
Ws | Watt second ; alternative à l'unité Joule |
VAs | Volt ampère seconde ; alternative à l'unité Joule, introduit dans la version 0.19 |
CV | Coulomb·volt ; alternative à l'unité Joule, introduit dans la version 0.19 |
Force:
Unité | Description |
---|---|
mN | milliNewton |
N | Newton |
kN | kiloNewton |
MN | mégaNewton |
lbf | Livre-force |
Longueur:
Unité | Description |
---|---|
nm | nanomètre |
um | micromètre; alternative à l'unité µm |
µm | micromètre; alternative à l'unité um |
mm | millimètre |
cm | centimètre |
m | mètre |
dm | décimètre |
km | kilomètre |
mil | millième de pouce; alternative à l'unité thou |
thou | millième de pouce; alternative à l'unité mil |
in | pouce |
ft | pied; alternative à l'unité ' |
' | pied; alternative à l'unité ft |
yd | yard ou verge |
mi | mille |
Intensité lumineuse :
Unit" | Description |
---|---|
cd | Candela |
Intensité du champ magnétique:
Unité | Description |
---|---|
Oe | Oersted; 1 Oe = 79.57747 A/m, introduit dans la version 0.19 |
Flux d'induction magnétique
Unité | Description |
---|---|
Wb | Weber; 1 Wb = 1 kg*m^2/s^2/A, introduit dans la version 0.19 |
Densité de flux magnétique :
Unité | Description | ||
---|---|---|---|
G | Gauss; 1 G = 1 e-4 T, introduced in version 0.19|- | T | Tesla; 1 T = 1 kg/s^2/A, introduit dans la version 0.19 |
Poids:
Unité | Description |
---|---|
ug | microgramme; alternative à l'unité µg |
µg | microgramme; alternative à l'unité ug |
mg | milligramme |
g | gramme |
kg | kilogramme |
t | Tonne |
oz | Once |
lb | livre; alternative à l'unité lbm |
lbm | Pound; alternative à l'unité lb |
st | Stone |
cwt | Hundredweight |
Puissance:
Unité | Description |
---|---|
W | Watt |
kW | Kilowatt, introduit dans la version 0.19 |
VA | Voltampère |
Pression:
Unité | Description |
---|---|
Pa | pascal |
kPa | Kilopascal |
MPa | Mégapascal |
GPa | Gigapascal |
mbar | MilliBar, introduit dans la version 0.19 |
bar | Bar, introduit dans la version 0.19 |
uTorr | Microtorr; alternative à l'unité µTorr |
µTorr | Microtorr; alternative à l'unité uTorr |
mTorr | Millitorr |
Torr | Torr; 1 Torr = 133.32 Pa |
psi | Livre-force par pouce carré; 1 psi = 6.895 kPa |
ksi | Kilolivre-force par pouce carré |
Mpsi | Megalivre-force par pouce carré, introduit dans la version 0.19 |
Température:
Unité | Description |
---|---|
uK | microkelvin; alternative à l'unité µK |
µK | microkelvin; alternative à l'unité uK |
mK | millikelvin |
K | Kelvin |
Inductance électrique:
Unité | Description |
---|---|
nH | Nanohenry, introduit dans la version 0.19 |
uH | Microhenry; alternative à l'unité µH, introduit dans la version 0.19 |
µH | Microhenry; alternative à l'unité uH, introduit dans la version 0.19 |
mH | Millihenry, introduit dans la version 0.19 |
H | Henry; 1 H = 1 kg·m^2/s^2/A^2, introduit dans la version 0.19 |
Couple:
Unité | Description |
---|---|
Nm | Newton mètre |
Volume:
Unité | Description |
---|---|
ml | MilliLitre, introduit dans la version 0.19 |
l | Litre |
cft | Pied cube, introduit dans la version 0.19 |
Unités impériales spéciales:
Unité | Description |
---|---|
mph | Mille par heure, introduit dans la version 0.19 |
sqft | Pied carré, introduit dans la version 0.19 |
Les unités couramment utilisées suivantes ne sont pas encore prises en charge:
Unité | Description | Alternative |
---|---|---|
°C | Celsius | [°C] + 273.15 K |
°F | Fahrenheit; | ([°F] + 459.67) × 5/9 |
u | Unité de masse atomique unifiée; alternative à l'unité "Da" | 1.66053906660e-27 kg |
Da | Dalton; alternative à l'unité "u" | 1.66053906660e-27 kg |
sr | Steradian | Pas directement |
lm | Lumen | Pas directement |
lx | Lux | Pas directement |
Références aux données CAD
Il est possible d'utiliser des données provenant de l'objet courant ou d'autres objets du document dans une expression. La syntaxe pour référencer un champ se fait comme ceci : "object.property". Si la propriété est un composé de champs, ils peuvent être accessibles ainsi : "object.property.field".
Le tableau suivant montre quelques exemples :
Données CAO | Appel dans l'expression | Résultat |
---|---|---|
Longueur paramétrique d'un Cube de l'atelier Part | Cube.Length
|
Longueur en mm |
Volume du Cube | Cube.Shape.Volume
|
Volume en mm³ sans unité |
Type de la forme Cube | Cube.Shape.ShapeType
|
Chaîne de caractère : Solid |
Label du Cube | Cube.Label
|
Chaîne de caractère : Label |
coordonnée x du centre de gravité du Cube | Cube.Shape.CenterOfMass.x
|
coordonnée x en mm sans unité |
Valeur d'une contrainte dans une esquisse | Constraints.Width
|
Valeur numérique de la contrainte nommée 'Width ' dans l'esquisse, si l'expression est utilisée dans l'esquisse elle-même.
|
Valeur d'une contrainte provenant d'une autre esquisse | MySketch.Constraints.Width
|
Valeur numérique de la contrainte nommée 'Width ' dans l'esquisse, si l'expression est utilisée en dehors de l'esquisse.
|
Valeur d'un alias de feuille de calcul | Spreadsheet.Depth
|
Valeur de l'alias nommé "Depth " dans la feuille de calcul "Spreadsheet "
|
Valeur d'une propriété locale | Length
|
Valeur de la propriété Length , par exemple dans un objet "Pad" on pourrait l'utiliser pour calculer Length2, si celle-ci est utilisé.
|
Variables globales
Pour le moment il n'y a pas de notion de variables globales dans FreeCAD. Mais des variables arbitraires peuvent être définies comme des cellules dans une feuille de calcul en utilisant l'atelier Spreadsheet, auquelles on aura donné un nom en utilisant l'alias de la propriété pour la cellule utilisée (clic-droit dans la cellule). Ainsi, elles peuvent être accessibles à partir de toute expression comme toute autre propriété de l'objet.
Liaison entre documents
Il est possible (avec limitations) de définir une propriété d'un objet dans votre document actuel (fichier ".FCstd") en utilisant une expression pour référencer une propriété d'un objet contenu dans un autre document (fichier ".FCstd"). Par exemple, une cellule dans une feuille de calcul ou la longueur d'un cube de pièce, etc. dans un document peut être définie par une expression faisant référence à la valeur de placement X ou à une autre propriété d'un objet contenu dans un autre document.
Note importante : Imaginez que vous utilisiez le nom d'un document pour le référencer depuis d'autres documents. Lorsque vous sauverez ce document pour la première fois, vous allez certainement lui choisir un nom différent de "Unnamed1" (ou sa version traduite), et là, quand vous allez le ré-ouvrir, les liens seront perdus. Il est donc recommandé de créer en premier le document "maître", puis d'y créer immédiatement la feuille de calcul, de sauver le document maître avec un nom had-hoc et de le fermer. Après l'avoir ouvert à nouveau, son nom sera fixé en interne dans FreeCAD. Ensuite vous pourrez toujours faire des modification mais il ne faudra pas le renommer.
Une fois que le document maître avec la feuille de calcul est créé et enregistré (nommé), vous pouvez créer des documents dépendants en toute sécurité. Par exemple, si vous nommez le document maître "master
", la feuille de calcul "modelConstants
" et attribuez à une cellule un nom d'alias "Length
", vous pouvez ensuite accéder à la valeur comme suit:
master#modelConstants.Length
Remarque: le document maître doit être chargé pour que les valeurs de ce dernier soient disponibles pour le document dépendant.
Malheureusement, le vérificateur intégré suppose parfois qu’aucun nom valide étendu n’existe. Continuez à taper quand même. Lorsque vous avez terminé la référence complète, le bouton OK devient actif.
Bien sûr, vous pouvez charger les documents correspondants à tout moment pour y faire les modifications que vous voudrez.
Problèmes connus / tâches restantes
- Le graphe de dépendance est basé sur la relation entre les objets et le document, et non sur les propriétés. Cela signifie que vous ne pouvez pas renseigner et interroger le même objet, par exemple dans une feuille de calcul, même si il n'y a pas de dépendance cyclique si l'on considère seulement les propriétés, vous ne pouvez pas avoir d'objet dont les dimensions proviennent de la feuille de calcul et calculer son volume dans la même feuille de calcul. Pour contourner le problème, utilisez plusieurs feuilles de calcul, par exemple une pour contrôler votre modèle, et une autre pour les rapports.
- L'analyseur syntaxique d'expressions ne gère pas bien les parenthèses et n'est pas capable d'analyser correctement certaines expressions. Par exemple : "= (A1 > A2) ? 1 : 0" donne une erreur, alors que "= A1 > A2 ? 1 : 0" est accepté. L'expression "= 5 + ((A1>A2) ? 1 : 0)" va contrarier l'analyseur syntaxique dans tous les cas.
- Comme indiqué ci-dessus, malheureusement, le vérificateur intégré prétend parfois qu'un nom valide n'existe pas. Continuez à taper quand même. Une fois la référence complète terminée, le bouton OK devient actif.
- Il n'y a aucun gestionnaire d'expressions où toutes les expressions d'un document seraient répertoriées et où elles pourraient être créées, supprimées, interrogées, etc.
- Les noms des contraintes Sketcher ne doivent contenir aucun blanc lorsque la valeur est calculée par une expression, voir la discussion sur le forum.
- les bogues et tickets ouverts pour les expressions sont référencés sur le Bugtracker de Freecad, catégorie Expressions
- Démarrer avec FreeCAD
- Installation : Téléchargements, Windows, Linux, Mac, Logiciels supplémentaires, Docker, AppImage, Ubuntu Snap
- Bases : À propos de FreeCAD, Interface, Navigation par la souris, Méthodes de sélection, Objet name, Préférences, Ateliers, Structure du document, Propriétés, Contribuer à FreeCAD, Faire un don
- Aide : Tutoriels, Tutoriels vidéo
- Ateliers : Std Base, Arch, Assembly, CAM, Draft, FEM, Inspection, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Start, Surface, TechDraw, Test, Web