現在の表示域のために、新しい視点座標マッピングを用意します。
構文:
Window
[ [Screen] ( x1, y1 )-( x2, y2 ) ]
パラメタ:
Screen
y座標を指定している引数は、上から下に向かって増加します。
( x1, y1 )-
( x2, y2 )
新しい浮動点の値は、現在の表示域の反対の角と一致します。
省略すると、Window座標マッピングは取り除かれます。
説明:
Window は、新しい座標システムを定義するのに使われます。
(x1, y1) と (x2, y2) は、現在の表示域の反対の角に写像する新しい座標です。
描画の基本的な命令文に渡されるすべての以降の座標は、この新しいマッピングの影響を受けます。
Screen が省略されると、新しい座標システムは Cartesian(デカルトの) になります。すなわち、y座標は、下部から上に向かって増えます。
引数なしで Window を呼ぶと、座標変換が無効になります。
FreeBASIC の現在の挙動は、特定の座標マッピングではなく、
Window の角の動きを追うことです。
これは、座標マッピングが、
View の呼び出し後に変更できることを意味します。
また、現在、
Window の角は、画像バッファでの作業時にも考慮されるため、
Window が有効な場合、座標マッピングは画像ごとに異なります。
有効な
Window がないとき、事実上、座標マッピングがないので、有効な座標系は一定です。イメージ・バッファ・サイズや、(もしあれば)
View 座標に、依存しません。
例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
'' プログラムは、表示座標マッピングを変更する方法を示しています。
'' 現在のビューポートを変更して、画面上に描画された図形のサイズを変更します。
'' 効果は、拡大と縮小です:
'' - ビューポート座標が小さくなると、ウィンドウの外側にあるため、その一部が最終的にクリップされるまで、図は画面上で大きく表示されます。
'' - ビューポート座標が大きくなると、画面上の図が小さく表示されます。
Declare Sub Zoom
(ByVal X
As Integer)
Dim As Integer X =
500, Xdelta =
50
Screen 12
Do
Do While X <
525 And X >
50
X += Xdelta
'' ウインドウ・サイズを変更
Zoom
(X
)
If Inkey <>
"" Then Exit Do,
Do '' プログラムを止めるには、キー入力します
Sleep 100
Loop
X -= Xdelta
Xdelta *= -
1 '' サイズ変更を逆にします
Loop
Sub Zoom
(ByVal X
As Integer)
Window (-X,-X
)-
(X,X
) '' 新しいウィンドウを定義
ScreenLock
Cls
Circle (0,
0),
60,
11, , ,
0.
5, F
'' x-半径60 で楕円を描画
ScreenUnlock
End Sub
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")
Screen 13
'' 切り取り部を定義します
View ( 10,
10 ) -
( 310,
150 ),
1,
15
'' 視点座標を設定します
Window ( -
1, -
1 ) -
( 1,
1 )
'' X軸を描きます
Line (-
1,
0)-
(1,
0),
7
Draw String ( 0.
8, -
0.
1 ),
"X"
'' Y軸を描きます
Line (0,-
1)-
(0,
1),
7
Draw String ( 0.
1,
0.
8 ),
"Y"
Dim As Single x, y, s
'' ステップ幅を計算します(x 座標上の 1 ピクセルのステップに対応します)
s =
2 /
PMap
( 1,
0 )
'' 関数をプロットします
For x = -
1 To 1 Step s
y = x ^
3
PSet( x, y
),
14
Next x
'' 画面座標に戻ります
Window
'' 切り取り部を取り除きます
View
'' タイトルを作成します
Draw String ( 120,
160 ),
"Y = X ^ 3"
Sleep
QBからの違い:
-
QBASIC では、続く VIEW の呼び出しの後に、座標マッピングを保存します。
-
FreeBASIC の現在の挙動は、VIEW を呼び出した後に、あるいは、イメージに取り組む時、WINDOW座標を保存することです。そして、座標マッピングが、スケーリング/翻訳を受けるかもしれないことを意味しています。
(WINDOWが用意ができていないなら、座標マッピングがないので、それは VIEW の呼び出しの後に変化しません。)
挙動は、今後、変更されるかもしれません。しかし、一貫した振る舞いは、VIEW を変更するときに、再度 WINDOW を呼ぶことにより、不定の表示域座標上に保証されます。
参照: