Beispiele zur Formelsprache in Regeln
René Holzer
Product Owner
Bei der Regelerstellung kann es notwendig sein, Formeln zu verwenden. Das ist insbesondere dann interessant, wenn Wertebedingungen auf andere Merkmale verweisen oder (Teil-)Informationen von Merkmalen übernommen werden sollen.
Dieser Beitrag enthält Formelbeispiele als erste Hilfestellung bei der Regelerstellung. Wie Sie Regeln anlegen und welche Aktionen darin verfügbar sind, erfahren Sie in der Dokumentation zu Regelaktionen. Details zu Syntax und Funktionen finden Sie in der Formeldokumentation.
Grundlegende Definitionen
$elementist immer das Element, das von der Regel selektiert wurde, in der die Aktion ausgeführt wird.$propertyist immer das Merkmal, das von der Aktion verändert werden soll.- Das Ergebnis der IFC-Expression (Formel) wird im Merkmal gespeichert, das in der Aktion angegeben ist.
Gängige Formelbefehle
- Textadaptierung
- Werte übernehmen
- Mathematische Operationen mit Werten
- Mathematische Operationen mit anderen Merkmalen
- Conditional Values
- Konvertierung von Datentypen
- Umrechnung von Währungen
Textadaptierung
Wert ersetzen
Ersetzt in allen Werten „Abschnitt“ durch „Bauabschnitt“.
$property.value().replace("Abschnitt", "Bauabschnitt")Werteliste übersetzen
Übersetzt Merkmalswerte ohne Berücksichtigung der Groß- und Kleinschreibung. Alternativ kann eine Tabelle importiert werden.
map($property.value().toLowerCase(), [["wert1", "Neu1"], ["wert2", "Neu2"], ["wert3", "Neu3"]], "DEFAULTWERT")Präfix ergänzen
Ergänzt das Präfix „beginnt_mit“.
"beginnt_mit" + $property.value()Suffix ergänzen
Ergänzt das Suffix „_endet_mit“.
$property.value() + "_endet_mit"In Großbuchstaben umwandeln
$property.value().toUpperCase()In Kleinbuchstaben umwandeln
$property.value().toLowerCase()Wert aus mehreren Merkmalen zusammensetzen
Setzt einen Wert aus der IFC-Klasse und den folgenden Merkmalen zusammen; zwischen den Werten wird jeweils ein Unterstrich eingefügt:
ASF_MSet_Semantik_Topologie:Referenzachse[String]ASF_MSet_Semantik_Topologie:Abschnitt[String]ASF_MSet_Semantik_Topologie:Stationierung_Anfang[km](Wert wird dabei in Meter umgerechnet)
$element.ifcClass() + "_" + $element.propertySet("ASF_MSet_Semantik_Topologie").property("Referenzachse").value() + "_" + $element.propertySet("ASF_MSet_Semantik_Topologie").property("Abschnitt").value() + "_" + $element.propertySet("ASF_MSet_Semantik_Topologie").property("Stationierung_Anfang").value() * 1000Werte übernehmen
IFC-Klasse übernehmen
Übernimmt die IFC-Klasse des Elements in ein Textmerkmal. Das ist auch mit einer ExtractAction möglich.
$element.ifcClass()GUID übernehmen
Übernimmt die GUID des Elements in ein Textmerkmal. Das ist auch mit einer ExtractAction möglich.
$element.guid()Namen übernehmen
Übernimmt den Namen des Elements in ein Textmerkmal. Das ist auch mit einer ExtractAction möglich.
$element.name()Beschreibung übernehmen
Übernimmt die Beschreibung des Elements in ein Textmerkmal. Das ist auch mit einer ExtractAction möglich.
$element.description()PredefinedType und ObjectType übernehmen
PredefinedType und ObjectType können derzeit nur mit einer ExtractAction übernommen werden. IFC-Expressions unterstützen diese Werte noch nicht.
Merkmal aus einem beliebigen Property Set übernehmen
Übernimmt den Wert des Merkmals „Abschnitt“ unabhängig vom Property Set.
$element.property("Abschnitt").value()Merkmal aus einem bestimmten Property Set übernehmen
Übernimmt den Wert des Merkmals „Abschnitt“ aus ASF_MSet_Semantik_Topologie.
$element.propertySet("ASF_MSet_Semantik_Topologie").property("Abschnitt").value()Mathematische Operationen mit Werten
Multiplizieren
Multipliziert den Merkmalswert mit 0,4.
$property.value() * 0.4Dividieren
Dividiert den Merkmalswert durch 3.
$property.value() / 3Addieren
Addiert 120 zum Merkmalswert.
$property.value() + 120Subtrahieren
Subtrahiert 120 vom Merkmalswert.
$property.value() - 120Mathematische Operationen mit anderen Merkmalen
Mit einem anderen Merkmal multiplizieren
Multipliziert den Zahlenwert mit dem Wert des Merkmals „Breite“.
$property.value() * $element.property("Breite").value()Durch ein anderes Merkmal dividieren
Dividiert den Zahlenwert durch den Wert des Merkmals „Breite“.
$property.value() / $element.property("Breite").value()Ein anderes Merkmal addieren
Addiert den Wert des Merkmals „Breite“ zum Zahlenwert.
$property.value() + $element.property("Breite").value()Ein anderes Merkmal subtrahieren
Subtrahiert den Wert des Merkmals „Breite“ vom Zahlenwert.
$property.value() - $element.property("Breite").value()Conditional Values
In den folgenden Beispielen ist das Merkmal „Breite“ als Zielmerkmal in der Aktion definiert. Wenn die Bedingung nicht erfüllt ist, bleibt sein bisheriger Wert erhalten.
Wahrheitswert prüfen
Setzt „Breite“ im Property Set ASF_MSet_Masse_Mengen auf 37,0 cm, wenn „Bewehrt“ in ASF_MSet_Betonbau den Wahrheitswert TRUE hat.
if($element.propertySet("ASF_MSet_Betonbau").property("Bewehrt").value() == TRUE, 37.0, $property.value())Zahlenwert vergleichen
Setzt „Breite“ im Property Set ASF_MSet_Masse_Mengen auf 50,0 cm, wenn „Laenge“ im selben Property Set kleiner oder gleich 2 m ist.
if($element.propertySet("ASF_MSet_Masse_Mengen").property("Laenge").value() <= 2, 50.0, $property.value())Textinhalt prüfen
Setzt „Breite“ im Property Set ASF_MSet_Masse_Mengen auf 60,0 cm, wenn „Element“ in ASF_MSet_Semantik_Topologie den Text „Widerlager“ enthält.
if(contains($element.propertySet("ASF_MSet_Semantik_Topologie").property("Element").value(), "Widerlager"), 60.0, $property.value())Mehrere Bedingungen verknüpfen
Setzt „Breite“ im Property Set ASF_MSet_Masse_Mengen auf 45,0 cm, wenn „Element“ den Text „Widerlager“ und „Betonguete“ den Text „C25_30_B3“ enthält.
if(contains($element.propertySet("ASF_MSet_Semantik_Topologie").property("Element").value(), "Widerlager") && contains($element.propertySet("ASF_MSet_Betonbau").property("Betonguete").value(), "C25_30_B3"), 45.0, $property.value())Mehrere Textwerte zulassen
Setzt „Breite“ im Property Set ASF_MSet_Masse_Mengen auf 50,0 cm, wenn „Element“ einen der Texte „Wand“, „Flügelwand“ oder „Stützwand“ enthält.
if($element.propertySet("ASF_MSet_Semantik_Topologie").property("Element").value().regexContains("Wand|Flügelwand|Stützwand"), 50.0, $property.value())Konvertierung von Datentypen
Zahl in Text umwandeln
Übernimmt „Breite“ aus ASF_MSet_Masse_Mengen, wandelt den Wert in Text um und ergänzt das Suffix „ cm“.
$element.propertySet("ASF_MSet_Masse_Mengen").property("Breite").value().toString() + " cm"Text in eine Zahl umwandeln
Übernimmt „Breite“ aus ASF_MSet_Texte. Der Beispielwert „37 cm“ wird vom Textmerkmal in ein Zahlenmerkmal in Metern umgewandelt.
$element.propertySet("ASF_MSet_Texte").property("Breite").value().replace("cm", "").trim().toNumber() / 100Umrechnung von Währungen
Werte, die von externen und zeitlich veränderlichen Faktoren wie Börsenkursen beeinflusst werden, werden in bim-t standardmäßig mit dem Faktor 1 übernommen. Damit wird vermieden, dass veränderliche Kurswerte dauerhaft in der Übersetzungslogik hinterlegt werden.
Die eigentliche Umrechnung wird vom Nutzer durch die Ergänzung einer entsprechenden Formel innerhalb der Übersetzungsregel definiert. Dadurch kann der jeweils gültige Kurs flexibel berücksichtigt werden. Sowohl die Festlegung des anzuwendenden Kurses als auch der Zyklus, in dem dieser aktualisiert wird, liegen in der Verantwortung des Nutzers.
EUR in SFR umrechnen
Das folgende Beispiel verwendet den beispielhaften Faktor 0,9381.
$property.value() * 0.9381Weiter hier: