open_window — Öffnen eines Grafikfensters.
open_window( : : Row, Column, Width, Height, FatherWindow, Mode, Machine : WindowHandle)
open_window öffnet ein neues Fenster, das zur Ausgabe von
Grauwertdaten, Regionen, Grafik sowie für Textausgabe verwendet werden kann.
Alle Ausgaben (disp_region, disp_image, etc.) werden
auf dieses Fenster geleitet, wenn dieselbe logische Fensternummer
WindowHandle verwendet wird.
Der Hintergrund des erzeugten Fensters wird schwarz vorbesetzt
und es hat einen weißen Rand von 2 Pixel Breite
(siehe set_window_attr(::'border_width',<Breite>:)).
Einem Fenster werden bestimmte Parameter für die Aufbereitung der
auszugebenden Daten zugeordnet, die bei der eigentlichen Ausgabe
(z.B. mit disp_image oder disp_region)
berücksichtigt werden.
Diese Parameter werden aber nicht von der Ausgabeprozedur, sondern
von „Konfigurationsprozeduren“ festgelegt. Will man z.B. die Farbe
Rot für die Ausgabe von Regionen setzen, so muss vor dem Befehl
disp_region der Aufruf set_color(::WindowHandle,'red':)
erfolgen. Diese Parameter werden immer für das Fenster mit der logischen
Fensternummer WindowHandle gesetzt
und bleiben dem Fenster solange zugeordnet, bis sie überschrieben
werden.
Es stehen u.a. folgende Konfigurationsprozeduren zur Verfügung:
Regionen:
set_color, set_rgb, set_hsi,
set_gray,
set_shape, set_line_width, set_insert,
set_line_style, set_draw
Bildausschnitt:
set_part
Text:
set_font
Die aktuell gesetzten Werte können mit
Operatoren wie get_shape abgefragt werden.
Da einige Parameter durch die Hardware (Auflösung/Farben) bestimmt
werden, kann man mit
Operatoren wie query_color die aktuell verfügbaren Ressourcen
abfragen.
Der Ursprung des Koordinatensystems des Fensters liegt in der linken oberen
Ecke (Koordinaten: (0,0)). Nach unten nimmt der Zeilenindex zu
(maximal: Bildhöhe - 1), nach rechts steigt der Spaltenindex
(maximal: Bildbreite - 1) an. Es ist zu beachten, dass der Wertebereich
des Koordinatensystems unabhängig von der Fenstergröße ist. Er wird
nur durch das Bildformat (siehe reset_obj_db) festgelegt.
Der Parameter Machine gibt den Namen des Rechners an,
auf dem das Fenster geöffnet werden soll. Im Falle von X-Window wird
bei TCP-IP nur der Name, bei DEC-Net wird noch ein Doppelpunkt hinter
den Namen gesetzt. Der „Server“ bzw. der „Screen“ wird nicht
mit angegeben.
Übergibt man den leeren String, so wird die Environmentvariable
DISPLAY zur Festlegung des Zielrechners verwendet. Hierbei wird der
Name in der üblichen Syntax <Host>:0.0 angegeben.
Mit dem Parameter FatherWindow kann für die Fenstertypen
'WIN32-Window', 'X-Window' und 'Cocoa'
das Vaterfenster für das zu
öffnende Fenster angegeben werden. Ist die Kontrolle 'father' mittels
set_check eingeschaltet, so muss FatherWindow ein
HALCON-Fenster sein, andernfalls
(set_check(::'~father':)
) kann es auch
ein Betriebssystem-Fenster sein. Wird für FatherWindow der Wert 0
oder 'root' übergeben, so ist der Desktop (Windows) bzw. das Root-Fenster
(unixartige Systeme) das Vaterfenster. In diesem Fall ist die Einstellung
der Kontrolle 'father' mittels set_check nicht relevant. Der
Aufrufer muss sicherstellen, dass FatherWindow ein gültiges
Fensterhandle ist und dass dieses nicht zerstört wird, solange das
eingebettete HALCON Fenster verwendet wird.
Für die Parameter Width und Height kann der Wert
„-1“ als Größe verwendet werden. Dies bedeutet, dass der entsprechende
Wert automatisch bestimmt werden soll. Dies ist insbesondere dann von
Bedeutung, wenn das Pixelverhältnis nicht gleich 1.0 ist (siehe
set_system). Wird einer der beiden Parameter als „-1“
angegeben, so wird er durch die Größe bestimmt, die sich aus dem
Pixelverhältnis ergibt. Werden beide Parameter mit „-1“ festgelegt,
so werden sie auf das maximale Bildformat gesetzt (weitergehende
Informationen zum maximalen Bildformat finden sich in der Beschreibung
von get_system unter „width“ und „height“).
Die Position und Größe des Fensters kann sich im Laufe des Programms
ändern. Dies kann zum einen mit set_window_extents erfolgen,
aber auch durch externe Eingriffe (Window-Manager) hervorgerufen
werden. Für den zweiten Fall ist der Operator set_window_extents
vorgesehen.
Dem Fenster wird beim Öffnen ein sog. Defaultfont zugeordnet.
Dieser wird für Operatoren wie write_string verwendet und
kann mit set_font nach dem Aufruf von open_window
überschrieben werden. Es ist jedoch auch möglich, den Defaultfont mit
dem Aufruf set_system(::'default_font',<Fontname>:) vor dem
Öffnen eines Fensters (und auch aller weiteren) festzulegen (siehe hierzu
auch query_font).
Die Farbe für Grafik und Schrift, die für Ausgabeprozeduren wie
disp_region oder disp_circle verwendet wird,
wird mit set_rgb, set_hsi oder
set_gray festgelegt.
Mit set_insert wird eingestellt, wie die Grafik mit dem
Inhalt des Bildwiederholspeichers verknüpft wird.
Hierbei kann z.B. mit set_insert(::'not':) erreicht werden,
dass nach zweimaligem Zeichnen eines Kreises an der gleichen
Position dieser wieder beseitigt wird.
Normalerweise wird jede Ausgabe (z.B. disp_region,
disp_image, disp_circle, etc.) in ein Fenster
durch einen sog. „Flush“ abgeschlossen. Dies bewirkt, dass die Daten nach
Beendigung der Ausgabeprozedur auf dem Bildschirm vollständig sichtbar
werden. Dies ist aber nicht in allen Fällen erforderlich, insbesondere dann,
wenn ständig Ausgaben erfolgen, oder ein Maus-Prozedur aktiv ist.
Hier ist es günstiger (d.h. schneller) wenn die Daten gepuffert werden,
bis genügend Daten vorhanden sind. Dieses Verhalten kann durch den Aufruf
von set_system(::'flush_graphic','false':) eingestellt
werden.
Der Inhalt von Fenstern wird (falls die Treibersoftware dies unterstützt)
gesichert; d.h. er bleibt erhalten auch wenn es von anderen Fenstern
überlappt wurde. Dies ist jedoch nicht in allen Fällen notwendig.
Wenn der Inhalt eines Fensters ständig neu aufgebaut wird
(copy_rectangle), so kann für dieses der Sicherungsmechanismus
abgestellt und damit der hierfür nötige Speicher eingespart werden.
Dies geschieht mit dem Aufruf von
set_system(::'backing_store','false':) vor dem Öffnen des
Fensters. Durch dieses Vorgehen wird nicht nur Speicher, sondern auch
Rechenzeit gespart, was beispielsweise für die Ausgabe von Videoclips
von Bedeutung ist (siehe copy_rectangle).
Für die Ausgabe von Grafik (disp_image,disp_region,
etc.) kann mit dem Operator set_part das Fenster so eingestellt
werden, dass es einen logischen Ausschnitt des Bildformates darstellt.
Dies hat insbesondere zur Folge, dass von Bildern und Regionen lediglich
dieser Ausschnitt (entsprechend vergrößert) ausgegeben wird.
Unterschied: Grafikfenster - Textfenster
Bei Grafikfenstern ist das Layout nicht so variabel handhabbar wie bei Textfenstern.
Nur Textfenster können zum Einlesen von Benutzerdaten verwendet
werden (read_string).
Bei der Ausgabe von Bildern, Regionen und Grafiken wird bei Grafikfenstern „gezoomt“: Unabhängig von Größe und Seitenverhältnis des Fensters werden die Bilder so transformiert, dass sie füllend in dem Fenster ausgegeben werden. Bei Textfenstern dagegen wird die Größe des Fensters bei der Ausgabe nicht beachtet (nur falls Clipping nötig ist).
Bei Grafikfenstern ist das Koordinatensystem des Fensters immer gleich dem Koordinatensystem des Bildformates, während bei Textfenstern das Koordinatensystem unabhängig von der Bildgröße immer den Bildschirmkoordinaten entspricht.
Der Parameter Mode legt den Modus des Fensters fest.
Dieser kann folgende Werte annehmen:
Dies ist der normale Modus für Grafikfenster: Das Fenster wird entsprechend den Parametern erzeugt und alle Ein- und Ausgaben sind möglich.
Unsichtbare Fenster werden nicht auf dem Bildschirm dargestellt. Die
Parameter Row, Column und FatherWindow
sind ohne Bedeutung. Ausgaben auf diese Fenster haben
keine Wirkung. Eingaben (read_string, Maus, etc.) sind
nicht möglich.
Diese Fenster werden verwendet, wenn man Darstellungsparameter
für ein Ausgabegerät abfragen möchte, ohne ein
(sichtbares) Fenster zu öffnen. Übliche Anfragen sind
z.B. query_color oder get_string_extents.
Diese Fenster sind durchsichtig: Das Fenster selbst ist nicht sichtbar (Rand und Hintergrund), jedoch sind alle sonstigen Operationen möglich und alle Ausgaben werden dargestellt. Eine übliche Verwendung für diesen Modus ist die Erzeugung von Maus-sensitiven Bereichen.
Dies sind ebenfalls nicht sichtbare Fenster. Die Ausgabe von
Bildern, Regionen und Grafiken ist auf dem Bildschirm nicht
sichtbar, wird jedoch im Speicher gepuffert. Die Parameter
Row, Column und FatherWindow sind
ohne Bedeutung. Puffer-Fenster verwendet man beispielsweise,
wenn man Ausgaben (im Hintergrund) vorbereitet und schließlich mit
copy_rectangle in ein sichtbares Fenster kopiert.
Eine andere Anwendung wäre die schnelle Verarbeitung von
Bildausschnitten bei interaktiven Manipulationen.
Texteingaben und Mausinteraktion ist mit dem Modus
'buffer' nicht möglich.
Es ist zu beachten, dass die Parameter Row, Column,
Width und Height durch das Ausgabegerät beschränkt
sind. Wird ein Vaterfenster (FatherWindow < > 'root')
angegeben, dann sind die Koordinaten relativ zu diesem Fenster.
Dieser Operator liefert ein Handle zurück. Es ist zu beachten, dass der Zustand einer Instanz dieses Handletyps durch bestimmte Operatoren geändert werden kann, obwohl das Handle als Eingabeparameter in diesen Operatoren verwendet wird.
Row (input_control) rectangle.origin.y → (integer)
Zeilenindex der linken oberen Ecke.
Defaultwert: 0
Typischer Wertebereich:
Row
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Column (input_control) rectangle.origin.x → (integer)
Spaltenindex der linken oberen Ecke.
Defaultwert: 0
Typischer Wertebereich:
Column
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Width (input_control) rectangle.extent.x → (integer)
Breite des Fensters.
Defaultwert: 256
Typischer Wertebereich:
Width
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: 0 <= Width <= 32768 || Width == -1
Height (input_control) rectangle.extent.y → (integer)
Höhe des Fensters.
Defaultwert: 256
Typischer Wertebereich:
Height
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: 0 <= Height <= 32768 || Height == -1
FatherWindow (input_control) pointer → (integer / string)
Logische Nummer des Vaterfensters. Für den Bildschirm als Vater kann 'root' oder 0 eingegeben werden.
Defaultwert: 0
Restriktion: FatherWindow >= 0
Mode (input_control) string → (string)
Fenstermodus.
Defaultwert: 'visible'
Werteliste: 'buffer', 'invisible', 'transparent', 'visible'
Machine (input_control) string → (string)
Name des Rechners, auf dem das Fenster geöffnet werden soll oder leerer String.
Defaultwert: ''
WindowHandle (output_control) window → (handle)
Fenster-Handle.
open_window(0,0,400,-1,'root','visible','',WindowHandle) read_image(Image,'fabrik') disp_image(Image,WindowHandle) write_string(WindowHandle,'File, fabrik') new_line(WindowHandle) get_mbutton(WindowHandle,_,_,_) set_lut(WindowHandle,'temperature') set_color(WindowHandle,'blue') write_string(WindowHandle,'temperature') new_line(WindowHandle) write_string(WindowHandle,'Draw Rectangle') new_line(WindowHandle) draw_rectangle1(WindowHandle,Row1,Column1,Row2,Column2) set_part(WindowHandle,Row1,Column1,Row2,Column2) disp_image(Image,WindowHandle) new_line(WindowHandle)
Sind die Parameterwerte korrekt, dann liefert open_window
den Wert 2 (H_MSG_TRUE). Andernfalls wird eine Fehlerbehandlung durchgeführt.
set_color,
query_window_type,
get_window_type,
set_window_type,
get_mposition,
set_tposition,
set_tshape,
set_window_extents,
get_window_extents,
query_color,
set_check,
set_system
disp_region,
disp_image,
disp_color,
set_lut,
query_color,
set_color,
set_rgb,
set_hsi,
set_pixel,
set_gray,
set_part,
set_part_style,
query_window_type,
get_window_type,
set_window_type,
get_mposition,
set_tposition,
set_window_extents,
get_window_extents,
set_window_attr,
set_check,
set_system
Foundation