Ausdrücke
Seit der Version 0.16 ist es möglich, Modelleigenschaften durch Rechenformeln festzulegen und mit anderen Eigenschaften von der Benutzeroberfläche aus zu verknüpfen. Eingabefelder von Eigenschaften für Zahlen oder Größenangaben enthalten einen blauen Knopf File:Sketcher Expressions.png. Wenn man auf dieses Symbol klickt oder das Gleichheitszeichen (=) eingibt, öffnet sich der Formeleditor für die entsprechende Eigenschaft.
Ein Rechenausdruck in FreeCAD ist ein mathematischer Ausdruck in der üblichen Schreibweise für die Standardrechenarten (+, -, * und /) und mathematische Funktionen (siehe unten). Zusätzlich können referenzierte Eigenschaften anderer Objekte und bedingte Ausdrücke verwendet werden. Zahlen in Rechenausdrücken können mit einer optionalen Einheit versehen sein.
Numbers may use either a comma ',' or a decimal point '.' separating whole digits from decimals. When the decimal marker is used, it must be followed by at least one digit. Thus, the expressions 1.+2. and 1,+2, are invalid, but 1.0 + 2.0 and 1,0 + 2,0 are valid.
Die Rechenarten und Funktionen verstehen sich auf Einheiten und erfordern deshalb bei der Verwendung von Einheiten zulässige Einheitenkombinationen. 2mm+4mm ist zum Beispiel ein zulässiger Rechenausdruck, während 2mm+4 nicht zulässig ist. (Der Grund dafür ist, das ein Ausdruck wie 1in + 4 von Menschen wohl als 1in + 4in interpretiert wird, das System dies jedoch nicht erraten kann, da alle Einheiten intern in das SI-System konvertiert werden.)
You can use predefined constants and functions.
Referencing objects
You can reference to an object by its Name
or by its Label
. In the case of a Label
, it must be enclosed in double <<
and >>
symbols, such as <<Label>>
.
You can reference any numerical property of this object. For example, to refer to a Cylinder's height, you may use Cylinder.Height
or <<Long_name_of_cylinder>>.Height
.
To reference list objects, the syntax is <<object_label>>.list[list_index]
or object_name.list[list_index]
. If you want for example reference a constraint in a sketch, do it this way <<MySketch>>.Constraints[16]. If you are in the same sketch you can omit its name and just use Constraints[16].
Note: The index starts with 0, therefore constraint 17 has the index 16.
For more info about referencing objects, see this section.
The following operators are supported:
Operator | Description |
---|---|
+ | Addition |
- | Subtraction |
* | Multiplication |
/ | Floating point Division |
% | Remainder |
^ | Exponentiation |
Mehrere Argumente einer Funktion können entweder durch Semikolon (';') oder ein Komma gefolgt von einem Leerzeichen getrennt werden. Im letzteren Fall wird das Komma nach der Eingabe in ein Semikolon konvertiert. Wenn ein Semikolon verwendet wurde, ist kein nachfolgendes Leerzeichen erforderlich.
The following constants are supported:
Constant | Description |
---|---|
e | Euler's number |
pi | Pi |
Unterstützte Funktionen
General Mathematical Functions
Die nachfolgend aufgeführten mathematischen Funktionen sind verfügbar.
Multiple arguments to a function may be separated by either a semicolon ';' or a comma followed by a space ', '. In the latter case, the comma is converted to a semicolon after entry. When a semicolon is used, no trailing space is necessary.
Trigonometric functions use degree as their default unit. For radian measure, add rad following the first value in an expression. So e.g. cos(45) is the same as cos(pi rad / 4).
These trigonometric functions are supported:
Function | Description | Value range |
---|---|---|
acos(x) | Arc cosine | -1 <= x <= 1 |
asin(x) | Arc sine | -1 <= x <= 1 |
atan(x) | Arc tangent | all |
atan2(x, y) | Arc tangent of x/y | all, except y = 0 |
cos(x) | Cosine | all |
cosh(x) | Hyperbolic cosine | all |
sin(x) | Sine | all |
sinh(x) | Hyperbolic sine | all |
tan(x) | Tangent | all, except of x = n·90 with n = integer |
tanh(x) | Hyperbolic tangent | all |
These functions for exponentiation and logarithmization are supported:
Function | Description | Value range |
---|---|---|
exp(x) | Exponential function | all |
log(x) | Natural logarithm | x > 0 |
log10(x) | Common logarithm | x > 0 |
pow(x, y) | Exponentiation | all |
sqrt(x) | Square root | x >= 0 |
These functions for rounding, truncation and remainder are supported:
Function | Description | Value range |
---|---|---|
abs(x) | Absolute value | all |
ceil(x) | Ceiling function smallest integer value greater than or equal to x | all |
floor(x) | Floor function, largest integer value less than or equal to x | all |
mod(x, y) | Remainder after dividing x by y | all, except y = 0 |
round(x) | Rounding to the nearest integer | all |
trunc(x) | Truncation to the nearest integer | all |
Die Konstanten pi und e sind vordefiniert.
These aggregate functions are supported:
Function | Description | Value range |
---|---|---|
average(x:y) | Arithmetic mean of values in cells x through y; sum(x:y) / count(x:y) | all |
count(x:y) | Counting of cells from x through y | all |
max(x:y) | Maximum value in cells x through y | all |
min(x:y) | Minimum value in cells x through y | all |
stddev(x:y) | Standard deviation of values in cells x through y | all |
sum(x: y) | Sum of values in cells x through y | all |
Conditional Expressions
Bedingte Ausdrücke haben die Form Bedingung ? ResultatTrue : ResultatFalse
The following relational operators are defined:
Unit | Description |
---|---|
== | equal to |
!= | not equal to |
> | greater than |
< | less than |
>= | greater than or equal to |
<= | less than or equal to |
Die Bedingung muss ein Ausdruck sein, der entweder 0 (false
) oder ungleich 0 (true
) ergibt. Die folgenden Vergleichsoperatoren stehen zur Verfügung: ==, !=, >, <, >= und <=.
Units can directly be used in expressions. The parser connects them to the previous value. So '2mm' or '2 mm' is valid while ' mm' is invalid because there is no preceding value.
All values must have a unit. Therefore you must in general use a unit for values in spreadsheets.
In some cases it works even without a unit, for example if you have e.g. in spreadsheet cell B1 just the number 1.5 and refer to it for a pad height. This only works because the pad height predefines the unit mm that is used if no unit is given. It will nevertheless fail if you use for the pad height e.g. Sketch1.Constraints.Width - Spreadsheet.B1 because Sketch1.Constraints.Width has a unit and Spreadsheet.B1 has not.
Units with exponents can directly be entered. So e.g. mm^3 will be recognized as mm³ and m^3 will be recognized as m³.
Trigonometrische Funktionen verwenden Grad als Standardeinheit; durch Hinzufügen von rad nach dem ersten Wert kann auch die Einheit Radiant in einem Ausdruck verwendet werden. Beispiel: cos(45) ist das Gleiche wie cos(pi rad / 4).
The following units are recognized by the expression parser:
Amount of substance:
Unit | Description |
---|---|
mmol | Millimole |
mol | Mole |
Angle:
Unit | Description |
---|---|
° | Degree; alternative to the unit deg |
deg | Degree; alternative to the unit ° |
rad | Radian |
gon | Gradian |
S | Second of arc |
″ | Second of arc; alternative to the unit S |
M | Minute of arc |
′ | Minute of arc; alternative to the unit M |
Current:
Unit | Description |
---|---|
mA | Milliampere |
A | Ampere |
kA | Kiloampere |
MA | Megaampere |
Electrical Capacitance:
Unit | Description |
---|---|
pF | Picofarad, introduced in version 0.19 |
nF | Nanofarad, introduced in version 0.19 |
uF | Microfarad; alternative to the unit µF, introduced in version 0.19 |
µF | Microfarad; alternative to the unit uF, introduced in version 0.19 |
mF | Millifarad, introduced in version 0.19 |
F | Farad; 1 F = 1 s^4·A^2/m^2/kg, introduced in version 0.19 |
Electrical Conductance:
Unit | Description |
---|---|
uS | Microsiemens; alternative to the unit µS, introduced in version 0.19 |
µS | Microsiemens; alternative to the unit uS, introduced in version 0.19 |
mS | Millisiemens, introduced in version 0.19 |
S | Siemens; 1 S = 1 s^3·A^2/kg/m^2, introduced in version 0.19 |
Electrical Inductance:
Unit | Description |
---|---|
nH | Nanohenry, introduced in version 0.19 |
uH | Microhenry; alternative to the unit µH, introduced in version 0.19 |
µH | Microhenry; alternative to the unit uH, introduced in version 0.19 |
mH | Millihenry, introduced in version 0.19 |
H | Henry; 1 H = 1 kg·m^2/s^2/A^2, introduced in version 0.19 |
Electrical Resistance:
Unit | Description |
---|---|
Ohm | Ohm; 1 Ohm = 1 kg·m^2/s^3/A^2, introduced in version 0.19 |
kOhm | Kiloohm, introduced in version 0.19 |
MOhm | Megaohm, introduced in version 0.19 |
Electric Charge:
Unit | Description |
---|---|
C | Coulomb; 1 C = 1 A·s, introduced in version 0.19 |
Electric Potential:
Unit | Description |
---|---|
mV | Millivolt |
V | Volt |
kV | Kilovolt |
Energy / Work:
Unit | Description |
---|---|
mJ | Millijoule |
J | Joule |
kJ | Kilojoule, introduced in version 0.19 |
eV | Electronvolt; 1 ev = 1.602176634e-19 J, introduced in version 0.19 |
keV | Kiloelectronvolt, introduced in version 0.19 |
MeV | Megaelectronvolt, introduced in version 0.19 |
kWh | Kilowatt hour; 1 kWh = 3.6e6 J, introduced in version 0.19 |
Ws | Watt second; alternative to the unit Joule |
VAs | Volt-ampere-second; alternative to the unit Joule |
CV | Coulomb-volt; alternative to the unit Joule |
cal | Calorie; 1 cal = 4.184 J, introduced in version 0.19 |
kcal | Kilocalorie, introduced in version 0.19 |
Force:
Unit | Description |
---|---|
mN | Millinewton |
N | Newton |
kN | Kilonewton |
MN | Meganewton |
lbf | Pound of force |
Length:
Unit | Description |
---|---|
nm | Nanometer |
um | Micrometer; alternative to the unit µm |
µm | Micrometer; alternative to the unit mu |
mm | Millimeter |
cm | Centimeter |
mm | Millimeter |
dm | Decimeter |
m | Meter |
km | Kilometer |
mil | Thousandth of an inch; alternative to the unit thou |
thou | Thousandth of an inch; alternative to the unit mil |
in | Inch |
ft | Foot; alternative to the unit ' |
' | Foot; alternative to the unit ft |
yd | Yard |
mi | Mile |
Luminous Intensity:
Unit | Description |
---|---|
cd | Candela |
Magnetic Field Strength:
Unit | Description |
---|---|
Oe | Oersted; 1 Oe = 79.57747 A/m, introduced in version 0.19 |
Magnetic Flux:
Unit | Description |
---|---|
Wb | Weber; 1 Wb = 1 kg*m^2/s^2/A, introduced in version 0.19 |
Magnetic Flux Density:
Unit | Description |
---|---|
G | Gauss; 1 G = 1 e-4 T, introduced in version 0.19 |
T | Tesla; 1 T = 1 kg/s^2/A, introduced in version 0.19 |
Mass:
Unit | Description |
---|---|
ug | Microgram; alternative to the unit µg |
µg | Microgram; alternative to the unit ug |
mg | Milligram |
g | Gram |
kg | Kilogram |
t | Tonne |
oz | Ounce |
lb | Pound; alternative to the unit lbm |
lbm | Pound; alternative to the unit lb |
st | Stone |
cwt | Hundredweight |
Bedingte Ausdrücke
Pressure:
Unit | Description |
---|---|
Pa | Pascal |
kPa | Kilopascal |
MPa | Megapascal |
GPa | Gigapascal |
mbar | MilliBar, introduced in version 0.19 |
bar | Bar, introduced in version 0.19 |
uTorr | Microtorr; alternative to the unit µTorr |
µTorr | Microtorr; alternative to the unit uTorr |
mTorr | Millitorr |
Torr | Torr; 1 Torr = 133.32 Pa |
psi | Pound-force per square inch; 1 psi = 6.895 kPa |
ksi | Kilopound-force per square inch |
Mpsi | Megapound-force per square inch, introduced in version 0.19 |
Temperature:
Unit | Description |
---|---|
uK | Microkelvin; alternative to the unit µK |
µK | Microkelvin; alternative to the unit uK |
mK | Millikelvin |
K | Kelvin |
Time:
Unit | Description |
---|---|
s | Second |
min | Minute |
h | Hour |
Hz (1/s) | Hertz, introduced in version 0.19 |
kHz | Kilohertz, introduced in version 0.19 |
MHz | Megahertz, introduced in version 0.19 |
GHz | Gigahertz, introduced in version 0.19 |
THz | Terahertz, introduced in version 0.19 |
Torque:
Unit | Description |
---|---|
Nm | Newton metre |
Volume:
Unit | Description |
---|---|
ml | Milliliter, introduced in version 0.19 |
l | Liter |
cft | Cubicfoot, introduced in version 0.19 |
Special imperial units:
Unit | Description |
---|---|
mph | Miles per hour, introduced in version 0.19 |
sqft | Square foot, introduced in version 0.19 |
The following commonly used units are not yet supported:
Unit | Description | Alternative |
---|---|---|
°C | Celsius | [°C] + 273.15 K |
°F | Fahrenheit; | ([°F] + 459.67) × 5/9 |
u | Atomic mass unit; alternative to the unit 'Da' | 1.66053906660e-27 kg |
Da | Dalton; alternative to the unit 'u' | 1.66053906660e-27 kg |
sr | Steradian | not directly |
lm | Lumen | not directly |
lx | Lux | not directly |
Referenzen auf CAD-Daten
Größenangaben von anderen Elementen der Konstruktion können in Rechenausdrücken verwendet werden. Die Syntax für eine Referenz auf ein Eigenschaftenfeld sieht wie folgt aus: Objekt.Eigenschaft. Wenn sich die Eigenschaft aus einer Reihe von Feldern zusammensetzt, kann wie folgt darauf zugegriffen werden: Object.Eigenschaft.Feldname.
Die folgende Tabelle zeigt einige Beispiele:
CAD-Daten | Aufruf im Rechenausdruck | Ergebnis |
---|---|---|
Parametrische Länge eines Quaders vom Arbeitsbereich Part | Cube.Length | Länge mit der Einheit mm |
Volumen des Quaders | Cube.Shape.Volume | Volumen in mm³ Ausgabe ohne Einheiten |
Typ des Quader-Shapess (geometrische Figur) | Cube.Shape.ShapeType | String: Solid |
Label des Quader-Objekts | Cube.Label | String: Cube |
x-Koordinate des Schwerpunktes des Quaders | Cube.Shape.CenterOfMass.x | x-Koordinate in mm ohne Einheiten |
Wert einer Beschränkung in einer Skizze | Constraints.Breite | Numerischer Wert der benannten Beschränkung 'Breite' in der Skizze |
Wert eines Alias einer Kalkulationstabelle | Spreadsheet.Tiefe | Wert des Alias "Tiefe" in der Kalkulationstabelle "Spreadsheet" |
Wert einer lokalen Eigenschaft des Objekts | Length | Wert der Eigenschaft Length von z. B. einem Pad-Objekt, wenn es in dem Ausdruck z. B. in der Eigenschaft Length2 im gleichen Objekt benutzt wird. |
Dokumentweit gültige globale Variablen
Es gibt aktuell keine Infrastruktur für globale Variablen in FreeCAD. Stattdessen können beliebige Variablen als Zellwerte innerhalb einer Tabelle des Arbeitsbereiches Tabellenkalkulation (Spreadsheet) definiert werden und ihnen ein Name mittels der Alias-Eigenschaft für Zellen zugeordnet werden(Rechtsklick auf die Zelle). Danach können die Zellwerte in allen Rechenausdrücken verwendet werden, sie wie andere Eigenschaften von Objekten auch.
Dokumentübergreifende Verlinkung
Es ist möglich, eine Tabelle in einem Dokument aus einem anderen Dokument zu referenzieren.
Wichtiger Hinweis: Der Name des Dokuments muss angegeben werden, um es von einem anderen Dokument aus referenzieren zu können. Wenn ein Dokument nun zum ersten Mal gespeichert wird, muss dem Dokument ein Name gegeben werden, der normalerweise nicht "Unbenannt1" (oder eine anderssprachige Version) ist, und dann sind die Links beim erneuten Öffnen verloren. Deshalb ist es empfehlenswert zuerst das Stammdokument mit der Tabelle zu erstellen, zu speichern und zu schließen. Nach dem erneuten Öffnen wird der interne Name auf den Dateinamen gesetzt. Danach kann das Dokument geändert und gespeichert werden, aber es darf nicht umbenannt werden.
Danach können weitere Dokumente erstellt werden in denen entsprechende Rechenausdrücke eingesetzt werden. Angenommen, dass das Stammdokument "Stammdaten" genannt wurde, können Referenzen auf das Stammdokument wie folgt eingesetzt werden: Stammdaten#Spreadsheet.Length
master#modelConstants.Length
Note: that the master document must be loaded for the values in the master to be available to the dependent document.
Unglücklicherweise ist der eingebaute Formelprüfer mehr verwirrend als hilfreich, weil er immer wieder Interpretationsfehler meldet, dass dieses oder jenes nicht existiert. Daher einfach mit dem Eintippen fortfahren. Wenn man fertig ist und der Inhalt stimmt, dann wird plötzlich OK gemeldet.
Bei der Verwendung verknüpfter Dokumente ist der Benutzer dafür verantwortlich, dass alle Dokumente auch geöffnet sind, wenn irgendwelche Änderungen vorzunehmen sind.
Bekannte Probleme / Verbliebene Aufgaben
- Der Abhängigkeitsgraph basiert auf der Beziehung zwischen Objekten des Dokuments und nicht auf Beziehungen zwischen Eigenschaften. Das bedeutet, dass man nicht Daten einem Objekt zur Verfügung stellen kann und gleichzeitig Daten von diesem Objekt abfragt, selbst wenn keine zyklische Verknüpfung auf Basis der Eigenschaften besteht. Zur Umgehung des Problems können mehrere Tabellen angelegt werden: Eine Tabelle, die die Objektdaten zur Verfügung stellt und eine andere zur Datenauswertung.
- Es gibt keinen Manager für Rechenausdrücke, mit dem alle vorhandenen Rechenausdrücke aufgelistet werden können oder sonst wie erstellt, gelöscht oder gesucht werden können.
- Offene Fehler/Tickets für die Rechenausdrücke (Expressions) können hier nachgeschlagen werden: FreeCAD Bugtracker Expressions category
- Erste Schritte
- Installation: Herunterladen, Windows, Linux, Mac, Zusätzliche Komponenten, Docker, AppImage, Ubuntu Snap
- Grundlagen: Über FreeCAD, Graphische Oberfläche, Mausbedienung, Auswahlmethoden, Objektname, Voreinstellungseditor, Arbeitsbereiche, Dokumentstruktur, Objekteigenschaften, FreeCAD unterstützen, Spenden
- Hilfe: Anleitungen, Videoanleitungen
- Arbeitsbereiche: Std Base, Arch, Assembly, BIM, CAM, Draft, FEM, Inspection, Material, Mesh, OpenSCAD, Part, PartDesign, Points, Reverse Engineering, Robot, Sketcher, Spreadsheet, Surface, TechDraw, Test Framework