open_window
— Öffnen eines Graphikfensters.
open_window( : : Row, Column, Width, Height, FatherWindow, Mode, Machine : WindowHandle)
open_window
öffnet ein neues Fenster, das zur Ausgabe von
Grauwertdaten, Regionen, Graphik 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
auszugebenenden 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 Paramater 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 (Windowmanager) 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 Graphik 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 Graphik 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 Graphik (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: Graphikfenster - Textfenster
Bei Graphikfenstern 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 Graphiken wird bei Graphikfenstern „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 Graphikfenstern 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 Graphikfenster: 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 Graphiken 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: 0
≤
Row
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Row >= 0
Column
(input_control) rectangle.origin.x →
(integer)
Spaltenindex der linken oberen Ecke.
Defaultwert: 0
Typischer Wertebereich: 0
≤
Column
(lin)
Minimale Schrittweite: 1
Empfohlene Schrittweite: 1
Restriktion: Column >= 0
Width
(input_control) rectangle.extent.x →
(integer)
Breite des Fensters.
Defaultwert: 256
Typischer Wertebereich: 0
≤
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: 0
≤
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