Attribute oder Eigenschaften kombiniert mit Operatoren werden als Ausdrücke bezeichnet. Diese können in Form von Abfragen auf Haltungen, Schächte, Wasserleitungen, Wasserknoten, und Gebiete angewendet werden. Ein wichtiger Anwendungsfall ist das Finden, Markieren und Anpassen von Objekten, welche die definierten Eigenschaften des Ausdruck aufweisen. Ausdrücke können aber auch für die Ansichtskonfiguration & Farbkonfiguration verwendet werden, um Informationen bestmöglich darzustellen.

Möglichkeit zur Verwendung von Ausdrücken:

  • Abfragen: Die gefundenen Elemente werden in einem Meldungsfenster aufgelistet. Darüber lassen sich die gefundenen Elemente markieren und folglich Eigenschaften neu setzen oder anpassen.
  • Ansichtskonfigurationen: In den Ansichtskonfigurationen können Informationen gezielt dargestellt werden, um komplexe Sachverhalte zu erklären.
  • Farbkonfiguration: Es ist möglich die Einfärbung von Objekten anhand von Ausdrücken zu steuern. Dies führt zu einem Umfrangreichen Werkzeug in ++SYSTEMS Ergebnisse und Informationen zu präsentieren.
  • Eigenschaftslisten: Das Erstellen von Listen kann auch mit zuvor definierten Ausdrücken durchgeführt werden. Oder es können eigene Ausdrücke angefertigt werden und für jedes Objekt ausgegeben werden.



Neuen Ausdruck erstellen.


Sie können projektübergreifend Ausdrücke über das Clipboard kopieren und mit dieser Funktion in das bestehende Projekt einfügen.


Löscht alle vorhandenen Ausdrücke.


Legt ein Unterverzeichnis „Unterverzeichnis_1“ an, um bei vielen Ausdrücken eine Ordnungsstruktur anlegen zu können. Die einzelnen Ausdrucksobjekte können per Drag&Drop zwischen den Verzeichnissen verschoben werden.


Objektebene

In der Objektebene können die Ausdrücke auf die jeweiligen Objekte ausgeführt werden. Hierfür können Sie je nach Modul verschiedene Objekte wählen:

  • Knoten
  • Abschnitte
  • Wasserknoten
  • Wasserleitungen
  • Gebiete
  • Beobachtungen
  • Sanierungsmaßnahmen
  • Gewässerabschnitte
  • GeoCPM

Ein Dialog zum Erstellen eines neuen Ausdrucks wird geöffnet.


Ein vorhandener Ausdruck wird zum Ändern geöffnet.


Löscht den ausgewählten Ausdruck.


Ausdruck in die Zwischenablage kopieren um ihn in ein anderes Projekt zu kopieren.


Neuer Ausdruck wird mit „Name_Kopie“ angelegt.


Starten der Abfrage auf Knoten/ Abschnitte/ Wasserknoten/ Wasserleitungen/ Gebiete/ Beobachtungen/ Sanierungsmaßnahmen/ Gewässerabschnitte/ GeoCPM.


Starten der Abfrage auf eine markierte Menge von ausgewählten Objekten

Syntax der Ausdrücke

Liste der Operatoren für die Ausdrücke
Operator Name Beschreibung Beispiel
( ) Klammern Bei Rechenoperationen sollten die Attribute in Klammer geschrieben werden, um Syntaxprobleme zu vermeiden (Maximales Überstauvolumen)/5
" Anführungszeichen Texte/Strings werden unter Anführungszeichen gestellt, gewünschte Leerzeichen müssen innerhalb der Anführungszeichen liegen. „Text1 “
.f0-.fx Floating Point Festlegung der Ausgabe der Dezimalstellen für Werte mit Nachkommastellen. (Maximales Überstauvolumen).f2
. Pointer Zugriff auf verknüpfte Daten über Pointer Deckel.Radius
Addition Addiert die Werte seiner Operanden und gibt das Ergebnis zurück (Deckelhöhe)+5
* Multiplikation Multipliziert die Werte seiner Operanden und gibt das Ergebnis zurück. (Profilhöhe)*5
sqrt() Wurzel Zieht die Qudatratwurzel aus dem Attribut sqrt(Fläche)
sqr() Quadrat Bildet das Quadrat aus dem gewählten Attribut sqr(Fläche)
/ Division Dividiert die Werte seiner Operanden und gibt das Ergebnis zurück. Bei der Division von Ganzzahlen fällt ein eventueller Rest weg, es wird also nicht gerundet. (Profilhöhe)/2
% Modulo Dividiert die Werte seiner Operanden und gibt den Divisionsrest zurück. Kann nur auf ganzzahlige Operanden angewendet werden. Ist mindestens ein Operand negativ, so ist das Vorzeichen des Resultats implementationsabhängig. (Entwässerungssystem)%3
< kleiner Ergibt den boolschen Wert WAHR, wenn der linke Operand kleiner als der rechte ist, sonst FALSCH. (Deckelhöhe)<(Sohlhöhe)
<= kleiner oder gleich Ergibt den boolschen Wert WAHR, wenn der linke Operand kleiner oder gleich dem rechten ist, sonst FALSCH. (Sohlhöhe)<=0
= gleich Ergibt den boolschen Wert WAHR, wenn die beiden Operanden gleich sind, sonst FALSCH. (Deckelhöhe)=0
<> ungleich Ergibt den boolschen Wert WAHR, wenn die beiden Operanden ungleich sind, sonst FALSCH. Entwässerungssystem<>2
>= größer oder gleich Ergibt den boolschen Wert true, wenn der linke Operand größer oder gleich dem rechten ist, sonst false. (Abschnittslänge m)>= 30
> größer Ergibt den boolschen Wert WAHR, wenn der linke Operand größer als der rechte ist, sonst FALSCH. (Abschnittslänge m)>100
! Negierung Invertiert den Wert seiner Operanden. Aus WAHR wird FALSCH und umgekehrt. !(Deckelhöhe).exists
& Und-Verknüpfung Verknüpft die beiden Operanden und gibt WAHR zurück, wenn beide Operanden den Wert WAHR haben, sonst FALSCH. !(Anfang Hochwert).exists & !(Ende Rechtswert).exists
| Oder-Verknüpfung Verknüpft die beiden Operanden und gibt WAHR zurück, wenn mindestens einer der beiden Operanden den Wert WAHR hat, sonst FALSCH. (Material)="MA" | (Material)="Sb"
.exists Abfrage-Vorhanden Abfrage nach dem gesuchten Attribut und gibt WAHR zurück (Objekt wird ausgegeben) (Deckelhöhe).exists
.size Abfrage-Anzahl Liefert die Anzahl der Elemente für das ausgwählte Attribut (Individuelles Überstauvolumen).size
.len Abfrage-Länge Liefert die Länge eines Strings (Name).len
.max Abfrage-Maximalwert Liefert den Maximalwert des Elements für das ausgewählte Attribut (Individuelles Überstauvolumen).max
.min Abfrage-Minimalwert Liefert den Minimalwert des Elements für das ausgewählte Attribut (Individuelles Überstauvolumen).min
.sum Abfrage-Summation Summiert die Werte der Elemente eines ausgewählten Attributs Zuflüsse.Einwohner.sum
.eq Vergleichsfunktion für Strings Vergleicht 2 Strings auf Gleichheit (equal) Attribut_XY.eq("Test")
.neq Vergleichsfunktion für Strings Vergleicht 2 Strings auf Ungleichheit (not-equal) Attribut_XY.neq("Test")
WENN ? DANN : SONST Wenn-Dann Abfrage Soll die Beschriftung variabel, je nach bestimmten Eigenschaften eines Objektes erfolgen kann diese vorher abgefragt werden ((Maximales Überstauvolumen) > 0) ?(Name) :""
# Raute Eine Folge von Texten (Strings) und Feldnamen verbunden mit # „Text1 “#Feldname.f2#“ Text“
</br> Neue Zeile Über den Ausdruch kann eine neue Zeile eingefügt werden „Text1 “#Feldname.f2#“ Text“
.i integer Wandelt ein numerisches Feld ineinen Integer-Wert um (ganze Zahl) Belastungsgrad.i
.s string Wandelt ein numerisches Feld in einen String um Deckelhöhe.s
.nth(1) Individuelle ereignisspezifische Ausdrücke Der größte Wert eines Arrays wird ausgegeben (Individuelles Überstauvolumen).nth(1).f2
.nth(2) Individuelle ereignisspezifische Ausdrücke Der zweitgrößte Wert eines Arrays wird ausgegeben (Individuelles Überstauvolumen).nth(2).f2
.left(n) Funktion für String(Text)-Attribute Gibt n Buchstaben des Textes zurück von Links Name="Schacht_xy_test" -> Name.left(10) -> "Schacht_xy"
.right(n) Funktion für String(Text)-Attribute Gibt n Buchstaben des Textes zurück von Rechts Name="Schacht_xy_test" -> Name.right(7) -> "xy_test"
.substr(n,m)) Funktion für String(Text)-Attribute Gibt ein Teilstück des Textes zurück mit n von Links und m von Rechts Name="Schacht_xy_test" -> Name.substr(7,4) -> "_xy_"

Abfragen mit Ausdrücke

Ein wichtiger Grund ist das Finden von Objekten, die über die Abfrage definierte Eigenschaften haben müssen. Diese Funktion wird häufig genutzt, um die Konsistenz der importierten Daten zu überprüfen. Mit dem Ausführen der jeweiligen Ausdrücke können sehr schnell Fehler gefunden und angepasst werden. Zudem können bereits viele Fehlerquellen vor einer Berechnung überprüft werden.

Eine Auflistung der gängisten Abfragen zur Netz- und Eingangsdatenkontrolle.

Abschnitte

Beispiele für Ausdrücke bei Abschnitten
Name Ausdruck Beschreibung
Fehlende Profilhöhe !(Profilhöhe mm).exists Sucht nach Abschnitten mit fehlender Profilhöhe oder Nullhöhe
Fehlendes Gefälle !(Gefälle).exists Sucht nach Abschnitten mit fehlenden Gefälle
Kontrolle Anschlusspunkt Höhe (Anfangsknoten Anschlusspunkt Höhe)<(Endknoten Anschlusspunkt Höhe) Sucht nach Abschnitten mit falscher Orientierung
Abschnittslänge zu lang (Abschnittslänge m)>100 Sucht nach extrem langen Abschnittslängen größer 100 m
Kein Entwässerungssystem !(Entwässerungssystem).exists Sucht nach Abschnitten ohne zugewiesenen Entwässerungssystem
Fehlende Koordinaten !(Anfang Hochwert).exists | !(Ende Rechtswert).exists | !(Ende Hochwert).exists Sucht nach Abschnitten ohne Koordinatenzuweisungen
Belastungsgrad über 200 % (Belastungsgrad)>200 Sucht nach Abschnitten mit hoher hydraulischer Belastung (>200%)

Knoten

Beispiele für Ausdrücke bei Knoten
Name Ausdruck Beschreibung
Fehlende Sohlhöhe !(Sohlhöhe).exists Sucht nach Knoten ohne Sohlhöhe.
Sohlhöhe gleich Nullwert (Sohlhöhe)=0 Sucht nach Knoten mit einer Sohlhöhe von Null.
Fehlende Deckelhöhe !(Deckelhöhe).exists Sucht nach Knoten ohne Deckelhöhe.
Deckelhöhe hat Nullwert (Deckelhöhe)=0 Sucht nach Knoten mit einer Deckelhöhe von Null.
Knoten ohne Abschnitte ((Aus).size=0)&((Ein).size=0) Sucht nach Knoten ohne Abschnitten.
Auslauf ((Aus).size=0)&((Ein).size=1) Sucht nach Knoten, welche als Auslauf von ++SYSTEMS betrachtet werden.
Auslauf-Fehler ((Aus).size=0)&((Ein).size=2) Sucht nach Knoten, welche zwei Zuläufe und keinen Ablauf hat. Hier wird eine Fehlermeldung in die .MLD Datei geschrieben.
Extreme Schachtiefe ((Deckelhöhe)-(Sohlhöhe))>5 Sucht nach Knoten, welche eine extreme Schachttiefe aufweisen!
Anschlusssohlhöhen Abschnitte unterhalb der Knotensohle (Ein).(Endknoten Anschlusspunkt Höhe).min<(Sohlhöhe) Sucht nach Knoten, welche eingehende oder ausgehende Abschnitte aufweisen, welche tieferliegende Anschlusshöhen haben, als die Sohlhöhe des Knotens.

Dies führ in DYNA zu erhöhten Schacht-/Bauwerksvolumina.

Haltungsscheitel über Deckelhöhe ((Ein).Profilhöhe.max) +(Sohlhöhe * 1000) - (Deckelhöhe * 1000)>0 Sucht nach Knoten, welche eingehende oder ausgehende Abschnitte mit Scheitelhöhe größer der Deckelhöhe aufweisen.
Absturz ((Aus).(Anfangsknoten Anschlusspunkt Höhe).min)-((Ein).(Endknoten Anschlusspunkt Höhe).min)>0.05 Sucht nach Knoten, indem ein Versatz von mindestens 5 cm von eingehnder und ausgehenden Abschnitt vorhanden ist.
Sohlsprung im Schacht (Gegengefälle) (Anfangsknoten Anschlusspunkt Höhe)<(Endknoten Anschlusspunkt Höhe) Sucht nach Knoten, indem ein Sohlsprung von der eingehenden Höhe zur ausgehenden Höhe vorhanden ist (Gegengefälle im Schacht)
Knoten Nichtgraphisch !(Hochwert).exists Sucht nach Knoten ohne Koordinaten (Nichtgrafische Elemente).
Sohle berechnet oder geschätzt (Status Sohlhöhe)=6 Sucht nach Knoten mit dem Status berechnet oder geschätzt.
Schacht mit Bauwerksumriss (Bauwerksumriss als Folge von RW und HW).exists Sucht nach Knoten mit einem definierten Bauwerksumriss.
Knoten ist Revisionsschacht (Knotentyp)=1 Sucht nach Knoten, welche als Revisionsschacht definiert wurden.
Sonderbauwerk (Sonderbauwerkstyp)>=10 Sucht nach Knoten, welche als Sonderbauwerk festgelegt wurden.
Überstau (Wasserspiegel Ende)<(Ende Sohle)+(Profilhöhe m) ? 1000 : ((Wasserspiegel Ende) - (Endknoten.Deckelhöhe)) Sucht nach Knoten, welche einen Überstau verursachen.

Einzugsgebiete

Beispiele für Ausdrücke bei Einzugsgebieten
Name Ausdruck Beschreibung
Einwohner an Regenwasser (Abschnitt.(Entwässerungssystem) = 2) & ((Einwohner) > 0) Sucht alle Einzugsgbeite mit Einwohner, welche dem Regenwasserkanal zugewiesen wurden.
Gewerblicher Abfluss ((Abfluss gewerblich)>0.500) Sucht alle Einzugsgbeite mit einem gewerblichen Abfluss über 0,5 l/s in der ausgewählten Partition.
Kleine Flächen ((Fläche)<0.001) Sucht extrem kleine Flächen unter 0.001 m² in der ausgewählten Partition.
Großeinleiter ((Konstanter Zufluss)>0.000) & ((Konstanter Zufluss)<1000.000) Sucht Einzugsgebiete mit großen Zufluss.
Undurchlässigkeitsanteil der Fläche ((Anteil undurchlässig Prozent)<40.000) & ((Anteil undurchlässig Prozent)>=0.000) Sucht Einzugsgebiete mit einem Anteil an undurchlässiger Fläche von 0 bs 40%

Anwendung von Ausdrücken in der Ansichtskonfiguration

Beschriftung

In den Ansichtskonfigurationen können auch komplexe Abfragen für die Informationsausgabe im Bearbeitungsfenster oder Plan erfolgen. Im Folgenden ein Beispiel wird die Knotenbeschriftung mit einem Ausdruck erstellt. Hier kommen sowohl Stammattribute in der Abfrage vor, als auch freie Attribute, z.B. "Sonderbauwere". Zudem werden Bedingungen (WENN ? DANN : SONST) vorangestellt, wann eine Beschriftung der Knoten erfolgen soll.

Allgemein img14.png
  • Ausdruck 1:"D = "#Deckelhöhe.f2
  • Ausdruck 2: Sonderbauwerke="Außengebiet"?("Einleitung von:"#"<br> "#GEP_Auslauf_Art):(Sonderbauwerke="Auslauf"|Sonderbauwerke="Anschluss"?(Sonderbauwerke_Name#"<br> Einleitung von:"#"<br> "#GEP_Auslauf_Art#"<br>X="#Rechtswert.f0#"<br> Y="#Hochwert.f0):(Sonderbauwerke="RÜ"?(Sonderbauwerke_Name#"<br> Schwellenlänge= "#(Beckenüberlauf Länge).f2#" m"#"<br> Überfallbeiwert= "#(Beckenüberlauf Überfallbeiwert).f2#"<br> X="#Rechtswert.f0#"<br> Y="#Hochwert.f0):((Sonderbauwerke="DBw mit NÜ"|Sonderbauwerke="RRR mit NÜ")?(Sonderbauwerke#" "#Sonderbauwerk Kurzname#"<br>Schwellenlänge= "#(Beckenüberlauf Länge).f2#" m"#"<br> Überfallbeiwert= "#(Beckenüberlauf Überfallbeiwert).f2#"<br> X="#Rechtswert.f0#"<br> Y="#Hochwert.f0):((Sonderbauwerke="DBw"|Sonderbauwerke="Schieber"|Sonderbauwerke="RRR")?(Sonderbauwerke_Name #"<br> Q d= "#(Ablauf Maximaler Abfluss).f2#" l/s"#"<br> X="#Rechtswert.f0#"<br>Y="#Hochwert.f0):))))
  • Ausdruck 3: (Entwässerungssystem<3&((Ein).Summierte Einzugsgebietsfläche.sum)>0)?"Ab,ges.= "#((Ein).Summierte Einzugsgebietsfläche.sum.f2)#"<br>Au,ges.= "#((Ein).Summe undurchlässige Einzugsgebietsfläche.sum.f2):


Das Ergebnis dieser komplexen Abfrage schaut dann wie folgt aus:

Allgemein img13.png

Der Lange Ausdruck 2 wurde nochmals mit Formatierungsregeln ausgegeben (
zur besseren Übersicht: Sonderbauwerke="Außengebiet"?("Einleitung von:"#"
"#GEP_Auslauf_Art):(Sonderbauwerke="Auslauf"|Sonderbauwerke="Anschluss"?(Sonderbauwerke_Name#"
Einleitung von:"#"
"#GEP_Auslauf_Art#"
X="#Rechtswert.f0#"
Y="#Hochwert.f0):(Sonderbauwerke="RÜ"?(Sonderbauwerke_Name#"
Schwellenlänge= "#(Beckenüberlauf Länge).f2#" m"#"
Überfallbeiwert= "#(Beckenüberlauf Überfallbeiwert).f2#"
X="#Rechtswert.f0#"
Y="#Hochwert.f0):((Sonderbauwerke="DBw mit NÜ"|Sonderbauwerke="RRR mit NÜ")?(Sonderbauwerke#" "#Sonderbauwerk Kurzname#"
Schwellenlänge= "#(Beckenüberlauf Länge).f2#" m"#"
Überfallbeiwert= "#(Beckenüberlauf Überfallbeiwert).f2#"
X="#Rechtswert.f0#"
Y="#Hochwert.f0):((Sonderbauwerke="DBw"|Sonderbauwerke="Schieber"|Sonderbauwerke="RRR")?(Sonderbauwerke_Name #"
Q d= "#(Ablauf Maximaler Abfluss).f2#" l/s"#"
X="#Rechtswert.f0#"
Y="#Hochwert.f0):))))

Darstellung

Auch die Darstellung der angezeigten Knoten, kann über Ausdrücke und Attribute angepasst werden. In diesem Beispiel wird der Knotenradius an das anfallende Überstauvolumen angepasst. Hierfür wird ein Mindestwert von 2 mit dem Wert der Division des anfallenden Maximalen Überstauvolumen durch 5 addiert.

Allgemein img15.png


2+((Maximales Überstauvolumen)/5)

Da hier auf ein hydraulisches Attribut zurückgegriffen wird, ist eine Veränderung der Anzeige erst nach erfolgreicher Berechnung der Hydraulik möglich. Das Ergebnis schaut wie folgt aus:

Allgemein img16.png

Ausdruck zum Ausblenden der Knoten

In der Ansichtskonfiguration können Sie auch über Ausdrücke und Attribute Knoten explizit ausblenden. Als Beispiel werden alle Knoten mit Überstau über 40 m³ über den folgenden Ausdruck ausgeblendet:

Allgemein img18.png
Allgemein img17.png

Ausdrücke in Farbkonfigurationen

Wie bereits bei den Beschriftungen der Ansichtskonfiguration, so können auch in der dazugehörigen Farbkonfiguration Ausdrücke zum darstellen der Objektfarben verwendet werden.

Im folgenden Standard-Beispiel sollen die Schächte angezeigt werden, welche einen Überstau generieren. Hierfür wurde folgender Ausdruck in den Knoten verwendet: (Ein.size<1) ? ((Maximaler Wasserspiegel)<(((Sohlhöhe)+(Aus.Profilhöhe mm.max)/1000)) ? 1000 : ((Maximaler Wasserspiegel) - (Deckelhöhe))) : ((Maximaler Wasserspiegel)<(((Sohlhöhe)+(Ein.Profilhöhe mm.max)/1000)) ? 1000 : ((Maximaler Wasserspiegel) - (Deckelhöhe)))

Hier wird zuvor eine Abfolge von WENN ? DANN : SONST Bedingung an die Anzahl der eingehenden Abschnitte gesetzt. Wenn der Maximale Wasserspiegel die Sohlhöhe mit der Profilhöhe nicht überschreitetet, dann wird für den Deckel ein Wert 1000 ausgegeben. Ist dre Maximale Wasserspiegel größer als die Sohlhöhe mit Profilhöhe dann wird der Boolsche Wert Wahr ausgegbeen, welcher hier mit dem numerischen Wert 0 ausgegeben wird.

Allgemein img21.png

Und folgender Ausdruck in den Abschnitten:

(Wasserspiegel Ende)<(Ende Sohle)+(Profilhöhe m) ? 1000 : ((Wasserspiegel Ende) - (Endknoten.Deckelhöhe))

Allgemein img22.png

Das Ergebnis schaut wie folgt aus:

Allgemein img23.png

Ein Weiteres Beispiel, wäre die Einfärbung von Flächen zu steuern, welche an ignorierten Haltungen hängen. Hier wird eine WENN ? DANNN Abfrage für die Färbung durchgeführt: Flächen ignorierter Haltungen nicht färben.

Abschnitt.Ignoriert=1 ? 200 : (Anteil undurchlässig Prozent)

Allgemein img27.png

Ausdrücke in Eigenschaftslisten

Auch bei den Eigenschaftslisten können umfangreiche Daten über Ausdrücke gefiltert und angepasst werden. Hierfür können Sie im Dialog der Eigenschaftsliste ein bereits erstellten Ausdruck über das Dropdown-Menü hinzufügen oder aber direkt einen Ausdruck erstellen.


Allgemein img19.png

Im Beispiel sollen nur die spezfischen Haltungsdaten der Regenwasserkanäle in einer Tabelle ausgegeben werden: (Entwässerungssystem)=2

Über das Kontextmenü kann dann eine Tabelle mit Ausdruck erzeugt werden. Die Ergebnisse sind dann an die zuvor angelegte Abfrage gekoppelt. In diesem Fall werden spezifische Haltungsdaten nur von den Regenwasserkanälen ausgegeben.

Allgemein img20.png

Ausdrücke dynamisch setzen

Es besteht die Möglichkeit Ausdrücke auch dynamisch auszuwerten. Hierbei werden die Ausdrücke beim setzen über "markierte ändern" dynamisch berechnet/ausgeführt.

Im folgenden Beispiel wird das Attribut Tiefe immer an die aktuellen Werte des Knotens angepasst:

Im ersten Schritt muss wie gewohnt ein Ausdruck erstellt werden:

Allgemein img24.png

Danach wird dieser Ausdruck über die Funktion "markierte ändern" auf ein freies Attribut gesetzt. Dabei wird bei der Zuweisung des Ausdruckes eckige Klammern [Tiefe_dyna] verwendet.

Allgemein img25.png

Im Dialog des Knoten wird dann diese dynamische Zuweisung sichtbar.

Allgemein img26.png