In den vorherigen Posts iLogic: Logging und iLogic: Progressbar wurden zwei Methoden vorgestellt, um dem Anwender Ausgaben zu präsentieren. Mit dem User in Interaktion treten kann man über Logger und Progressbars jedoch nicht. Für interaktive Abfragen stehen weitere grafische Elemente zur Verfügung. Basierend auf einer User-Auswahl, kann somit auch Einfluss auf die Ausführung des Codes einer iLogic genommen werden.

MessageBox

Eine Messagebox kann mit dem Befehl MessageBox.Show() aufgerufen werden. Die Methode erwartet nur einen Pflichtparameter und zwar den Message Body. Alle anderen Parameter sind optional.

MessageBox.Show("Message Body", "Title", MessageBoxButtons.OKCancel, MessageBoxIcon.Information, MessageBoxDefaultButton.Button2)

Die einzelnen Parameter, in Reihenfolge der Klammeranweisung, erläutert:

Parameter Erläuterung
Message Body Der Text, der in der Messagebox ausgegeben werden soll.
Title Der Titel, der in der Statusbar der Messagebox dargestellt wird.
MessageBoxButtons Die Auswahl, welche Buttons in der Messagebox angezeigt werden sollen.
MessageBoxIcon Die Auswahl, welches Icon in der Messagebox angezeigt werden soll.
MessageBoxDefaultButton Die Auswahl, welcher Button als Default aktiviert sein soll, abhängig von der Auswahl MessageBoxButtons.

Icons

Es stehen folgende vier Icons zur Auswahl. Einige haben doppelte und dreifache Bezeichnungen. Die fettgedruckten Werte werden für alle Beispiele in folgenden Posts verwendet:

Icon Grafik Bezeichnung
Asterisk, Information
Error, Hand, Stop
Exclamation, Warning
Question

Buttons

Es stehen folgende sechs Button-Darstellungen zur Verfügung:

Button Darstellung Bezeichnung
AbortRetryIgnore
OK
OKCancel
RetryCancel
YesNo
YesNoCancel

Es stehen folgende Rückgabewerte für das Klicken auf einen Button zur Verfügung. Diese Rückgabewerte können genutzt werden um Entscheidungslogiken im iLogic Code zu steuern:

Rückgabe Beschreibung
vbOK OK wurde geklickt
vbCancel Abbrechen wurde geklickt
vbAbort Beenden wurde geklickt
vbRetry Wiederholen wurde geklickt
vbIgnore Ignorieren wurde geklickt
vbYes Ja wurde geklickt
vbNo Nein wurde geklickt

Interaktion mit Button-Press

Erzeugt man eine Messagebox und fordert den User damit zu einer interaktiven Eingabe auf, kann in iLogic ausgelesen welcher Button geklickt wurde (Rückgabewerte) und daraufhin Code ausführen.

Im folgenden fiktiven Beispiel wird eine Situation aus dem Post iLogic: Stücklisten aufgegriffen:

  1. Der User bearbeitet eine Baugruppe und vergisst die Strukturstückliste zu aktivieren.
  2. Die ilogic prüft, ob die Strukturstückliste aktiviert ist. Wenn dies nicht der Fall ist, wird eine Messagebox erzeugt.
  3. Klickt der User auf den Button OK wird die Strukturstückliste aktiviert.
Dim oDoc As Document = ThisDoc.Document
Dim bStrucutredViewEnabled As Boolean = oDoc.ComponentDefinition.BOM.StructuredViewEnabled

If bStrucutredViewEnabled = False Then
    question = MessageBox.Show("Die Strukturstuecklistenansicht ist nicht aktiviert. Soll sie aktiviert werden?", "StructuredView aktivieren?", MessageBoxButtons.OKCancel, MessageBoxIcon.Warning, MessageBoxDefaultButton.Button1)

    If question = vbOK Then
        oDoc.ComponentDefinition.BOM.StructuredViewEnabled = True
    End If
End If

InputBox

Eine Inputbox erwarten, wie auch die Messagebox, Eingangsparameter. Diese sind analog ein Message Body, ein Titel und ein Parameter für einen Default-Wert:

InputBox("Message Body", "Title", "Default Entry")

Beispiel für die Verwendung einer InputBox:

  1. Als Basismodell dient ein einfacher Zylinder mit einer modellierten Fase. Die Fase hat eine Größe von 5mm und den Modellparameternamen d3.
  2. Eine InputBox soll erscheinen und den User interaktiv nach der Größe der Fase fragen.
  3. Nach der Eingabe eines Größenwerts, wird die Eingabe an den Parameter d3 übergeben.
  4. Das Modell wird anschließend neu aufgebaut, um die Änderung der Fasengröße darzustellen.
Parameter("d3") = InputBox("Wähle die Dimension der Fase.", "Fase", 5)
ThisDoc.Document.Rebuild()

InputListBox

InputListBox ist quasi gleichzusetzen mit der InputBox, jedoch bietet sie eine vordefinierte Liste aus auswählbaren Einträgen an.

Beispiel für die Verwendung einer InputListBox:
Ein liebevoll modelliertes Toastbrot erhält ein Prägungs-Feature, das stellvertretend für den Aufschnitt steht. Eine Prägung (Emboss) erfordert eine Skizze - in diesem Fall der Textblock - und eine Fläche auf dem diese platziert wird. Der Textwert des Aufschnitts ist in der API unter ComponentDefinition.Sketches zu finden. In meinem Fall war der Endpunkt unter ComponentDefinition.Sketches.Item(2).TextBoxes.Item(1).Text zu erreichen. Es wird eine Liste mit verfügbaren Aufschnitten erzeugt. Anschließend wird die InputListBox aufgerufen und die Auswahl in einen String gewandelt, da sonst nur ein Index zurückgegeben würde. Die Auswahl wird anschließend an die Prägungsskizze übergeben. Da es sich, wie schon im Beispiel zuvor, um eine Änderung der Modellgeometrie handelt muss als letzter Befehl ThisDoc.Document.Rebuild() gesendet werden, um das Modell neu aufzubauen.

Dim oDoc As Document = ThisDoc.Document
Dim oSketches As PlanarSketches = oDoc.ComponentDefinition.Sketches
Dim listAufschnitt = New String(){"Wurst", "Käse", "Mett"}

aufschnitt = InputListBox("Wählen Sie!", listAufschnitt)

oSketches.Item(2).TextBoxes.Item(1).Text = aufschnitt.ToString
ThisDoc.Document.Rebuild()

InputRadioBox

Eine InputRadioBox bietet die Möglichkeit aus zwei gelisteten Werten zu entscheiden. Die Grundstruktur ist einfach beschrieben. Geliefert wird ein boolscher Rückgabewert. Der Parameter True besagt, ob gegen die erste (True) oder zweite (False) Auswahlmöglichkeit geprüft wird.

bResult = InputRadioBox("Prompt", "Button1 Label", "Button2 Label", True, Title :="Title")

Ein Beispiel für die Verwendung einer InputRadioBox:
Ein modellierter Donut hat zwei Modellparameter: Donutgrösse:, also der Durchmesser des Donuts und Teigquerschnitt:, also Durchmesser der Teigfläche.

Es wird eine InputRadioBox ausgegeben, die erfragt wie groß der Hunger ist. Es besteht die Auswahl zwischen einem kleinen und einem großen Donut. Basierend auf der Wahl werden die Parameter Donutgröße und Teigquerschnitt angepasst und das Modell neu aufgebaut:

bResult = InputRadioBox("Wie groß ist der Hunger?", "Kleiner Donut!", "Großer Donut!", True, Title :="Wähle einen Donut")

If bResult = True Then
	Parameter("Donutgrösse") = "50mm"
	Parameter("Teigquerschnitt") = "30mm"
Else
	Parameter("Donutgrösse") = "80mm"
	Parameter("Teigquerschnitt") = "50mm"
End If

ThisDoc.Document.Rebuild()

Ressources