Eine Zeichenfolge ist in der Fachsprache eine Folge von Zeichen, die für eine Literalkonstante oder verschiedene Typen von Variablen steht. Im Zusammenhang mit Programmierung ist "Zeichenfolge" eine Bezeichnung für Text. Sie haben bereits Zahlen (Ganzzahlen und Dezimalzahlen) zur Steuerung von Parametern verwendet. Dasselbe ist auch mit Text möglich.
Zeichenfolgen können auf vielfältige Weise eingesetzt werden. Dazu gehören das Definieren benutzerdefinierter Parameter, Beschriftungen für Dokumentation sowie die Analyse mithilfe textbasierter Datensätze. Der String-Block befindet sich in der Kategorie Core > Input.
Die oben gezeigten Blöcke sind Zeichenfolgen. Zeichenfolgen können Zahlen, Buchstaben oder ganze Textabschnitte sein.
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
Sie können große Datenmengen rasch analysieren, indem Sie Zeichenfolgen abfragen. In diesem Abschnitt werden einige grundlegende Vorgänge behandelt, die Arbeitsabläufe beschleunigen und die Interoperabilität von Software verbessern können.
Die folgende Abbildung zeigt eine Folge von Daten aus einer externen Kalkulationstabelle. Diese Zeichenfolge steht für die Scheitelpunkt eines Rechtecks in der xy-Ebene. In dieser kurzen Übung wird die Zeichenfolge geteilt:
Das Trennzeichen ";" trennt die einzelnen Scheitelpunkte des Rechtecks voneinander. Dadurch erhalten Sie eine Liste mit drei Einträgen für die einzelnen Scheitelpunkte.
Durch Klicken auf "+" in der Mitte des Blocks erstellen Sie ein neues Trennzeichen.
Fügen Sie einen String-Block mit der Angabe "," in den Ansichtsbereich ein und verbinden Sie ihn mit der neuen separator-Eingabe.
Als Ergebnis erhalten Sie jetzt eine Liste mit zehn Einträgen. In diesem Block wird die Liste zuerst entsprechend separator0 und dann entsprechend separator1 geteilt.
Die Einträge in der oben gezeigten Liste sehen zwar wie Zahlen aus, werden jedoch in Dynamo nach wie vor als einzelne Zeichen betrachtet. Damit Sie Punkte erstellen können, müssen Sie ihren Datentyp aus Zeichenfolgen in Zahlen konvertieren. Dazu verwenden Sie den String.ToNumber-Block.
Dieser Block ist einfach zu verwenden. Verbinden Sie das Ergebnis von String.Split mit der Eingabe. Die Ausgabe sieht genau so aus wie zuvor, der Datentyp ist jetzt jedoch number anstelle von string.
Mit einigen weiteren grundlegenden Operationen wird am Ursprungspunkt ein Dreieck gezeichnet, dem die Zeichenfolge aus der ursprünglichen Eingabe zugrunde liegt.
Da Zeichenfolgen allgemeine Textobjekte sind, eignen sie sich für eine Vielzahl von Verwendungszwecken. In diesem Abschnitt werden einige der wichtigsten Aktionen in der Kategorie Core > String in Dynamo beschrieben:
Die folgende Methode verbindet zwei Zeichenfolgen in der angegebenen Reihenfolge. Dabei werden die einzelnen Literalzeichenfolgen in einer Liste zu einer einzigen Zeichenfolge zusammengeführt.
Die folgende Abbildung zeigt die Verkettung dreier Zeichenfolgen:
Mithilfe der Schaltflächen + und - in der Mitte des Blocks können Sie der Verkettung weitere Zeichenfolgen hinzufügen oder sie daraus entfernen.
Die Ausgabe zeigt die aus der Verkettung resultierende Zeichenfolge einschließlich Leerzeichen und Satzzeichen.
Die Verbindung ist der Verkettung ähnlich, wobei das Ergebnis jedoch zusätzlich gegliedert wird.
Aus der Arbeit mit Excel sind Sie wahrscheinlich mit CSV-Dateien vertraut. Dies steht für kommagetrennte Werte. Sie könnten im String.Join-Block ein Komma (oder in diesem Fall zwei Bindestriche) als Trennzeichen verwenden, um eine ähnliche Datenstruktur zu erhalten.
Die folgende Abbildung zeigt die Verbindung zweier Zeichenfolgen:
Die separator-Eingabe ermöglicht es, eine Zeichenfolge zu erstellen, die als Trennzeichen zwischen den verbundenen Zeichenfolgen steht.
In dieser Übungslektion zerlegen Sie die letzte Strophe von Robert Frosts Gedicht Stopping By Woods on a Snowy Evening mithilfe von Methoden zum Abfragen und Bearbeiten von Zeichenfolgen. Diese zugegebenermaßen nicht unbedingt praxisnahe Anwendung verdeutlicht die grundlegenden Aktionen für Zeichenfolgen durch Anwendung auf die Zeilen mit ihrem Rhythmus und Reim, wie sie im Gedicht erscheinen.
Als Erstes teilen Sie einfach die Zeichenfolge, die die Strophe bildet. Zunächst fällt auf, dass der Text durch Kommas gegliedert ist. Anhand dieses Formats definieren Sie jede Zeile als eigenen Eintrag.
Fügen Sie die Ausgangszeichenfolge in einen String-Block ein.
Legen Sie mithilfe eines zweiten String-Blocks das Trennzeichen fest. Verwenden Sie in diesem Fall ein Komma.
Fügen Sie im Ansichtsbereich einen String.Split-Block hinzu und verbinden Sie ihn mit den beiden String-Blöcken.
Die Ausgabe zeigt die einzelnen Zeilen als separate Einträge.
Betrachten Sie jetzt den besten Teil des Gedichts – die letzten beiden Zeilen. Die ursprüngliche Strophe war ein einziges Datenelement. Diese Daten haben Sie im ersten Schritt in einzelne Einträge aufgeteilt. Als Nächstes müssen Sie nach dem gewünschten Text suchen. In diesem Fall können Sie dies zwar erreichen, indem Sie die letzten beiden Einträge in der Liste auswählen. In einem ganzen Buch wäre es jedoch unrealistisch, dieses komplett durchzulesen und die Elemente manuell zu isolieren.
Verwenden Sie daher, anstatt manuell zu suchen, einen String.Contains-Block für die Suche nach einer Gruppe von Zeichen. Diese Funktion ist dem Befehl Suchen in Textverarbeitungsprogrammen ähnlich. In diesem Falle erhalten Sie True oder False als Ergebnis, je nachdem, ob die betreffende Teilzeichenfolge in einem Eintrag gefunden wurde.
Definieren Sie in der searchFor-Eingabe die Teilzeichenfolge, nach der Sie in der Strophe suchen. Verwenden Sie dazu einen String-Block mit dem Text "And miles".
Die Ausgabe zeigt eine Liste von True- und False-Werten. Im nächsten Schritt filtern Sie die Elemente mithilfe dieser Booleschen Logik.
Mit einem List.FilterByBoolMask-Block bereinigen Sie die True- und False-Werte. Die in-Ausgabe gibt die Aussagen mit dem Wert True für die mask-Eingabe zurück, die out-Ausgabe diejenigen mit dem Wert False.
Die in-Ausgabe zeigt wie erwartet die letzten beiden Zeilen der Strophe.
Heben Sie jetzt die Wiederholung in der Strophe hervor, indem Sie diese beiden Zeilen zusammenführen. In der Ausgabe aus dem vorigen Schritt sehen Sie eine Liste mit zwei Einträgen.
Mithilfe zweier List.GetItemAtIndex-Blöcke können Sie die Einträge durch Angabe der Werte 0 bzw. 1 für die index-Eingabe isolieren.
Die Ausgabe jedes Blocks zeigt die letzten beiden Zeilen in der angegebenen Reihenfolge.
Verwenden Sie zum Zusammenführen der beiden Einträge einen String.Join-Block:
Nachdem Sie den String.Join-Block hinzugefügt haben, zeigt sich, dass ein Trennzeichen benötigt wird.
Fügen Sie zum Erstellen des Trennzeichens im Ansichtsbereich einen String-Block hinzu und geben Sie ein Komma ein.
In der letzten Ausgabe wurden beide Einträge zu einem zusammengeführt.
Dieser Vorgang zum Isolieren der letzten beiden Zeilen mag recht aufwendig erscheinen. Für Operationen mit Zeichenfolgen sind in der Tat zuweilen einige Vorarbeiten nötig. Diese Operationen sind jedoch skalierbar und können relativ leicht auf große Datensätze angewendet werden. Berücksichtigen Sie bei der parametrischen Arbeit mit Kalkulationstabellen und Interoperabiltät die Operationen für Zeichenfolgen.
Um die Entwicklung visueller Programme detaillierter kennenzulernen, benötigen Sie ein genaueres Verständnis der hierfür verwendeten Grundbausteine. In diesem Kapitel werden die Grundbegriffe zum Thema Daten vorgestellt: zu den Informationen, die durch die Verbindungen von Dynamo-Programmen geleitet werden.
Daten sind das Material unserer Programme. Sie fließen als Eingaben durch "Drähte" in Blöcke, wo sie verarbeitet und in eine neue Form von Ausgabedaten umgewandelt werden. Hier sollen zunächst die Definition und Struktur von Daten betrachtet werden, bevor Sie damit beginnen, sie in Dynamo zu verwenden.
Unter Daten versteht man eine Gruppe von Werten für qualitative oder quantitative Variable. Die einfachste Form von Daten sind Zahlen wie z. B. 0
, 3.14
oder 17
. Es gibt jedoch eine Reihe unterschiedlicher Datentypen: Variable, die für veränderliche Zahlen stehen (height
), Zeichen (myName
), Geometrie (Circle
) oder eine Liste von Datenelementen (1,2,3,5,8,13,...
).
In Dynamo geben wir Daten in die Eingabeanschlüsse von Blöcken ein: Daten können ohne Aktionen existieren, aber die Aktionen, die durch die Blöcke dargestellt werden, können nur durchgeführt werden, wenn Daten vorhanden sind. Wenn Sie im Arbeitsbereich einen Block hinzufügen, ohne Eingaben bereitzustellen, ist das Ergebnis eine Funktion, nicht das Ergebnis der eigentlichen Aktion.
Einfache Daten
Daten und Aktion (Block): erfolgreiche Ausführung
Aktion (Block) ohne Daten gibt eine allgemeine Funktion zurück
Vorsicht vor Nullwerten: Der Typ 'null'
steht für das Fehlen von Daten. Dies ist zwar ein abstraktes Konzept, dem Sie jedoch bei der Arbeit mit visueller Programmierung sehr wahrscheinlich begegnen werden. Wenn eine Aktion kein gültiges Ergebnis erstellt, gibt der Block Null zurück.
Das Ermitteln und Entfernen von Nullwerten aus Datenstrukturen ist ein entscheidender Schritt zum Erstellen stabiler Programme.
Bei der visuellen Programmierung können sehr schnell große Datenmengen generiert werden. Aus diesem Grund benötigen Sie ein Verfahren zur Verwaltung von deren Hierarchie. Dies ist die Funktion der Datenstrukturen, der organisatorischen Schemata, in denen Daten gespeichert werden. Die Charakteristika der Datenstrukturen und ihrer Verwendung sind von Programmiersprache zu Programmiersprache unterschiedlich.
in Dynamo werden Daten mithilfe von Listen hierarchisch geordnet. Dies wird in den weiteren Kapiteln ausführlich erläutert. Am Anfang sollen einige einfache Beispiele stehen:
Eine Liste für eine Sammlung von Elementen, die in einer Struktur von Daten abgelegt wurden:
Sie haben fünf Finger (Elemente) an einer Hand (Liste).
Zehn Häuser (Elemente) stehen entlang einer Straße (Liste).
Ein Number Sequence-Block definiert eine Liste von Zahlen mithilfe der Eingaben start, amount und step. Mithilfe dieser Blöcke wurden zwei separate Listen mit je zehn Zahlen – 100–109 und 0–9 erstellt.
Mithilfe des Blocks List.GetItemAtIndex wird das Element an einer bestimmten Indexposition ausgewählt. Wenn Sie 0 wählen, wird das erste Element in der Liste (in diesem Fall 100) abgerufen.
In der zweiten Liste erhalten Sie mit demselben Verfahren den Wert 0, das erste Element in der Liste.
Als Nächstes führen Sie die beiden Listen mithilfe eines List.Create-Blocks zu einer zusammen. Mit diesem Block wird eine Liste von Listen erstellt. Dies verändert die Struktur der Daten.
Wenn Sie List.GetItemAtIndex erneut mit dem Index 0 verwenden, erhalten Sie die erste der in der übergeordneten Liste enthaltenen Listen. Dieses Beispiel verdeutlicht, wie Listen behandelt werden: Sie gelten – anders als in anderen Skriptsprachen – als Objekte. Listenbearbeitung und Datenstruktur werden in den später folgenden Kapiteln genauer beschrieben.
Als wichtigstes Prinzip zum Verständnis der Datenhierarchie in Dynamo gilt: Innerhalb der Datenstruktur gelten Listen als Elemente. In anderen Worten: In Dynamo kommt ein hierarchisch von oben nach unten geordneter Prozess für Datenstrukturen zum Einsatz. Was bedeutet das? Das folgende Beispiel soll dies verdeutlichen:
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
In diesem ersten Beispiel erstellen Sie zur Demonstration der in diesem Abschnitt behandelten Geometriehierarchie einen Zylinder und geben seine Wandstärke an.
1. Fügen Sie Point.ByCoordinates hinzu: Nachdem Sie diesen Block im Ansichtsbereich hinzugefügt haben, wird ein Punkt am Ursprung des Rasters in der Dynamo-Vorschau angezeigt. Die Vorgabewerte der Eingaben für x, y und z sind 0.0, wodurch ein Punkt an dieser Position definiert wird.
2. Plane.ByOriginNormal: Die nächste Stufe in der Geometriehierarchie ist eine Ebene. Es gibt mehrere Möglichkeiten für die Konstruktion einer Ebene: Hier werden ein Ursprung und eine Normale als Eingaben verwendet. Der Ursprung ist der Punkt, den Sie mithilfe des Blocks im vorigen Schritt erstellt haben.
Vector.ZAxis: Dies ist ein Vektor mit Einheiten in z-Richtung. Hier sind keine Eingaben, sondern nur ein Vektor mit dem Wert [0,0,1] vorhanden. Dieser wird für die normal-Eingabe des Plane.ByOriginNormal-Blocks verwendet. In der Dynamo-Vorschau wird daraufhin eine rechteckige Ebene angezeigt.
3. Circle.ByPlaneRadius: Eine Stufe höher in der Hierarchie erstellen Sie aus der Ebene, die Sie im letzten Schritt erstellt haben, eine Kurve. Nachdem Sie den Block verbunden haben, erhalten Sie einen Kreis um den Ursprungspunkt. Als Radius ist in diesem Block der Wert 1 vorgegeben.
4. Curve.Extrude: In diesem Schritt wandeln Sie dieses Objekt in einen 3D-Körper um. Dieser Block erstellt durch Extrusion eine Oberfläche aus einer Kurve. Der vorgegebene Abstand im Block beträgt 1 und im Ansichtsfenster ist jetzt ein Zylinder zu sehen.
5. Surface.Thicken: Mit diesem Block erhalten Sie einen geschlossenen Körper, indem die Oberfläche um den angegebenen Wert versetzt und die entstehende Form geschlossen wird. Der Vorgabewert für die Verdickung ist 1. Im Ansichtsfenster wird ein Zylinder mit der entsprechenden Wandstärke angezeigt.
6. Number Slider: Anstatt die Vorgabewerte für alle diese Eingaben zu verwenden, können Sie dem Modell auch Funktionen zur parametrischen Steuerung hinzufügen.
Domänenbearbeitung: Nachdem Sie den Number-Slider im Ansichtsbereich hinzugefügt haben, klicken Sie auf die Pfeilspitze oben links, um die Domänenoptionen anzuzeigen.
Min/Max/Step: Ändern Sie die Werte für min, max und step in 0,2 und 0.01. Mit diesen Angaben steuern Sie die Gesamtgröße der Geometrie.
7. Number Slider-Blöcke: Erstellen Sie mehrere Kopien dieses Number Slider-Blocks (indem Sie ihn auswählen und anschließend zuerst Strg+C und dann Strg+V drücken), bis für alle Eingaben anstelle der bisherigen Vorgaben nun Verbindungen zu den Number Sliders verwendet werden. Manche Werte für diese Schieberegler müssen größer als Null sein, damit die Definition verwendbar ist. So wird beispielsweise eine Tiefe für die Extrusion benötigt, damit eine Oberfläche entsteht, die verdickt werden kann.
8. Sie haben jetzt mithilfe dieser Regler einen parametrischen Zylinder mit Angabe einer Wandstärke erstellt. Experimentieren Sie mit einigen dieser Parameter und beobachten Sie die dynamische Veränderung der Geometrie im Dynamo-Ansichtsfenster.
Number Sliders-Blöcke: In einem weiteren Schritt wurden etliche weitere Number Sliders im Ansichtsbereich hinzugefügt und die Benutzeroberfläche des neu erstellten Werkzeugs muss übersichtlicher gestaltet werden. Klicken Sie mit der rechten Maustaste nacheinander auf die einzelnen Schieberegler, wählen Sie Umbenennen und ändern Sie den Namen jedes Schiebereglers in den Namen des dazugehörigen Parameters (Dicke, Radius, Höhe usw.).
9. Zum jetzigen Zeitpunkt haben Sie einen perfekten verdickten Zylinder erstellt. Dies ist jedoch nur ein einzelnes Objekt. Im nächsten Schritt wird gezeigt, wie Sie ein Array von Zylindern erstellen, die dynamisch miteinander verbunden bleiben. Zu diesem Zweck arbeiten Sie nicht mit einem einzelnen Element, sondern erstellen eine Liste von Zylindern.
Addition (+): Neben dem eben erstellten Zylinder soll eine Reihe weiterer Zylinder hinzugefügt werden. Um einen Zylinder direkt neben dem vorhandenen hinzuzufügen, müssen Sie sowohl dessen Radius als auch die Stärke seiner Wand berücksichtigen. Diesen Wert erhalten Sie durch Addition der Werte aus den beiden Schiebereglern.
10. Dieser Schritt ist etwas komplexer und wird daher im Einzelnen erläutert: Erstellt werden soll eine Liste mit Zahlen, die die Positionen der einzelnen Zylinder in einer Reihe definieren.
a. Multiplikation: Als Erstes müssen Sie den Wert aus dem vorigen Schritt mit 2 multiplizieren. Der Wert aus dem vorherigen Schritt gibt den Radius an, der Zylinder muss jedoch um den vollständigen Durchmesser verschoben werden.
b. Number Sequence: Mithilfe dieses Blocks erstellen Sie ein Array von Zahlen. Die erste Eingabe ist der Wert des multiplication-Blocks aus dem vorigen Schritt in den step-Wert. Als start-Wert können Sie 0.0 festlegen. Verwenden Sie hierfür einen number-Block.
c. Integer Slider: Verbinden Sie für den amount-Wert einen Integer-Schieber. Diese Funktion definiert, wie viele Zylinder erstellt werden.
d. Ausgabe: Diese Liste zeigt den Abstand, um den die einzelnen Zylinder im Array versetzt werden. Sie wird parametrisch durch die ursprünglichen Schieberegler gesteuert.
11. Dieser Schritt ist einfach: Verbinden Sie die im letzten Schritt erstellte Sequenz mit der x-Eingabe des ursprünglichen Point.ByCoordinates. Dies ersetzt den Schieberegler pointX, den Sie löschen können. Im Ansichtsfenster wird jetzt ein Array von Zylindern angezeigt (achten Sie darauf, dass im Integer Slider ein Wert größer als Null angegeben ist).
12. Die Kette der Zylinder ist weiterhin dynamisch mit allen Schiebereglern verknüpft. Experimentieren Sie mit den Schiebereglern, und beobachten Sie, wie die Definition aktualisiert wird.
Der Datentyp Farbe eignet sich ausgezeichnet zum Erstellen beeindruckender Präsentationen sowie zur Darstellung von Unterschieden in der Ausgabe Ihres Grafikprogramms. Bei der Arbeit mit abstrakten Daten und veränderlichen Zahlen ist es zuweilen schwierig, zu erkennen, was sich in welchem Umfang verändert. Dies ist ein nützlicher Anwendungsbereich für Farben.
Farben werden in Dynamo mithilfe von ARGB-Eingaben erstellt. Dies entspricht den Angaben Alpha, Rot, Grün und Blau. Der Alpha-Kanal gibt die Transparenz der Farbe an, während die drei anderen Angaben als Primärfarben zur Darstellung des gesamten Farbspektrums verwendet werden.
Symbol | Name (Syntax) | Eingaben | Ausgaben |
---|---|---|---|
Mithilfe der Farben in der Tabelle unten werden die Eigenschaften zum Definieren von Farben abgefragt: Alpha, Rot, Grün und Blau. Beachten Sie, dass der Block Color.Components alle vier unterschiedlichen Ausgaben bereitstellt. Diesem Block ist daher für die Abfrage der Eigenschaften einer Farbe der Vorzug zu geben.
Symbol | Name (Syntax) | Eingaben | Ausgaben |
---|---|---|---|
Die Farben in der Tabelle unten entsprechen dem HSB-Farbraum. Die Interpretation einer anhand von Farbton, Sättigung und Helligkeit definierten Farbe mag intuitiver scheinen: Welche Farbe ist gemeint? Wie intensiv soll sie sein? Wie hell oder dunkel soll die Farbe sein? Dies ist die Differenzierung nach Farbton, Sättigung und Helligkeit.
Symbol | Name (Syntax) | Eingaben | Ausgaben |
---|---|---|---|
Der Farbbereich ist dem Remap Range-Block aus der Übung in #part-ii-from-logic-to-geometry ähnlich: Eine Liste von Zahlen wird in einer anderen Domäne neu zugeordnet. Allerdings wird sie nicht einer number-Domäne, sondern anhand eingegebener Zahlenwerte zwischen 0 und 1 einem Farbverlauf zugeordnet.
Der derzeit verwendete Block funktioniert problemlos, seine Funktionsweise ist jedoch anfangs möglicherweise sehr ungewohnt. Die beste Möglichkeit, mit dem Farbverlauf vertraut zu werden, besteht darin, ihn in der Praxis auszuprobieren. Die folgende kurze Übung zeigt, wie Sie einen Farbverlauf mit Ausgabe der Farben anhand von Zahlen erstellen können.
Definieren Sie drei Farben: Definieren Sie mithilfe eines Code Block-Blocks Rot, Grün und Blau, indem Sie die jeweiligen Kombinationen von 0 und 255 verbinden.
Liste erstellen: Führen Sie die drei Farben zu einer Liste zusammen.
Definieren Sie Indizes: Erstellen Sie eine Liste zum Definieren der Griffpositionen für jede Farbe (von 0 bis 1). Beachten Sie, dass für Grün der Wert 0.75 festgelegt wurde. Dadurch wird die Farbe Grün an der Position bei 3/4 der Strecke des horizontalen Verlaufs im Schieberegler für den Farbbereich platziert.
Code Block: Geben Sie Werte (zwischen 0 und 1) zum Versetzen der Farben ein.
Der Display.ByGeometry-Block ermöglicht die farbige Darstellung von Geometrie im Ansichtsfenster. Dies ist hilfreich zur Unterscheidung verschiedenartiger Geometrie, zur Verdeutlichung eines parametrischen Konzepts oder zum Definieren einer Analyselegende für die Simulation. Die Eingaben sind einfach: geometry und color. Um einen Farbverlauf wie in der Abbildung oben gezeigt zu erstellen, wird die color-Eingabe mit dem Color Range-Block verbunden.
Der Display.BySurfaceColors-Block ermöglicht die Zuordnung von Daten auf einer Oberfläche mithilfe von Farben. Mithilfe dieser Funktion können Sie durch diskrete Auswertung gewonnene Daten, etwa zu Sonneneinstrahlung, Energie und Entfernung, überzeugend veranschaulichen. Die Anwendung von Farben auf eine Oberfläche in Dynamo ist der Anwendung von Texturen auf Materialien in anderen CAD-Umgebungen ähnlich. Die folgende kurze Übung demonstriert die Verwendung dieses Werkzeugs.
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
In dieser Übung soll Farbe zusammen mit Geometrie parametrisch gesteuert werden. Die Geometrie ist eine einfache, wie unten gezeigt in einem Code Block definierte Schraubenform. Dies ist ein schnelles und einfaches Verfahren zum Erstellen parametrischer Funktionen. Da das Thema dieses Abschnitts nicht Geometrie, sondern Farbe ist, wird die Helix auf effiziente Weise mithilfe des Codeblocks erstellt, ohne dass zu viel Platz im Ansichtsbereich beansprucht wird. Codeblöcke werden in den weiteren Kapiteln dieses Handbuchs bei der Behandlung komplexerer Themen häufiger verwendet.
Code Block: Definieren Sie die beiden Codeblöcke mit den oben gezeigten Formeln. Dies ist eine schnelle parametrische Methode zum Erstellen einer Helix.
Point.ByCoordinates: Verbinden Sie die drei Ausgaben des Codeblocks mit den Koordinaten dieses Blocks.
Daraufhin wird ein Array aus Punkten angezeigt, das eine Helixform bildet. Im nächsten Schritt erstellen Sie zur Visualisierung der Helix eine Kurve durch diese Punkte.
PolyCurve.ByPoints: Verbinden Sie die Point.ByCoordinates-Ausgabe mit der points-Eingabe für den Block. Sie erhalten eine schraubenförmige Kurve.
Curve.PointAtParameter: Verbinden Sie die PolyCurve.ByPoints-Ausgabe mit der curve-Eingabe. Mithilfe dieses Schritts erstellen Sie einen geometrischen Attraktorpunkt, der entlang der Kurve verschoben werden kann. Da die Kurve einen Punkt an einer Parameterposition auswertet, müssen Sie einen param-Wert zwischen 0 und 1 eingeben.
Number Slider: Nachdem Sie diesen Block im Ansichtsbereich hinzugefügt haben, ändern Sie seinen min-Wert in 0.0, den max-Wert in 1.0 und den step-Wert in .01. Verbinden Sie die Ausgabe des Schiebereglers mit der param-Eingabe für Curve.PointAtParameter. Daraufhin wird auf der Helix ein Punkt angezeigt, dessen Position durch die Prozentangabe im Schieberegler definiert wird (0 am Startpunkt, 1 am Endpunkt).
Nachdem Sie den Referenzpunkt erstellt haben, vergleichen Sie die Abstände vom Referenzpunkt zu den Originalpunkten, durch die die Helix definiert ist. Der Wert für diesen Abstand bestimmt sowohl die Geometrie als auch die Farbe.
Geometry.DistanceTo: Verbinden Sie die Ausgabe von Curve.PointAtParameter mit der other-Eingabe. Verbinden Sie Point.ByCoordinates mit der geometry-Eingabe.
Watch: Die Ausgabe zeigt als Ergebnis eine Liste der Abstände von jedem der Punkte auf der Helix zum Referenzpunkt.
Im nächsten Schritt soll die Liste der Abstände zwischen den Helixpunkten und dem Referenzpunkt zur Steuerung von Parametern genutzt werden. Mithilfe dieser Werte werden die Radien einer Reihe von Kugeln entlang der Kurve definiert. Damit die Kugeln die richtige Größe annehmen, müssen Sie die Werte der Abstände mithilfe von remap neu zuordnen.
Math.RemapRange: Verbinden Sie die Ausgabe von Geometry.DistanceTo mit der numbers-Eingabe.
Code Block: Verbinden Sie einen Codeblock mit dem Wert 0.01 mit der newMin-Eingabe und einen zweiten Codeblock mit dem Wert 1 mit der newMax-Eingabe.
Watch: Verbinden Sie die Ausgabe von Math.RemapRange mit einem solchen Block und die Ausgabe von Geometry.DistanceTo mit einem zweiten. Vergleichen Sie die Ergebnisse.
Mit diesem Schritt haben Sie die Liste der Abstände auf einen kleineren Bereich reduziert. Sie können die Werte für newMin und newMax wie gewünscht bearbeiten. Die Werte werden neu zugeordnet, wobei ihre proportionale Verteilung im Bereich erhalten bleibt.
Sphere.ByCenterPointRadius: Verbinden Sie die Ausgabe von Math.RemapRange mit der radius-Eingabe und die ursprüngliche Ausgabe von Point.ByCoordinates mit der centerPoint-Eingabe.
Ändern Sie den Wert im Schieberegler und beobachten Sie, wie die Größe der Kugeln aktualisiert wird. Damit haben Sie eine parametrische Schablone erstellt.
Die Größe der Kugeln zeigt das parametrische Array, das durch den Referenzpunkt entlang der Kurve definiert wird. Als Nächstes soll die Farbe der Kugeln nach demselben Prinzip wie ihr Radius bestimmt werden.
Color Range: Fügen Sie diesen Block im Ansichtsbereich hinzu. Wenn Sie den Mauszeiger auf die value-Eingabe setzen, fällt auf, dass die angeforderten Zahlenwerte zwischen 0 und 1 liegen. Sie müssen die Zahlen aus der Geometry.DistanceTo-Ausgabe neu zuordnen, damit sie mit diesem Bereich kompatibel sind.
Sphere.ByCenterPointRadius: Deaktivieren Sie vorübergehend die Vorschau für diesen Block (Rechtsklick > Vorschau).
Math.RemapRange: Dieser Vorgang sollte Ihnen bekannt vorkommen. Verbinden Sie die Ausgabe von Geometry.DistanceTo mit der numbers-Eingabe.
Code Block: Erstellen Sie ähnlich wie in einem der vorigen Schritte den Wert 0 für die newMin-Eingabe und den Wert 1 für die newMax-Eingabe. In diesem Fall können Sie zwei Ausgaben aus demselben Codeblock erstellen.
Color Range: Verbinden Sie die Math.RemapRange-Ausgabe mit der value-Eingabe.
Color.ByARGB: Mithilfe dieses Blocks erstellen Sie zwei Farben. Dieser Prozess wirkt eventuell etwas umständlich, unterscheidet sich jedoch nicht von den RGB-Farben in anderen Programmen. Er wird hier lediglich mithilfe visueller Programmierung durchgeführt.
Code Block: Erstellen Sie die beiden Werte 0 und 255. Verbinden Sie die beiden Ausgaben mit den Eingaben der beiden Color.ByARGB-Blöcke wie in der Abbildung oben gezeigt (oder definieren Sie ganz nach Wunsch Ihre eigenen Farben).
Color Range: Für die colors-Eingabe ist eine Liste von Farben erforderlich. Diese Liste müssen Sie aus den beiden im vorigen Schritt erstellten Farben erstellen.
List.Create: Führen Sie die beiden Farben zu einer Liste zusammen. Verbinden Sie die Ausgabe mit der colors-Eingabe von Color Range.
Display.ByGeometryColor: Verbinden Sie Sphere.ByCenterPointRadius mit der geometry-Eingabe und Color Range mit der color-Eingabe. Damit erhalten Sie einen fließenden Farbübergang über die Länge der Kurve.
Wenn Sie den Wert im Number Slider aus einem früheren Schritt in der Definition ändern, werden die Farben und Größen aktualisiert. Zwischen den Farben und den Radien besteht in diesem Fall ein direkter Zusammenhang: Damit haben Sie eine visuelle Verknüpfung zweier Parameter erstellt.
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
Als Erstes müssen Sie eine Oberfläche erstellen (oder referenzieren), die als Eingabe für den Display.BySurfaceColors-Block verwendet werden soll. In diesem Beispiel wird dies durch Erhebung zwischen einer Sinus- und einer Kosinuskurve erreicht.
Die oben gezeigte Gruppe von Blöcken erstellt Punkte entlang der z-Achse und verschiebt sie anschließend unter Verwendung von Sinus- und Kosinusfunktionen. Aus den beiden Punktlisten werden anschließend Nurbs-Kurven erstellt.
Surface.ByLoft: Dieser Block erstellt eine interpolierte Oberfläche zwischen den Nurbs-Kurven in der Kurvenliste.
File Path: Wählen Sie die Bilddatei, aus der Samples für die in den folgenden Schritten zu verwendenden Pixeldaten entnommen werden sollen.
Konvertieren Sie mithilfe von File.FromPath den Dateipfad in eine Datei und übergeben Sie diese an Image.ReadFromFile, sodass ein Bild für das Sampling ausgegeben wird.
Image.Pixels: Geben Sie ein Bild ein und legen Sie die Sample-Werte für die x- und y-Richtung des Bilds fest.
Schieberegler: Verwenden Sie diese zum Angeben der Sample-Werte für Image.Pixels.
Display.BySurfaceColors: Dieser Block ordnet das Array der Farbwerte den Positionen auf der Oberfläche in x- und y-Richtung zu.
Detailansicht: Vorschau der ausgegebenen Oberfläche mit der Auflösung 400 x 300 Samples
Zahlen stellen die einfachste Form von Daten dar und sind am einfachsten durch mathematische Operationen zu verknüpfen. Von einfachen Operatoren etwa zur Division über trigonometrische Funktionen bis hin zu komplexen Formeln: Mathematische Operationen eignen sich ausgezeichnet zur Analyse von Zahlenverhältnissen und -mustern.
Operatoren sind Komponenten für algebraische Funktionen, die zwei Eingabewerte benötigen, um einen Ausgabewert zu erhalten (etwa bei der Addition, Subtraktion, Multiplikation, Division usw.). Sie finden die Operatoren unter Operators > Actions.
Symbol | Name (Syntax) | Eingaben | Ausgaben |
---|---|---|---|
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
Kombinieren Sie Operatoren und Variablen, um mithilfe von Formeln eine komplexere Beziehung zu bilden. Verwenden Sie die Schieberegler, um eine Formel zu erstellen, die mit Eingabeparametern gesteuert werden kann.
1. Wir erstellen eine Zahlenfolge, die für die Angabe "t" in der parametrischen Gleichung steht. Wir benötigen daher eine Liste mit genügend Werten zum Definieren einer Spirale.
Number Sequence: Definieren Sie eine Zahlenfolge mithilfe von drei Eingaben: start, amount und step.
2. Mit dem oben beschriebenen Schritt haben Sie eine Liste von Zahlen erstellt, die die parametrische Domäne definieren. Als Nächstes erstellen Sie eine Gruppe von Blöcken, die die Goldene Spirale-Gleichung darstellen.
Die Goldene Spirale ist durch die folgende Gleichungen definiert:
Die folgende Abbildung zeigt die goldene Spirale in visueller Programmierung. Beachten Sie bei der Betrachtung dieser Blockgruppe die Entsprechungen zwischen dem visuellen Programm und der schriftlichen Gleichung.
a. Number Slider: Fügen Sie im Ansichtsbereich zwei Number Sliders ein. Diese Schieberegler steuern die Variablen a und b in der parametrischen Gleichung. Sie stehen für einstellbare Konstanten bzw. Parameter, die Sie anpassen können, um das gewünschte Ergebnis zu erhalten.
b. Multiplication (*): Der Block für die Multiplikation wird mit einem Sternchen dargestellt. Er kommt hier mehrmals zum Einsatz, um Variablen miteinander zu multiplizieren.
c. Math.RadiansToDegrees: Die Werte für "t" müssen in Grad umgewandelt werden, damit sie in den trigonometrischen Funktionen verwendet werden können. Dynamo verwendet per Vorgabe Grad zur Auswertung dieser Funktionen.
d. Math.Pow: Als Funktion von "t" und der Zahl "e" erstellt dieser Block die Fibonacci-Folge.
e. Math.Cos und Math.Sin: Diese beiden trigonometrischen Funktionen differenzieren die x- und y-Koordinaten der einzelnen parametrischen Punkte.
f. Watch: Als Ausgabe erhalten Sie zwei Listen mit Werten für die x- und y-Koordinaten der Punkte, aus denen die Spirale erstellt wird.
Die Gruppe von Blöcken aus dem letzten Schritt funktioniert einwandfrei, erfordert jedoch erheblichen Aufwand. Einen effizienteren Arbeitsablauf finden Sie unter DesignScript. Dort wird beschrieben, wie Sie eine Reihe von Dynamo-Ausdrücken in ein und demselben Block definieren können. In den nächsten Schritten zeichnen Sie mithilfe der parametrischen Gleichung die Fibonacci-Spirale.
Point.ByCoordinates: Verbinden Sie den oberen Multiplikationsblock mit der x-Eingabe und den unteren mit der y-Eingabe. Dadurch wird auf dem Bildschirm eine parametrische Spirale aus Punkten angezeigt.
Polycurve.ByPoints: Verbinden Sie Point.ByCoordinates aus dem vorigen Schritt mit points. Für connectLastToFirst wird keine Eingabe benötigt, da Sie keine geschlossene Kurve erstellen. Dadurch wird eine durch die im vorigen Schritt erstellten Punkte verlaufende Spirale erstellt.
Damit haben Sie die Fibonacci-Spirale erstellt. Dies entwickeln Sie in zwei weiteren Übungen weiter, die hier als "Nautilus" und "Sonnenblume" bezeichnet werden. Dabei handelt es sich um Abstraktionen aus Systemen, die in der Natur vorkommen und gute Beispiele für zwei verschiedene Verwendungsweisen der Fibonacci-Spirale darstellen.
Circle.ByCenterPointRadius: Verwenden Sie hier einen Circle-Block mit denselben Eingaben wie im vorigen Schritt. Als Radius ist der Wert 1.0 vorgegeben, d. h., Sie sehen sofort die ausgegebenen Kreise. Die zunehmende Entfernung der Punkte vom Ursprung ist sofort ersichtlich.
Number Sequence: Dies ist das Original-Array für "t". Die Verbindung mit dem Radiuswert Circle.ByCenterPointRadius bewirkt, dass die Mittelpunkte der Kreise sich nach wie vor vom Ursprung entfernen, wobei jedoch auch ihr Radius zunimmt. Sie erhalten eine recht originelle Fibonacci-Grafik.
Versuchen Sie, dies in 3D darzustellen!
Muster: Nachdem Sie eine Nautilusmuschel aus Kreisen erstellt haben, betrachten Sie jetzt parametrische Raster. Durch einfaches Drehen der Fibonacci-Spirale erstellen Sie ein Fibonacci-Raster. Das Ergebnis ist anhand des Wachstums vom Sonnenblumensamen modelliert.
Beginnen Sie mit demselben Schritt wie in der vorigen Übung, d. h., indem Sie mithilfe des Point.ByCoordinates-Blocks ein spiralförmiges Array aus Punkten erstellen.
![](../images/5-3/2/math-part IV-01.jpg)
Als Nächstes führen Sie diese kleinen Schritte aus, um eine Reihe von Spiralen mit verschiedenen Drehungen zu erstellen.
a. Geometry.Rotate: Es stehen mehrere Optionen für Geometry.Rotate zur Verfügung. Achten Sie darauf, den Block mit den Eingaben geometry,basePlane und degrees zu wählen. Verbinden Sie Point.ByCoordinates mit der geometry-Eingabe. Klicken Sie mit der rechten Maustaste auf diesen Block, und vergewissern Sie sich, dass die Vergitterung auf Kartesisches Produkt festgelegt ist.
b. Plane.XY: Verbinden Sie dies mit der basePlane-Eingabe. Das Zentrum der Drehung ist der Ursprung, d. h. derselbe Punkt wie die Basis der Spirale.
c. Number Range: Sie benötigen mehrere Drehungen für die degree-Eingabe. Dies erreichen Sie schnell mit der Komponente für den Zahlenbereich. Verbinden Sie diese mit der degrees-Eingabe.
d. Number: Fügen Sie im Ansichtsbereich drei Zahlenblöcke übereinander ein, um den Zahlenbereich zu definieren. Weisen Sie diesen von oben nach unten die Werte 0.0,360.0, und 120.0 zu. Diese Werte steuern die Drehung der Spirale. Beachten Sie die Ergebnisse der Ausgabe aus dem Number Range-Block, nachdem Sie die drei Zahlenblöcke mit ihm verbunden haben.
Die Ausgabe nimmt eine gewisse Ähnlichkeit mit einem Wirbel an. Passen Sie jetzt einige der für Number Range verwendeten Parameter an und beobachten Sie, wie sich die Ergebnisse verändern.
Ändern Sie die Schrittgröße für den Number Range-Block von 120.0 in 36.0. Damit erhalten Sie mehr Drehungen und daher ein dichteres Raster.
Ändern Sie die Schrittgröße für den Number Range-Block von 36.0 in 3.6. Dadurch erhalten Sie ein wesentlich dichteres Raster und die Richtung der Spiralen ist nicht mehr erkennbar. Damit haben Sie ein Sonnenblumenmuster erstellt.
Logik, genauer Bedingungslogik ermöglicht die Angabe einer Aktion oder einer Gruppe von Aktionen unter Verwendung einer Prüfung. Die Auswertung der Prüfung ergibt einen booleschen Wert für True
oder False
, der zur Steuerung des Programmablaufs verwendet werden kann.
Numerische Variablen können für eine Vielzahl unterschiedlicher Zahlen stehen. Boolesche Variablen hingegen können nur zwei Werte annehmen, die als True oder False, Ja oder Nein, 1 oder 0 wiedergegeben werden. Booleschen Operationen werden wegen ihrer begrenzten Möglichkeiten nur selten zum Durchführen von Berechnungen verwendet.
Die "If"-Anweisung ist ein wichtiges Konzept in der Programmierung: "Wenn dies zutrifft (True), dann geschieht das, andernfalls geschieht etwas anderes. Die aus der Anweisung resultierende Aktion wird durch einen booleschen Wert gesteuert. In Dynamo stehen mehrere Möglichkeiten zum Definieren von If-Anweisungen zur Verfügung:
Symbol | Name (Syntax) | Eingaben | Ausgaben |
---|
Die folgenden kurzen Beispiele zeigen die Funktionsweise dieser drei Blöcke in der If-Bedingungsanweisung.
In dieser Abbildung wurde für Boolean die Option true eingestellt, d. h., das Ergebnis ist die Zeichenfolge: "this is the result if true". Die drei möglichen Blöcke, mit deren Hilfe die If-Anweisung erstellt werden kann, funktionieren hier auf dieselbe Weise.
Auch in diesem Fall funktionieren die Blöcke auf dieselbe Weise. Wenn Sie den Boolean-Wert in False ändern, wird als Ergebnis die Zahl Pi ausgegeben, wie in der ursprünglichen If-Anweisung festgelegt.
Laden Sie die Beispieldatei herunter, indem Sie auf den folgenden Link klicken.
Eine vollständige Liste der Beispieldateien finden Sie im Anhang.
In diesem Beispiel teilen Sie eine Liste von Zahlen in eine Liste mit geraden und eine Liste ungeraden Zahlen auf.
a. Range: Definieren Sie im Ansichtsbereich einen Zahlenbereich.
b. Number: Fügen Sie im Ansichtsbereich drei Number-Blöcke ein. Legen Sie in diesen Blöcken die folgenden Werte fest: 0.0 für start, 10.0 für end und 1.0 für step.
c. Ausgabe: Die Ausgabe zeigt eine Liste mit 11 Zahlen von 0-10.
d. Modulo (%): Verbinden Sie Number Range mit x und 2.0 mit y. Mit dieser Funktion wird für jede Zahl aus der Liste der Rest bei Division durch 2 berechnet. Die Ausgabe für diese Liste ist eine Liste, die abwechselnd die Werte 0 und 1 enthält.
e. Gleichheitsprüfung (==): Fügen Sie im Ansichtsbereich einen Block für die Gleichheitsprüfung hinzu. Verbinden Sie die Ausgabe des Modulo-Blocks mit der x-Eingabe und 0.0 mit der y-Eingabe.
f. Watch: Die Gleichheitsprüfung gibt eine Liste aus, die abwechselnd die Werte true und false enthält. Mithilfe dieser Werte werden die Einträge aus der Zahlenliste eingeordnet. Dabei steht 0 (bzw. true) für gerade und (1 bzw. false) für ungerade Zahlen.
g. List.FilterByBoolMask: Dieser Block filtert die Werte anhand der eingegebenen Booleschen Operation in zwei Listen. Verbinden Sie den ursprünglichen Number Range mit der list-Eingabe und die Ausgabe von Equality Test mit der mask-Eingabe. Die in-Ausgabe enthält die true-Werte, die out-Ausgabe die false-Werte.
h. Watch: Als Ergebnis erhalten Sie eine Liste mit geraden und eine Liste mit ungeraden Zahlen. Damit haben Sie mithilfe logischer Operatoren Listen anhand eines Musters aufgeteilt.
In diesem Schritt wenden Sie die in der ersten Übung erstellte Logik auf einen Modellierungsvorgang an.
2. Beginnen Sie mit den Blöcken aus der letzten Übung. Die einzigen Ausnahmen (zusätzlich zum Ändern des Formats) sind:
a. Verwenden Sie einen Sequence-Block mit diesen Eingabewerten.
b. Die in-Listeneingabe für List.FilterByBoolMask wurde entfernt. Diese Blöcke werden momentan nicht benötigt, kommen aber weiter unten in dieser Übung zum Einsatz.
3. Erstellen Sie zunächst eine separate Gruppe von Diagrammen, wie in der Abbildung oben gezeigt. Diese Gruppe von Blöcken stellt eine parametrische Gleichung zum Definieren einer Sinuskurve dar. Einige Hinweise:
a. Der erste Number Slider-Block repräsentiert die Frequenz der Welle. Er sollte einen Mindestwert von 1, einen Höchstwert von 4 und eine Schrittweite von 0.01 haben.
b. Der zweite Number Slider-Block repräsentiert die Amplitude der Welle. Er sollte einen Mindestwert von 0, einen Höchstwert von 1 und eine Schrittweite von 0.01 haben.
c. PolyCurve.ByPoints: Indem Sie das oben gezeigte Blockdiagramm kopieren, erhalten im Ansichtsfenster der Dynamo-Vorschau eine Sinuskurve.
Für die Eingaben gilt hier folgende Regel: Verwenden Sie Zahlenblöcke für statische und Schieberegler für veränderliche Eigenschaften. Der anfangs definierte ursprüngliche Zahlenbereich soll erhalten bleiben. Für die Sinuskurve, die hier erstellt werden soll, wird jedoch mehr Flexibilität benötigt. Mithilfe dieser Schieberegler können Sie die Frequenz und Amplitude der Kurve ändern.
4. Die Schritte dieser Definition werden hier nicht nacheinander beschrieben. Hier wird zunächst das Endergebnis gezeigt, um eine Vorstellung der fertigen Geometrie zu vermitteln. Die ersten beiden Schritte wurden separat durchgeführt und müssen jetzt zusammengeführt werden. Die Position der reißverschlussähnlichen Bauteile soll durch die zugrunde liegende Sinuskurve gesteuert werden, wobei mithilfe der True/False-Logik abwechselnd große und kleine Quader eingefügt werden.
a. Math.RemapRange: Erstellen Sie aus der in Schritt 02 erstellten Zahlenfolge eine neue Zahlenfolge, indem Sie den Bereich neu zuordnen. In Schritt 01 wurden Zahlen von 0 – 100 festgelegt. Diese Zahlen liegen zwischen 0 und 1, wie mithilfe der Eingaben newMin und newMax festgelegt.
5. Erstellen Sie einen Curve.PointAtParameter-Block, und verbinden Sie dann die Math.RemapRange-Ausgabe aus Schritt 04 als param-Eingabe.
Mithilfe dieses Schritts erstellen Sie Punkte entlang der Kurve. Die Zahlen mussten dem Bereich 0 bis 1 neu zugeordnet werden, da als Eingabe für param Werte in diesem Bereich verlangt werden. Der Wert 0 steht für den Startpunkt, der Wert 1 für die Endpunkte. Die Auswertung aller dazwischen liegenden Zahlen ergibt Werte im Bereich [0,1].
6. Verbinden Sie die Ausgabe von Curve.PointAtParameter mit List.FilterByBoolMask, um die Liste der ungeraden und geraden Indizes zu trennen.
a. List.FilterByBoolMask: Verbinden Sie Curve.PointAtParameter aus dem vorigen Schritt mit der list-Eingabe.
b. Watch: Die Watch-Blöcke für in und out zeigen, dass zwei Listen für gerade bzw. ungerade Indizes erstellt wurden. Diese Punkte sind auf dieselbe Weise entlang der Kurve angeordnet, wie im folgenden Schritt gezeigt.
7. Als Nächstes verwenden Sie das Ausgabeergebnis von List.FilterByBoolMask in Schritt 05, um Geometrien mit Größen entsprechend ihrer Indizes zu generieren.
Cuboid.ByLengths: Stellen Sie die in der Abbildung oben gezeigten Verbindungen wieder her, um eine reißverschlussähnliche Struktur entlang der Kurve zu erhalten. Sie erstellen hier einfache Quader, deren Größe jeweils durch ihren auf der Kurve liegenden Mittelpunkt definiert wird. Die Logik der Aufteilung in gerade und ungerade Werte wird damit im Modell deutlich.
a. Liste der Quader mit geraden Indizes.
b. Liste der Quader mit ungeraden Indizes.
Geschafft! Sie haben soeben einen Prozess zum Definieren der Geometriebemaßungen entsprechend der in dieser Übung dargestellten logischen Operation programmiert.
Symbol | Name/Syntax | Eingaben | Ausgaben |
---|---|---|---|
Object.IsNull
obj
bool
ARGB-Farbe (Color.ByARGB)
A, R, G, B
color
Alpha (Color.Alpha)
color
A
Rot (Color.Red)
color
R
Grün (Color.Green)
color
G
Blau (Color.Blue)
color
B
Komponenten (Color.Components)
color
A, R, G, B
Farbton (Color.Hue)
color
Hue
Sättigung (Color.Saturation)
color
Saturation
Helligkeit (Color.Brightness)
color
Brightness
Addieren (+)
var[]...[], var[]...[]
var[]...[]
Subtrahieren (-)
var[]...[], var[]...[]
var[]...[]
Multiplizieren (*)
var[]...[], var[]...[]
var[]...[]
Dividieren (/)
var[]...[], var[]...[]
var[]...[]
Wenn (If) | test, true, false | result |
Formel (IF(x,y,z)) | x, y, z | result |
Codeblock ((x?y:z);) | x? y, z | result |