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