Das Multidisplay
Die grafische Oberfläche des MODULAR besteht aus mehreren Ebenen: Die unterste Ebene stellt den Hintergrund des Ensembles dar und ist entweder einfarbig oder mit einer Hintergrund-Kachel belegt. Darüber liegt ein Multidisplay mit transparentem Hintergrund zur Darstellung der virtuellen Kabel. Die Hintergrundgrafiken der einzelnen Module überdecken das gesamte Display mit größtenteils transparenten Bildern, damit dieses niemals aktiviert wird. In der Abbildung ist der Hintergrund eines ADSR-Envelope-Generators dargestellt. Die graue Innenfläche ist im Panel transparent.
Multidisplay 1.gif
Multidisplay 2.gif
Oberste Ebene sind die Panelelemente zur Bedienung, wobei die Maus-Felder als immer aktive Elemente eine Sonderrolle einnehmen, da sie immer auf Maus-Bedienung reagieren und insofern noch über allen Bedienelementen liegen.
Das Multidisplay erhält wegen der oben erwähnten 4-Pixel-Rasterung eine Größe von 964×292 px in seiner kleinsten Ausdehnung. Es stellt für den MODULAR MINI 1 die Kabel eines Racks dar. Ein Rack umfasst dabei eine Reihe von hintereinander angeordneten Modulen.
Bei der Wahl der Größe des Racks und der Module habe ich zu beachten, dass sie sich lückenlos aneinander reihen bzw. an allen Rändern um zwei Pixel überlappen. Dies ergibt einen ansprechenden 3-D-Eindruck der Kanten. Das „Innere” der Module ist von der Pixelzahl immer durch zwölf teilbar, damit man keine Probleme bei der Anordnung von Modulen und Panelelementen bekommt, wie es helmsklamm in seiner obigen Post für Schriftzüge angedeutet hat. 12·4 Pixel ist auch der Abstand, den zum Beispiel die Drehregler haben.
Größere Modular-Synthesizer werden entsprechend durch weitere Racks angepasst. Alle Kabel haben eine Breite von zwei Pixeln und werden durch vier nebeneinander liegende Linien dargestellt. Die Farbe soll der Benutzer wählen können, um bestimmte Signalwege deutlich hervorzuheben.
Das Multidisplay stellt mit dem Parameter
Obj=-2 Linien dar. Das Multidisplay hat selbst ein eigenes Koordinatensystem, das seinen Ursprung (0|0) in der linken unteren Ecke besitzt. Das ist für mein vorgesehenes Koordinatensystem ungünstig, da meines seinen Ursprung oben links haben soll; das muss bei der Wertzuweisung von y1 und y2 berücksichtigt werden. Die Ausnutzung bis zum Rand des Displays ist nicht eindeutig, da die Linien-Endpunkte (x1|y1) und (x2|y2) nicht gleichwertig sind. Dies ist für die dargestellte Kabelverbindung allerdings von untergeordneter Bedeutung, da die Ein- und Ausgänge nicht auf dem Rand des Displays liegen. Das Multidisplay kann maximal 1024×1024 Pixel darstellen. Legt man mehrere Displays nebeneinander, um etwa größere Racks darzustellen, so muss man darauf achten, dass sie sich um 4 Pixel überlappen. Das Beispiel-Ensemble
multi-multidisplays.ens
veranschaulicht das Prinzip. Es liegen zwei (kleine) multidisplays nebeneinander, bzw. überlappen sich. Zur Unterscheidung habe ich hier den linken Hintergrund weiß, den andern grau gewählt. (siehe Abbildung oben rechts)
Normalerweise sind die Displays mit einem transparenten Hintergrundbild belegt. Klickt man jeweils auf eines der beiden Multidisplays, so erkennt man die Überlappung.
Stellt man sich die Multidisplays nun entsprechend groß vor, so kann man durch Kachelung entsprechend große Multidisplays schaffen. Interessant ist, dass es keinerlei Umrechnung bei der Parameterübergabe bedarf. Die Koordinaten der Linien-Endpunkte werden so übergeben, als ob es sich um ein Display handeln würde. Wer ein wenig mit den Knobs die Parameter ändert, wird erkennen, dass die Linie immer den richtigen Anschluss an das benachbarte Feld findet.
Die Benutzung bis zum Rand habe ich vermieden, da die Endpunkte auf dem Bildschirm nicht im selben Koordinatensystem liegen, sondern um ein Pixel versetzt sind. Wenn man die Properties beider Display so verändert, dass man auch auf dem Rand malen kann, dann ergeben sich auf den Rändern teilweise Auslöschungen (genau ein Pixel kann man damit zum Beispiel nicht darstellen). Daher müssen sich auch die beiden Displays überlappen. Ich habe die Ränder einfach vermieden und das Display größer gestaltet.
multidisplay 3.gif
Das Multidisplay ist im Moment für 500 Kabel eingerichtet (Number of Objects ). Das ist sehr großzügig, da ein Rack etwa maximal 120 Eingänge besitzt und damit auch nur 120 Kabel benötigt. Da jedes Kabel aus 4 Linien gezeichnet wird, ergibt sich die Zahl von 2000 Objekten. Bei einer Erweiterung des gesamten Systems muss diese Zahl entsprechend erhöht werden. Es gibt keine Beschränkungen in der Anzahl der Objekte. Die Hintergrundgrafik besteht nur aus einem transparenten Bild derselben Größe der Zeichenebene. Der größte bisher getestete Versuchsaufbau umfasste insgesamt 8 Racks mit etwa 1800·1200 px.