Beispiele zur Formelsprache in Regeln
René Holzer
Product Owner
Bei der Regelerstellung kann es notwendig werden, formeln zu verwenden. Dies ist insbesonders dann interessant, wenn man Wertebedingungen
auf andere Merkmale referenzieren möchte oder (Teil-) Informationen von Merkmalen übernehmen möchte.
Dieser Beitrag beschäftigt sich nur mit Formelbeispielen und soll als erste Hilfestellung bei der Regelerstellung dienen.
Wenn sie wissen wollen wie sie Regeln Anlegen können oder welche Aktionen es in Regeln gibt, dann folgen sie bitte den Links.
Details zu syntax und funktionen findet man hier.
Grundlegende Definitionen:
- $element ist Immer das entsprechende Element das von der Regel in der die Aktion angewandt werden soll selektiert wurde.
- $property ist Immer das entsprechende Merkmal das von der Aktion der Regel verändert werden soll.
- das Ergebnis der ifc-expression (Formel) wird in das in der Aktion angegebene Merkmal gespeichert.
Gängige Formelbefehle
Nachfolgend werden entsprechend der Kategorien Beispiele für Regeln dokumentiert.
- Textadaptierung
- Werte übernehmen
- Simple Mathematische Operationen - mit Werten rechnen
- Simple Mathematische Operationen - mit interaktion anderer Merkmale
- Conditional Values
- Konvertierung von Datentypen
Textadaptierung
Beschreibung | Expression |
|---|---|
| ersetzt in allen Werten “Abschnitt” durch “Bauabschnitt” | $property.value().replace(“Abschnitt”, “Bauabschnitt”) |
| übersetzung von Merkmalen mit Werteliste (case-insensitive) | map($property.value().toLowerCase(), [[“wert1”,“Neu1”],[“wert2”,“Neu2”], |
| alternativ auch mit Tabellen import | |
| ergänzt den Präfix “beginntmit" | "beginntmit”+$property.value() |
| ergänzt den Sufix “_endet_mit” | $property.value()+“_ended_mit” |
| ändert den Wert zu Großbuchstaben | $property.value().toUpperCase()” |
| ändert den Wert zu Kleinbuchstaben | $property.value().toLowerCase()” |
| setzt den Wert zusammen aus den Werten der Merkmale (Pset:Merkmalname), dazwischen immer mit einem ”_“: IfcKlasse; ”_“; ASF_MSet_Semantik_Topologie:Referenzachse[String];”_“; - Wert in M umgerechnet. | $element.ifcClass() + ”_” + $element.propertySet(“ASF_Mset_Semantik_Topologie”). |
Werte übernehmen
Beschreibung | Expression |
|---|---|
| Übernimmt den Wert der IfcKlasse des Elements als Wert in das Textmerkmal (auch mit ExtractAction möglich) | $element.ifcClass() |
| Übernimmt den Wert der Guid des Elements als Wert in das Textmerkmal (auch mit ExtractAction möglich) | $element.guid() |
| Übernimmt den Wert den Name des Elements als Wert in das Textmerkmal (auch mit ExtractAction möglich) | $element.name() |
| Übernimmt den Wert der Beschreibung des Elements als Wert in das Textmerkmal (auch mit ExtractAction möglich) | $element.description() |
| Übernimmt den Wert des PredefinedType als Wert in das Textmerkmal | derzeit nur mit ExtractAction möglich -ifc-expressions implementiert das noch nicht |
| Übernimmt den Wert des ObjectType als Wert in das Textmerkmal | derzeit nur mit ExtractAction möglich -ifc-expressions implementiert das noch nicht |
| Übernimmt den Wert des Merkmales “Abschnitt” aus beliebigen Psets | $element.property(“Abschnitt”).value() |
| Übernimmt den Wert des Merkmales “Abschnitt” aus dem Pset “ASF_MSet_Semantik_Topologie” | $element.propertySet(“ASF_MSet_Semantik_Topologie”). |
Simple Mathematische Operationen - mit Werten rechnen
Beschreibung | Expression |
|---|---|
| Merkmalswert wird mit 0,4 multipliziert | $property.value()*0.4 |
| Merkmalswert wird durch 3 dividiert | $property.value()/3 |
| Merkmalswert wird mit 120 addiert | $property.value()+120 |
| Merkmalswert wird mit 120 subtrahiert | $property.value()-120 |
Simple Mathematische Operationen - mit interaktion anderer Merkmale
Beschreibung | Expression |
|---|---|
| multipliziert den Zahlenwert mit dem Zahlenwert aus “Breite” | $property.value()*$element.property(“Breite”).value() |
| dividiert den Zahlenwert mit dem Zahlenwert aus “Breite” | $property.value()/$element.property(“Breite”).value() |
| addiert den Zahlenwert mit dem Zahlenwert aus “Breite” | $property.value()+$element.property(“Breite”).value() |
| subtrahiert den Zahlenwert mit dem Zahlenwert aus “Breite” | $property.value()-$element.property(“Breite”).value() |
Conditional Values
Beschreibung | Expression |
|---|---|
| Setze den Zahlenwert des Merkmals “Breite” im Pset ASF_MSet_Masse_und_Mengen auf 37,0cm, wenn das Merkmal Bewehrt im Pset ASF_MSet_Betonbau = True ist. (Das Merkmal Breite ist als Merkmal in der Aktion definiert) | if($element.propertySet(“ASF_MSet_Betonbau”).property(“Bewehrt”) |
| Setze den Zahlenwert des Merkmals “Breite” im Pset “ASF_MSet_Masse_und_Mengen” auf 50,0cm, wenn das Merkmal Laenge im Pset “ASF*MSet_Masse_und_Mengen” <=2m ist. *(Das Merkmal Breite ist als Merkmal in der Aktion definiert)_ | if($element.propertySet(“ASF_MSet_Masse_und_Mengen”).property |
| Setze den Zahlenwert des Merkmals “Breite” im Pset “ASF_MSet_Masse_und_Mengen” auf 60,0cm, wenn das Merkmal Element im Pset “ASF*MSet_Semantik_Topologie ” den String “Widerlager” enthält *(Das Merkmal Breite ist als Merkmal in der Aktion definiert)_ | if(contains($element.propertySet(“ASF_MSet_Semantik_Topologie”).property(“Element”) |
| Setze den Zahlenwert des Merkmals “Breite” im Pset “ASF_MSet_Masse_und_Mengen” auf 45,0cm, wenn das Merkmal Element im Pset “ASF_MSet_Semantik_Topologie ” den String “Widerlager” und das Merkmal “Betonguete” im Pset “ASF_MSet_Betonbau” den String “C25_30_B3” enthält | if(contains($element.propertySet(“ASF_MSet_Semantik_Topologie”).property(“Element”) |
| Setze den Zahlenwert des Merkmals “Breite” im Pset “ASF_MSet_Masse_und_Mengen” auf 50,0cm, wenn das Merkmal Element im Pset ASF_MSet_Semantik_Topologie den String Wand, Flügelwand, Stützwand enthält (oder) | if($element.propertySet(“ASF_MSet_Semantik_Topologie”).property(“Element”).value() |
Konvertierung von Datentypen
Beschreibung | Expression |
|---|---|
| Übernimmt den Wert des Merkmals “Breite” im Pset “ASF_MSet_Masse_und_Mengen” und ergänze den Sufix ” cm” | $element.propertySet(“ASF_MSet_Masse_und_Mengen”).property(“Breite”). |
| Übernimmt den Wert des Merkmals “Breite” (Textmerkmal in cm mit prefix cm) - Beispielwert “37 cm” im Pset “ASFMSet_Masse_und_Mengen” in das Zahlenmerkmal “Breite” [m] _Annahme das Breite Text-Merkmal befindet sich in pset ASF_MSet_Texte | $element.propertySet(“ASF_MSet_Texte”).property(“Breite”).value(). |
Weiter hier: