Es ist möglich, Eigenschaften unter Verwendung von mathematischen Ausdrücken festzulegen. In der GUI zeigen Drehfelder oder Eingabefelder, die an Eigenschaften gebunden sind, ein blaues Symbol , wenn aktiviert. Klicken auf das Symbol oder Eingeben des Gleichheitszeichens = öffnet den Ausdruckseditor für diese bestimmte Eigenschaft. Zeigt das Eingabefeld eine Schaltfläche ... anstatt eines Symbols, kann der Ausdruckseditor mit einem Rechtsklick auf die Eigenschaft und Auswählen von Expression... im Kontextmenü geöffnet werden.
Ein FreeCAD-Ausdruck ist ein mathematischer Ausdruck, der die mathematischen Standard- Operatoren, Funktionen und vorgegebene Konstanten verwendet, wie unten beschrieben. Zusätzlich können Ausdrücke auf Objekteigenschaften referenzieren und auch Bedingte Ausdrücke verwenden. Zahlen in Ausdrücken können optionale Einheiten angefügt werden.
Zahlen können entweder ein Komma ,
oder einen Dezimalpunkt .
zur Trennung von Ganzzahlen und Nachkommastellen verwenden. Wenn ein Dezimaltrennzeichen benutzt wird, muss danach mindestens eine Ziffer folgen.
Daher sind die Ausdrücke 1.+2.
und 1,+2,
ungültig, aber 1.0 + 2.0
und 1,0 + 2,0
sind gültig.
Operatoren und Funktionen beachten die Einheiten und erfordern gültige Kombinationen von Einheiten, falls verfügbar. Zum Beispiel ist 2mm + 4mm
ein gültiger Ausdruck, während 2mm + 4
kein gültiger Ausdruck ist.
Dies gilt auch für Referenzen auf Objekteigenschaften, die Einheiten beinhalten, wie z.B. Längeneigenschaften. Daher ist Pad001.Length + 1
ungültig, da es einer Eigenschaft mit Längeneinheit nur eine Zahl ohne Einheit hinzufügt; gültig wäre Pad001.Length + 1mm
.
Einige Fehler im Zusammenhang mit Einheiten können unverständlich erscheinen, wenn Ausdrücke abgelehnt werden oder die Ergebnisse nicht den Einheiten der bearbeiteten Eigenschaft entsprechen. Ein paar Beispiele:
1/2mm
wird nicht als halber Millimeter angesehen sondern als 1/(2mm)
und ergibt: 0.5 mm^-1
.
sqrt(2)mm
ist ungültig, da der Funktionsaufruf keine Zahl ist. Dies muss so eingegeben werden: sqrt(2) * 1mm
.
Mehrere Argumente zu einer Funktion können entweder durch ein Semikolon ;
oder ein Komma gefolgt von einem Leerzeichen ,
getrennt werden. Im letzteren Fall wird das Komma nach der Eingabe in ein Semikolon umgewandelt. Wenn ein Semikolon verwendet wird, ist kein Leerzeichen am Ende des Semikolons erforderlich.
Die Argumente können Verweise auf Zellen in einer Kalkulationstabelle enthalten. Ein Zellverweis besteht aus dem großen Zeilenbuchstaben der Zelle, gefolgt von ihrer Spaltennummer, zum Beispiel A1
. Eine Zelle kann auch durch den Alias der Zelle referenziert werden, zum Beispiel Tabellenblatt.MeineTeilbreite
.
Wie oben schon gezeigt, kann ein Objekt über seinen Daten-EigenschaftNamen referenziert werden. Es kann aber auch seine Daten-EigenschaftBenennung (Label) verwendet werden. Im Falle einer Daten-EigenschaftBenennung muss sie in doppelten <<
und >>
Symbolen eingeschlossen sein, wie z.B. <<Benennung>>
.
Jede Eigenschaft eines Objekts kann referenziert werden. Um sich beispielsweise auf die Höhe eines Zylinders zu beziehen, kann Zylinder.Height
oder <<Benennung_des_Zylinders>>.Height
verwendet werden.
Für weitere Informationen über das Referenzieren von Objekten siehe Auf CAD-Daten referenzieren.
Die folgenden Konstanten werden unterstützt:
Konstante | Beschreibung |
---|---|
e | Eulersche Zahl |
pi | Kreiszahl |
Die folgenden Operatoren werden untertstützt:
Operator | Beschreibung |
---|---|
+ | Addition |
- | Subtraktion |
* | Multiplikation |
/ | Fließkomma Division |
% | Division mit Rest |
^ | Potenz |
Die folgenden mathematischen Funktionen werden untertstützt:
Trigonometrische Funktionen verwenden Grad als Standardeinheit. Für die Angabe im Bogenmaß wird rad
nach dem ersten Wert in einem Ausdruck hinzugefügt. So ist z.B. cos(45)
das gleiche, wie cos(pi rad / 4)
. Ausdrücke in Grad können entweder deg
oder °
verwenden, z.B. 360deg - atan2(3; 4)
oder 360° - atan2(3; 4)
. Ein Ausdruck, der ohne Einheiten angegeben ist und aus Kompatibilitätsgründen in Grad oder Bogenmaß umgewandelt werden muss, wird entsprechend mit 1deg
, 1°
oder 1rad
multipliziert, z.B. (360 - X) * 1deg
; (360 - X) * 1°
; (0.5 + pi / 2) * 1rad
.
Funktion | Beschreibung | Eingabebereich |
---|---|---|
acos(x)
|
arccos | -1 <= x <= 1 |
asin(x)
|
arcsin | -1 <= x <= 1 |
atan(x)
|
arctan, Bereich des Rückgabewertes: -90° < Wert < 90° | alle |
atan2(y; x)
|
arctan2 von y/x unter Berücksichtigung des Quadranten, Bereich des Rückgabewertes: -180° < Wert <= 180° | alle, die ungültige Eingabe x = y = 0 gibt 0 zurück |
cos(x)
|
cos | alle |
cosh(x)
|
cosh | alle |
sin(x)
|
sin | alle |
sinh(x)
|
sinh | alle |
tan(x)
|
tan | alle, außer x = n*90 mit n = odd integer (ungerade Ganzzahl) |
tanh(x)
|
tanh | alle |
hypot(x; y)
|
Pythagoreische Addition (Hypotenuse), z.B. hypot(4; 3) = 5. | x und y >= 0 |
cath(x; y)
|
Die gegebene Hypotenuse und eine Seite ergibt die andere Seite eines Dreiecks (Kathete), z.B. cath(5; 3) = 4. | x >= y >= 0 |
Funktion | Beschreibung | Eingabebereich |
---|---|---|
exp(x) | Exponentialfunktion | alle |
log(x) | Natürlicher Logarithmus | x > 0 |
log10(x) | Dekadischer Logarithmus | x > 0 |
pow(x, y) | Potenz (Mathematik) | alle |
sqrt(x) | Quadratwurzel | x >= 0 |
cbrt(x) eingeführt mit Version 0.21 | Kubikwurzel | x >= 0 |
Funktion | Beschreibung | Eingabebereich |
---|---|---|
abs(x)
|
Betragsfunktion | alle |
ceil(x)
|
Aufrundungsfunktion, kleinster ganzzahliger Wert größer oder gleich x | alle |
floor(x)
|
Abrundungsfunktion, größter ganzzahliger Wert kleiner oder gleich x | alle |
mod(x, y)
|
Division mit Rest nach einer Division x durch y, das Vorzeichen des Ergebnisses ist das des Dividenden. | alle, außer y = 0 |
round(x)
|
Rundung auf die nächste Ganzzahl | alle |
trunc(x)
|
Trunkierung auf die nächste Ganzzahl in Richtung Null (Nachkommastellen entfernen). | alle |
Aggregatfunktion verwenden ein oder mehrere Argumente.
Einzelne Argumente für Aggregatfunktionen können aus Zellbereichen bestehen. Ein Zellbereich wird durch zwei Zellbezüge ausgedrückt, die durch einen Doppelpunkt :
getrennt sind, zum Beispiel Durchschnitt(B1:B8)
oder Summe(A1:A4; B1:B4)
.
Die Zellbezüge können auch Zell Aliase verwenden, zum Beispiel Durchschnitt(StartTemp:EndTemp)
.
Diese Aggregatfunktionen werden unterstützt:
Funktion | Beschreibung | Eingabebereich |
---|---|---|
average(a; b; c; ...)
|
Arithmetisches Mittel der Werte der Argumente, dasselbe, wie sum(a; b; c; ...) / count(a; b; c; ...) | alle |
count(a; b; c; ...)
|
Zählen der Argumente, üblicherweise für Zellbereiche genutzt | alle |
max(a; b; c; ...)
|
Extremwert (Maximum)-Werte der Argumente | alle |
min(a; b; c; ...)
|
Minimum (Minimum)-Werten der Argumente | alle |
stddev(a; b; c; ...)
|
Varianz (Stochastik) der Werte der Argumente | alle |
sum(a; b; c; ...)
|
Summe der Werte der Argumente, üblicherweise für Zellbereiche genutzt | alle |
Zeichenketten werden in Ausdrücken erkannt, indem sie in doppelte öffnende/schließende Winkel eingeschlossen werden (so wie Beschriftungen).
Im folgenden Beispiel wird "TEXT" als eine Zeichenkette erkannt: <<TEXT>>
Zeichenketten können durch das '+'-Zeichen aneinandergehängt werden.
Das folgende Beispiel <<MY>>+<<TEXT>>
wird verbunden zu "MYTEXT".
Numerische Werte können mit der Funktion str
in Zeichenketten gewandelt werden:
str(Box.Length.Value)
Zeichenkettenformatierung wird unterstützt durch die (alte) %-Form von Python.
Alle %-Spezifizierer wie in der (engl.) Python documentation definiert.
Hat man bspw. einen mit den Vorgabewerten erstellten Würfel namens 'Box' (FreeCAD-Standardbezeichnung) mit 10mm-Kantenlänge, wird der folgende Ausdruck <<Würfellänge: %s>> % Box.Length
erweitert zu "Würfellänge: 10.0 mm"
Für mehr als einen %-Spezifizierer verwendet man folgende Syntax: <<Würfellänge ist %s und Würfelbreite ist %s>> % tuple(Box.Length; Box.Width)
. Oder man verwendet die Verkettung: <<Würfellänge ist %s>> % Box.Length + << und Länge ist %s>> % Box.Width
. Beide ergeben zusammen "Würfellänge ist 10.0 mm und Breite ist 10.0 mm".
Eine FreeCAD-Beispieldatei, die Zeichenkettenformatierung zeigt, ist unter im Forum verfügbar (engl.)
Die folgenden Objekte können in Ausdrücken durch die folgenden Funktionen erstellt werden:
Art | Funktion | Beschreibung |
---|---|---|
Tuple
|
tuple(a; b; ...)
|
Beispiel: tuple(2; 1; 2)
|
List
|
list(a; b; ...)
|
Beispiel: list(2; 1; 2)
|
Vector
|
vector(x; y; z)
|
Erstellt einen Vektor unter Verwendung dreier einheitenloser Werte oder dreier Werte mit einer Längeneinheit (Length unit values).
Beispiel: |
create(<<vector>>; x; y; z)
| ||
Matrix
|
matrix( a11; a12; a13; a14; a21; a22; a23; a24; a31; a32; a33; a34; a41; a42; a43; a44 ) |
Erstellt eine 4x4 Matrix in row-major order:
Es kann auch genau ein Argument übergeben werden, wie z.B. Beispiel: |
create(<<matrix>>; a11; a12; ...; a44)
| ||
Rotation
|
rotation(axis; angle)
|
Erstellt eine Rotation durch Angabe von axis (Vector ) und angle (Angle mit oder ohne Einheiten), oder durch drei Euler-Winkel α , β , γ .
Beispiele:
|
rotation(α; β; γ)
| ||
create(<<rotation>>; axis; angle)
| ||
create(<<rotation>>; α; β; γ)
| ||
Placement
|
placement(base; rotation)
|
Erstellt ein Placement mit verschiedenen Parametern, einschließlich:
Beispiele:
|
placement(base; rotation; center)
| ||
placement(base; axis; angle)
| ||
placement(matrix)
| ||
create(<<placement>>; ...)
|
Funktionen: eingeführt mit Version 1.0.
Function / Operator | Description |
---|---|
v1 + v2
|
Addiert zwei Vektoren. |
v1 - v2
|
Subtrahiert zwei Vektoren. |
v * s
|
Skaliert einen Vektor gleichförmig mit Faktor s .
|
vangle(v1; v2)
|
Winkel zwischen zwei Vektoren in Grad. |
vcross(v1; v2)
|
Kreuzprodukt zweier Vektoren . |
v1 * v2
|
Skalarprodukt zweier Vektoren . |
vdot(v1; v2)
| |
vlinedist(v1; v2; v3)
|
Abstand zwischen Vektor v1 und einer Linie durch v2 in Richtung v3 .
|
vlinesegdist(v1; v2; v3)
|
Abstand zwischen Vektor v1 und dem dichtesten Punkt auf einem Linienabschnitt (Strecke) von v2 nach v3 .
|
vlineproj(v1; v2; v3)
|
Projiziert Vektor v1 auf eine Linie durch v2 in Richtung v3 .
|
vnormalize(v)
|
Normalisiert einen Vektor zu einem Einheitsvektor. |
vplanedist(v1)
|
Abstand zwischen Vektor v1 und einer Ebene, die durch einen Punkt v2 und eine Normale v3 festgelegt wird.
|
vplaneproj(v1)
|
Projiziert Vektor v1 auf eine Ebene, die durch einen Punkt v2 und eine Normale v3 festgelegt wird.
|
vscale(v; sx; sy; sz)
|
Skaliert einen Vektor ungleichförmig mit den Faktoren sx in X-Richtung, sy in Y-Richtung und sz in Z-Richtung.
|
vscalex(v; sx)
| |
vscaley(v; sy)
| |
vscalez(v; sz)
|
Rotation
Und Placement
können beide durch eine Matrix
dargestellt werden. Die folgenden Funktionen akzeptieren alle eine Matrix
, eine Rotation
oder ein Placement
als ihren ersten Parameter, in der folgenden Tabelle mit m
gekennzeichnet. Die Art der zurückgegebenen Objekte ist dieselbe, wie die des Objekts, das mit dem ersten Argument übergeben wurde, außer wenn mtranslate
auf eine Rotation
angewandt wird; in dem Falle wird ein Placement
zurückgegeben.
Funktion | Beschreibung |
---|---|
minvert(m)
|
Berechnet die Inverse Matrix. |
mrotate(m; rotation)
|
Rotieren durch:
|
mrotate(m; axis; angle)
| |
mrotate(m; α; β; γ)
| |
mrotatex(m; angle)
|
Rotieren um die X-Achse. |
mrotatey(m; angle)
|
Rotieren um die Y-Achse. |
mrotatez(m; angle)
|
Rotieren um die Z-Achse. |
mtranslate(m; vector)
|
Verschieben durch einen vector (Vector ) oder X-, Y-, Z-Werte. wenn eine Rotation verschoben wird, ist das zurückgegebene Objekt ein Placement .
|
mtranslate(m; x; y; z)
| |
mscale(m; vector)
|
Skalieren durch einen vector (Vector ) oder X-, Y-, Z-Werte.
|
mscale(m; x; y; z)
|
Bedingte Ausdrücke haben die Form Bedingung ? ResultatWahr : ResultatFalsch
.
Die Bedingung ist definiert als ein Ausdruck, der entweder zu 0
(falsch/false) oder Nicht-Null (wahr/true) ausgewertet wird.
Man beachte, dass, um eine boolesche Eigenschaft für diese Bedingung einzusetzen, folgende Syntax verwendet werden muss: VarSet.MyBool == 1 ? 10 mm : 15 mm
.
Die folgenden Vergleichsoperatoren sind definiert:
Einheit | Beschreibung |
---|---|
== | gleich |
!= | ungleich |
> | größer als |
< | kleiner als |
>= | größer oder gleich |
<= | kleiner oder gleich |
Einheiten können direkt in Ausdrücken verwendet werden. Der Analysator (parser) verbindet sie mit dem vorherigen Wert. So ist 2mm
oder 2 mm
gültig, während mm
ungültig ist, weil es keinen vorhergehenden Wert gibt.
Alle Werte müssen eine Einheit haben. Daher müssen Werte auch in Kalkulationstabellen im allgemeinen eine Einheit haben.
In einigen Fällen funktioniert es auch ohne Einheit, z.B. wenn Sie in Zelle B1 der Kalkulationstabelle z.B. nur die Zahl 1.5
haben und sich für eine Blockhöhe darauf beziehen. Dies funktioniert nur, weil die Blockhöhe die Einheit mm
vordefiniert und die verwendet wird, wenn keine Einheit angegeben ist. Es schlägt jedoch fehl, wenn Sie für die Blockhöhe z.B. Sketch1.Constraints.Breite - Kalkulationstabelle.B1
verwenden, weil Sketch1.Constraints.Breite
eine Einheit hat und Kalkulationstabelle.B1
keine Einheit.
Einheiten mit Exponenten können direkt eingegeben werden. So wird z.B. mm^3
als mm³ erkannt und m^3
wird als m³ erkannt.
Wenn eine Variable mit dem Namen einer Einheit verwendet wird, muss die Variable in << >>
gesetzt werden. Das verhindert, dass die Variable als Einheit erkannt wird. Das Maß Sketch.Constraints.A
würde z.B. als Einheit Ampere erkannt werden. Daher muss der Ausdruck als Sketch.Constraints.<<A>>
geschrieben werden.
Die folgenden Einheiten werden vom Analysator für Ausdrücke erkannt:
Einheit | Beschreibung |
---|---|
mmol | Millimol |
mol | Mol |
Einheit | Beschreibung |
---|---|
° | Grad (Winkel); Alternative zur Einheit deg |
deg | Degree; Alternative zur Einheit ° |
rad | Radian |
gon | Gradian |
M | Winkelminute; Alternative zur Einheit ′ |
′ | Winkelminute; Dies ist das Symbol Prime (U+2032); Alternative zur Einheit M |
S | Winkelsekunde; FUNKTIONIERT NICHT (S wird für die Einheit Siemens verwendet); Alternative zur Einheit " |
″ | Winkelsekunde; Dies ist das Symbol Doppelprime (U+2033); Alternative zur Einheit S |
Einheit | Beschreibung |
---|---|
mA | Milliampere |
A | Ampere |
kA | Kiloampere |
MA | Megaampere |
Einheit | Beschreibung |
---|---|
pF | Picofarad |
nF | Nanofarad |
uF | Mikrofarad; Alternative zur Einheit µF |
µF | Mikrofarad; Alternative zur Einheit uF |
mF | Millifarad |
F | Farad; 1 F = 1 s^4·A^2/m^2/kg |
Einheit | Beschreibung |
---|---|
C | Coulomb; 1 C = 1 A*s |
Einheit | Beschreibung |
---|---|
uS | Mikrosiemens; alternative to the unit µS |
µS | Mikrosiemens; alternative to the unit uS |
mS | Millisiemens |
S | Siemens; 1 S = 1 s^3·A^2/kg/m^2 |
kS | KiloSiemens |
MS | MegaSiemens |
Einheit | Beschreibung |
---|---|
nH | Nanohenry (Einheit) |
uH | Mikrohenry (Einheit); Alternative zur Einheit µH |
µH | Mikrohenry (Einheit); Alternative zur Einheit uH |
mH | Millihenry (Einheit) |
H | Henry (Einheit); 1 H = 1 kg·m^2/s^2/A^2 |
Elektrisches Spannung:
Einheit | Beschreibung |
---|---|
mV | Millivolt |
V | Volt |
kV | Kilovolt |
Elektrischer Widerstand:
Einheit | Beschreibung |
---|---|
Ohm | Ohm; 1 Ohm = 1 kg·m^2/s^3/A^2 |
kOhm | Kiloohm |
MOhm | Megaohm |
Einheit | Beschreibung |
---|---|
mJ | Millijoule |
J | Joule |
kJ | Kilojoule |
eV | elektron(en)volt; 1 eV = 1.602176634e-19 J |
keV | Kiloelektron(en)volt |
MeV | Megaelektron(en)volt |
kWh | Kilowattstunde; 1 kWh = 3.6e6 J |
Ws | Wattsekunde; Alternative zur Einheit Joule |
VAs | Voltamperesekunde; Alternative zur Einheit Joule |
CV | Coulombvolt; Alternative zur Einheit Joule |
cal | Kalorie; 1 cal = 4.184 J |
kcal | Kilokalorie |
Einheit | Beschreibung |
---|---|
mN | Millinewton |
N | Newton |
kN | Kilonewton |
MN | Meganewton |
lbf | Pound-force |
Einheit | Beschreibung |
---|---|
nm | Nanometer |
um | Mikrometer; Alternative zur Einheit µm |
µm | Mikrometer; Alternative zur Einheit um |
mm | Millimeter |
cm | Zentimeter |
dm | Dezimeter |
m | Meter |
km | Kilometer |
mil | Thou (Abk. f. Thousandth of an inch); Alternative zur Einheit thou |
thou | Thou (Abk. f. Thousandth of an inch); Alternative zur Einheit mil |
in | Zoll (Einheit), in = inch, Alternative zur Einheit " |
" | Inch; Alternative zur Einheit in |
ft | Fuß (Einheit); Alternative zur Einheit ' |
' | Fuß (Einheit); Alternative zur Einheit ft |
yd | Yard |
mi | Meile |
Einheit | Beschreibung |
---|---|
cd | Candela |
Einheit | Beschreibung |
---|---|
Wb | Weber (Einheit); 1 Wb = 1 kg*m^2/s^2/A ' |
Einheit | Beschreibung |
---|---|
G | Gauß (Einheit); 1 G = 1 e-4 T |
T | Tesla (Einheit); 1 T = 1 kg/s^2/A |
Einheit | Beschreibung |
---|---|
ug | Mikrogramm; Alternative zur Einheit µg |
µg | Mikrogramm; Alternative zur Einheit ug |
mg | Milligramm |
g | Gramm |
kg | Kilogramm |
t | Tonne (Einheit) |
oz | Unze |
lb | Pfund; Alternative zur Einheit lbm |
lbm | Pfund; Alternative zur Einheit lb |
st | Stone (Einheit) |
cwt | Hundredweight |
Einheit | Beschreibung |
---|---|
W | Watt |
kW | Kilowatt |
Einheit | Beschreibung |
---|---|
Pa | Pascal (Einheit) |
kPa | Kilo-Pascal (Einheit) |
MPa | Mega-Pascal (Einheit) |
GPa | Giga-Pascal (Einheit) |
uTorr | Mikro-Torr; Alternative zu Einheit µTorr |
µTorr | Mikro-Torr; Alternative zu Einheit uTorr |
mTorr | Milli-Torr |
Torr | Torr; 1 Torr = 133.32 Pa |
psi | Pound-force per square inch; 1 psi = 6.895 kPa |
ksi | Kilo-Pound-force per square inch |
Einheit | Beschreibung |
---|---|
uK | Mikrokelvin; Alternative zur Einheit µK |
µK | Mikrokelvin; Alternative zur Einheit uK |
mK | Millikelvin |
K | Kelvin |
Einheit | Beschreibung |
---|---|
s | Secunde |
min | Minute |
h | Stunde |
Hz (1/s) | Hertz |
kHz | Kilohertz, |
MHz | Megahertz |
GHz | Gigahertz |
THz | Terahertz |
Einheit | Beschreibung |
---|---|
ml | Milliliter |
l | Liter |
cft | Kubikfuß |
Einheit | Beschreibung |
---|---|
mph | Meilen pro Stunde |
sqft | Quadratfuß |
Die folgenden häufig verwendeten Einheiten werden noch nicht unterstützt, für einige gibt es aber Alternativen:
Einheit | Beschreibung | Alternative |
---|---|---|
°C | Grad Celsius | [°C] + 273.15 K |
°F | Grad Fahrenheit; | ([°F] + 459.67) × 5/9 |
u | Atomare Masseneinheit; Alternative zur Einheit Da (Dalton) = | 1.66053906660e-27 kg |
Da | Dalton; Alternative zur Einheit u | 1.66053906660e-27 kg |
sr | Steradiant | nicht direkt |
lm | Lumen (Einheit) | nicht direkt |
lx | Lux (Einheit) | nicht direkt |
px | Pixel | nicht direkt |
Das Ausdrucks-Feature ist sehr leistungsfähig. Um das zu ermöglichen gibt es ein paar Einschränkungen bei ein paar Zeichen. Als Abhilfe gibt es in FreeCAD die Möglichkeit anstatt der Objektnamen sog. Bezeichner ('labels') zu verwenden und sich auf diese zu beziehen.
In Fällen, in denen du keine Beschriftung verwenden kannst, wie z. B. der Name einer Skizzenbeschränkung, musst du dir bewusst sein, welche Zeichen nicht erlaubt sind.
Für Bezeichner gibt es keine ungültigen Zeichen, jedoch müssen einige Zeichen maskiert werden:
Zeichen | Beschreibung |
---|---|
' , \ , "
|
Müssen durch das Voranstellen von \ maskiert werden.
|
Zum Beispiel muss der Bezeichner Skizze\002
als <<Skizze\002>>
referenziert werden.
Namen von Objekten wie Maße, Skizzen, usw. dürfen folgende Zeichen oder Zeichenfolgen nicht enthalten. Anderenfalls ist der Namen ungültig.
Zeichen / Zeichenfolgen | Beschreibung |
---|---|
+, -, *, /, ^, _, <, >, (, ), {, }, [, ], ., ,, = | Zeichen die mathematische Operatoren oder mathematische Konstruktionen sind. |
A, kA, mA, MA, J, K, ' , ft , °, und viele andere! | Zeichen und Zeichenfolgen, die Einheiten sind (siehe Abschnitt Einheiten ). |
#, !, ?, §, $, %, &, :, ;, \, |, ~, ∆, ¿, und viele andere! | Zeichen, die als Platzhalter verwendet werden oder die Funktionen auslösen. |
pi, e | Mathematische Konstanten |
´, `, ' , " | Akzente |
Leerzeichen (Space) | Ein Leerzeichen definiert das Ende eines Namens und kann daher nicht verwendet werden. |
Beispielsweise ist folgender Name gültig: <<Sketch>>.Constraints.T2üßµ@
.
Hingegen sind diese ungültige Namen: <<Sketch>>.Constraints.test\result_2
(\r bedeutet "Wagenrücklauf (carriage return)") oder<<Sketch>>.Constraints.mol (mol ist eine Einheit).
Da kürzere Namen (vor allem, wenn sie nur ein oder zwei Zeichen haben) leicht zu ungültigen Namen führen können, sollte die Verwendung längerer Namen in Betracht gezogen und/oder eine geeignete Namenskonvention festgelegt werden.
Siehe Spreadsheet Alias-Namen festlegen.
Es ist möglich, Daten aus dem Modell selbst in einem Ausdruck zu verwenden. Um auf eine Eigenschaft zu verweisen, wird Objekt-Name.property
oder <<Objekt-Benennung>>.property
. Benennungen (Label) müssen in <<
und >>
eingeschlossen werden. Sollen Benennungen verwendet werden, müssen sie eindeutig sein.
Alle weiteren Beispiele referenzieren ein Objekt über seinen Namen, aber seine Benennung kann ebenfalls verwendet werden.
Wenn die Eigenschaft aus mehreren Feldern aufgebaut ist, kann auf die einzelnen Felder mit object_name.property.field
zugegriffen werden.
Um auf Listenobjekte zu verweisen, wird ObjektName.list[list_index]
verwendet.
Soll beispielsweise auf eine Randbedingung in einer Skizze verwiesen werden, wird Skizze.Constraints[16]
verwendet. Ist eine Skizze im Bearbeitungsmodus geöffnetbefindest, kann man den Namen weglassen und einfach Constraints[16]
verwenden. Man beachte, dass der Index mit 0 beginnt, daher muss die 17. Randbedingung als Constraints[16]
referenziert werden.
Um auf das Objekt selbst zu referenziertem wird die Pseudo-Eigenschaft _self
verwendet: Objekt-Name._self
.
Die folgende Tabelle zeigt einige weitere Beispiele:
CAD-Daten | Aufruf im Ausdruck | Ergebnis |
---|---|---|
Länge eines Part Würfels | Box.Length
|
Länge mit Einheit (mm) |
Volumen des Würfels | Box.Shape.Volume
|
Volumen in mm³ ohne Einheit |
Formart des Würfels | Box.Shape.ShapeType
|
Zeichenkette (String): Solid |
Bezeichnung des Würfels | Box.Label
|
Zeichenkette (String): Label |
X-Koordinate des Schwerpunktes des Würfels | Box.Shape.CenterOfMass.x
|
X-Koordinate in mm ohne Einheit |
X-Koordinate der Positionierung des Würfels | Box.Placement.Base.x
|
X-Koordinate mit Einheit (mm) |
X-Komponente der Rotationsachsen der Positionierung des Würfels | Box.Placement.Rotation.Axis.x
|
X-Komponente des Einheitsvektors in mm ohne Einheit |
Rotationswinkel der Positionierung des Würfels | Box.Placement.Rotation.Angle
|
Rotationswinkel mit Einheit (° = Grad = deg) |
Das ganze Würfel-Objekt | Box._self
|
Objekt der Art <Part::PartFeature> |
Wert einer Randbedingung in einer Skizze | Constraints.Width
|
Zahlenwert der benannten Randbedingung Width (Breite) in der Skizze, wenn der Ausdruck in der Skizze selbst verwendet wird.
|
Wert einer Randbedingung in einer Skizze | MySketch.Constraints.Width
|
Zahlenwert der benannten Randbedingung Width in der Skizze MySketch , wenn der Ausdruck außerhalb der Skizze verwendet wird.
|
Wert eines Alias einer Kalkulationstabelle | Spreadsheet.Depth
|
Wert des Alias Depth (Tiefe) in der Kalkulationstabelle Spreadsheet
|
Wert einer lokalen Eigenschaft eines Objekts | Length
|
Wert der Daten-EigenschaftLength (Länge) z.B. in einem Pad-Objekt, wenn der Ausdruck z.B. in Daten-EigenschaftLength2 im selben Objekt verwendet wird. |
FreeCAD prüft Abhängigkeiten aufgrund der Beziehungen zwischen Dokumentobjekten, nicht auf Basis ihrer Eigenschaften. Das heißt, dass man einem Objekt nicht Daten zur Verfügung stellen und (gleichzeitig) das Ergebnis desselben Objekts auslesen kann. Z.B. darf es, auch wenn es keine zyklischen Abhängigkeiten zwischen den Eigenschaften selbst gibt, kein Objekt geben, das seine Abmaße aus einer Tabelle erhält, und dessen (gemessenes) Volumen in derselben Tabelle ausgegeben wird. Es müssen zwei Tabellen verwendet werden, eine zum Steuern des Modells und eine für die Ausgabe (von ausgelesenen Ergebnissen).
Als Ungehunglösung kann man einen Zellenbereich der zweiten Tabelle in der ersten anzeigen (oder umgekehrt), indem eine Zellenverbindung mit der Option Hide dependency of binding erstellt wird.
Eine weitere Möglichkeit zyklische Abhängigkeiten zu umgehen, ist das Ausblenden der Referenz, indem die Funktion href
oder hiddenref
für individuelle Ausdrücke verwendet wird, z.B.: href(Box.Length)
.
Bitte beachten, dass beide erwähnten Umgehungslösungen mit Vorsicht eingesetzt werden sollten und dass sie nicht funktionieren, wenn die Eigenschaften, die ausgegeben werden, auf Abmaßen beruhen, die aus derselben Tabelle heraus gesteuert werden.
In FreeCAD gibt es zur Zeit kein Konzept für globale Variablen. Stattdessen können beliebige Variablen mit Hilfe der Arbeitsbereich Kalkulationstabelle als Zellen in einer Kalkulationstabelle definiert werden und dann mit Hilfe der Alias Eigenschaft für die Zelle (Rechtsklick auf die Zelle) einen Namen erhalten. Dann kann von jedem Ausdruck aus auf sie zugegriffen werden, wie auf jede andere Objekteigenschaft auch.
Es ist (mit Begrenzungen) möglich, eine Eigenschaft eines Objekts in deinem aktuellen Dokument (".FCstd" Datei) durch Verwendung eines Ausdrucks zu definieren, um auf eine Eigenschaft eines Objekts in einem anderen Dokument zu verweisen (".FCstd" file). Zum Beispiel kann eine Zelle in einer Kalkulationstabelle oder die Daten-EigenschaftLänge eines Formteil Würfels usw. in einem Dokument durch einen Ausdruck definiert werden, der auf den X Platzierungswert oder eine andere Eigenschaft eines Objekts in einem anderen Dokument verweist.
Der Name des Dokuments wird verwendet, um von einem anderen Dokument aus darauf zu referenzieren. Wenn ein Dokument zum ersten Mal gespeichert wird, muss dem Dokument ein Name gegeben werden. Dies ist normalerweise ein anderer Name als die Vorgabe "Unbenannt1". Um zu verhindern, dass Verknüpfungen beim Speichern des Hauptdokumentes verloren gehen, wenn dieses dabei einen anderen Namen bekommt, sollte das Hauptdokument zuerst mit einer Kalkulationstabelle erstellt werden. Danach kann der Inhalt des Dokuments geändert und das Dokument gespeichert werden, aber es darf nicht umbenannt werden.
Sobald das Mutterdokument mit der Kalkulationstabelle erstellt und gespeichert (benannt) ist, können abhängige Dokumente erstellt werden. Angenommen, du nennst das Mutterdokument master
, die Kalkulationstabelle modelConstants
und gibst einer Zelle einen Alias-Namen Length
, dann kannst du auf den Wert zugreifen als:
master#modelConstants.Length
Man beachte, dass das Hauptdokument geladen sein muss, damit die Werte des Hauptdokuments für das abhängige Dokument verfügbar sind.
Natürlich liegt es bei dir, die zugehörigen Dokumente später zu laden, wenn du etwas ändern willst.
import FreeCAD as App
doc = App.ActiveDocument
box = doc.addObject("Part::Box", "Box")
cyl = doc.addObject("Part::Cylinder", "Cylinder")
cyl_name = cyl.Name
box.setExpression("Height", f"{cyl_name}.Height / 2")
box.setExpression("Length", f"{cyl_name}.Radius * 2")
box.setExpression("Width", "Length")
doc.recompute()
# Expressions are stored in the ExpressionEngine property:
for prop, exp in box.ExpressionEngine:
val = getattr(box, prop)
print(f"Property: '{prop}' -- Expression: '{exp}' -- Current value: {val}")