update_window_pose
— Verändern der Pose eines 3D-Plots.
update_window_pose( : : WindowHandle, LastRow, LastCol, CurrentRow, CurrentCol, Mode : )
Der Operator update_window_pose
vereinfacht das Setzen der
Orientierung und der Lage des Höhenmodells, das vom Operator disp_obj
angezeigt wird, sofern der Darstellungsmodus mittels set_paint
auf
'3d_plot' gesetzt wurde.
Zwei Fensterposition (LastRow
,LastCol
) und
(CurrentRow
, CurrentCol
) werden in Rotation, Skalierung
oder Bewegung umgewandelt, abhängig von Mode
. Diese
Fensterkoordinaten müssen so angegeben werden, dass sie dem gesetzten
Bildausschnitt entsprechen und damit auch subpixelgenau sind. Ist der
Bildausschnitt durch (Zeile1,Spalte1,Zeile2,Spalte2) gegeben, entspricht die
linke obere Ecke der Koordinate (Zeile1 - 0.5, Spalte1 - 0.5),
die rechte untere Ecke der Koordinate (Zeile2 - 0.5,
Spalte2 - 0.5). Die Operatoren get_mposition_sub_pix
oder
get_mbutton_sub_pix
können verwendet werden, um diese Koordinaten
direkt zu erhalten.
Wird 'rotate' als Mode
gewählt, wird das Höhenmodell
rotiert. Dabei werden beide Punkte auf eine virtuelle Kugel, die im
Zentrum des Fensters ihren Mittelpunkt hat, projiziert. Der Bogen zwischen
beiden Projektionen entspricht der Rotation, die auf das Höhenmodell
angewandt wird.
Wird 'scale' als Mode
gewählt, wird die Distanz zwischen
dem Betrachter und dem Höhenmodell verringert, wenn CurrentRow
größer
ist als LastRow
. Falls CurrentRow
kleiner ist als
LastRow
, wird die Distanz vergrößert.
Wird 'move' als Mode
gewählt, werden die Eingabepunkte
auf eine Ebene, die parallel zur Betrachterebene durch die Mitte des
Höhenmodells geht, projiziert. Das Zentrum des Höhenmodells wird um die
Distanz zwischen beiden Projektionen bewegt.
Wird 'move_plane' als Mode
gewählt, werden die
Eingabepunkte auf die Ebene projiziert, die der Höhe Null entspricht.
Das Höhenmodell wird um die Distanz zwischen beiden Projektionen bewegt.
WindowHandle
(input_control) window →
(handle)
Fenster-Handle.
LastRow
(input_control) point.y →
(real / integer)
Zeilenkoordinate des ersten Punktes
LastCol
(input_control) point.x →
(real / integer)
Spaltenkoordinate des ersten Punktes.
CurrentRow
(input_control) point.y →
(real / integer)
Zeilenkoordinate des zweiten Punktes.
CurrentCol
(input_control) point.x →
(real / integer)
Spaltenkoordinate des zweiten Punktes.
Mode
(input_control) string →
(string)
Navigationsmodus.
Defaultwert: 'rotate'
Werteliste: 'move' , 'move_plane' , 'rotate' , 'scale'
* Interactive display of a height field dev_set_paint ('3d_plot') while (1) dev_set_check ('~give_error') get_mposition_sub_pix (WindowHandle, Row, Column, Button) dev_set_check ('give_error') if (ButtonDown and (Button == 0)) ButtonDown := false endif if (not(Button == 0)) if (ButtonDown) if (Button == 1) mode := 'rotate' endif if (Button == 4) mode := 'scale' endif if (Button == 5) mode := 'move' endif update_window_pose (WindowHandle, lastRow, lastCol, Row, Column, mode) else if (Button == 2) break endif ButtonDown := true endif lastCol := Column lastRow := Row endif dev_display (Image) endwhile
set_paint
,
open_window
,
get_mposition_sub_pix
,
get_mbutton_sub_pix
Foundation