FreeBASIC マニュアルのトップに戻る

FreeBASIC Linegraphics

目次→描画ライブラリ参考→2次元 描画関数LINE (GRAPHICS)←オリジナル・サイト

Line (描画) 左にメニュー・フレームが表示されていない場合は、ここをクリックして下さい

←リンク元に戻る プログラム開発関連に戻る

線を引きます。

構文:
Line [target,] [[STEP] (x1, y1)]-[STEP] (x2, y2) [, [color][, [B|BF][, style]]]
or
Line - (x2, y2) [, [color][, [B|BF][, style]]]

パラメタ:
target
描画するために、バッファを指定します。
STEP
開始座標が、相対的であることを示します。
(x1, y1)
線の、始点の座標
STEP
終点の座標が相対的であることを示します。
(x2, y2)
線の、終点の座標
color
カラー属性。
B|BF
箱枠か、塗りつぶした箱かのモードを指定します。
style
線のスタイル

解説:
直線か、2点間の箱、を描く、描画命令。
動作は、SCREENSET で設定されている作業中のページか、または、指定された、Get (描画)/Put バッファ上で、行われます。

の座標は、WINDOWView (描画) 命令を経由して、カスタム座標システムセットの影響を受けます。そして、View (描画)で設定される、切り取り長方形に収まります。
STEP キーワードを座標の前に付けると、座標は、直前のグラフィックス・カーソル位置からの、相対座標になります。
B フラグを指定すると、線の代わりに、 (x1,y1)-(x2,y2) を、対角の頂点とした、長方形が描かれます。
BF フラグを指定すると、塗りつぶした長方形が描かれます。

Color は、モード特有の色属性を指示します。(詳細は、ColorScreen (描画)を、参考ください)。
省略すると、Color命令によって設定される、現在の前景色が使われます。

Style を指定すると、Style に合わせた線画を描きます。
値は、16ビットのビット・マスクとして解釈します。そして、Line は、画素描画をスキップするのに、それを使います。
(x1,y1)で始まって、スタイル・マスクの最も重要なビットが、チェックされます:
1 なら画素は描かれて、0 ならスキップされます。
これは、他のビットでも、すべての線画素のために繰り返します。16 ビットがすべてチェックされるとき、マスクで、再利用されます。

Line を、Line - (x2, y2) の形式で使うと、線は現在のカーソル位置から Line で特定された (x2,y2) 座標まで描かれます。
あるいは、Point は、現在のカーソル位置を得るために使うことができます。

注: 連鎖使用や、Line で描画されたボックスは、一部の場所で画素が重ね塗りされる可能性があります。
このため、透明色(GFX_ALPHA_PRIMITIVES オプションフラグと組み合わせて)を使うと、これらの重ね塗り画素の結果の(ブレンドされた)色が、影響を受けます。

例:
注:FreeBASIC 1.08〜 で、SetEnviron を追加しなくても、日本語環境で描画画面が表示されるように改善されました。
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

'白い箱に、赤色の対角線を描いて、3秒間、待ちます。
Screen 13
Line (20, 20)-(300, 180), 4
Line (140, 80)-(180, 120), 15, b
Line - ( 200, 200 ), 15
Sleep 3000



' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

'2本の線を、2つの異なった線種、2つの異なった色で、描きます
ScreenRes 320, 240

Line (10, 100)-(309, 140)4, B, &b1010101010101010 '赤色の点線の枠の箱

Line (20, 115)-(299, 115)9,  , &b1111000011111111 '青色の点線
Line (20, 125)-(299, 125), 10,  , &b0000000011110000 '緑色の点線

Sleep



 下は、FBの掲示板に掲載されていた、シェルピンスキーの三角形 を描くプログラムです。
 表示が速すぎるので、始めは、Sleep を有効にすると良いでしょう。

Sierpinski triangle
' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

' Sierpinski triangle by Kristopher Windsor

Sub triangle (x1 As Double, y1 As Double, x2 As Double, y2 As Double, x3 As Double, y3 As Double)
  
  #define c &HFFFFFFFF
  
  #define factor .5
  
  #macro scale(x1, y1, x2, y2, x3, y3)
    Scope
      Dim As Integer nx1, ny1, nx2, ny2, nx3, ny3
      nx1 = x1
      ny1 = y1
      nx2 = (x2 - x1) * factor + x1
      ny2 = (y2 - y1) * factor + y1
      nx3 = (x3 - x1) * factor + x1
      ny3 = (y3 - y1) * factor + y1
      triangle(nx1, ny1, nx2, ny2, nx3, ny3)
    End Scope
  #endmacro

  #macro add(x, y)
    x1 += x
    x2 += x
    x3 += x
    y1 += y
    y2 += y
    y3 += y
  #endmacro
  
  Static As Integer depth
  
  depth += 1
  
  Line (x1, y1) - (x2, y2), c
  Line -(x3, y3), c
  Line -(x1, y1), c
  
  'Sleep(1, 1)         'コメントを外すと、描画過程が分かりやすくなります。
  
  If depth < 8 Then '(depth < 8 And Rnd() < .1) Or depth < 4 Then
    scale(x1, y1, x2, y2, x3, y3)
    scale(x2, y2, x3, y3, x1, y1)
    scale(x3, y3, x1, y1, x2, y2)
  End If
  
  depth -= 1
End Sub

Screenres 800, 600, 32

'Do
  triangle(400, 0, 0, 599, 799, 599)
'Loop Until Inkety() = Chr(27)

Sleep 

 以下は、Tiny Basic for Windows グラフィック操作編 で紹介いただいている「100個の長方形」を、
微修正して転載させていただいています。
100個の長方形
'100 個の長方形

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

Dim Collar(6) As Integer
Dim CInteger As Integer
Dim i As Integer

Collar(1)=15 '"White"
Collar(2)=2 '"Green"
Collar(3)=1 '"Blue"
Collar(4)=14 '"Yel1ow"
Collar(5)=12 '"Red" 
Collar(6)=11 '"Cyan"

Screen 12

Window (0,0)-(1,1)

For i=1 to 100
   Sleep 100
   CInteger = Collar(((i-1) mod 6)+1)   '1,2,...,6 を順次取る
   Line (Rnd,Rnd)-(Rnd,Rnd),CInteger,B
Next i
Print "To End ,Type any key"
Sleep

End

レースクリスタル  以下は、三平武男さんの数式絵「レースクリスタル」です。
これは、F-BASIC のコードを微修正したものです。
'レースクリスタル

'$lang: "qb"

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

Screen 17

 '背景
Line(0,0)-(700,450) , 3 ,BF '2 緑 4 赤 5紫

RD=3.14159/180 '度数をラジアンにする係数
AX=RD*63
AY=RD*0 '座標回転角度(X軸側63度、Y軸側0度)
m=24    '24 角形

For K=0 To m-2
   X1=240*Cos(K*360/m*RD) '始点座標
   Y1=240*Sin(K*360/m*RD)
   For J=K+1 To m-1
      X2=240*Cos(J*360/m*RD) '終点座標
      Y2=240*Sin(J*360/m*RD)
      PX1=X1*cos(AY)+Y1*Sin(AY) '始点座標回転
      PY1=Y1*cos(AX)
      PX2=X2*cos(AY)+Y2*Sin(AY) '終点座標回転
      PY2=Y2*cos(AX)
      Line(320+PX1,220+PY1)-(320+PX2,220+PY2) , 15 '始点と終点を結ぶ
   Next J
Next K

Locate 5,1 : Print "LaceCrystal"
Locate 64,21 : Print "T.Mihira"
Locate 64,22 : Print "Sep/2005"

Sleep

mandala  以下は、QB64 http://www.qb64.net/
サンプル・フォルダにあるプログラムを、FreeBASIC 用に微修正したものです。
QB64\programs\samples\misc\mandala.bas
'Mandala by Antoni gual
'for Rel's 9 LINER contest at QBASICNEWS.COM  1/2003
'------------------------------------------------------------------------
'$lang: "qb" 

' Sets the graphics method GDI
' 描画方法を GDI に設定
SetEnviron("fbgfx=GDI")

10 SCREEN 12
20  v% = RND * 20 + 10
30 REDIM VX%(v%), VY%(v%)
40 FOR d1% = -1 TO v%
50 FOR d2% = d1% + 1 TO v%
60  IF d1% = -1 Then
62     VX%(d2%) = 320 + (SIN(6.283185 * (d2% / v%)) * 239)
64    Else 
66     Line (VX%(d1%), VY%(d1%))-(VX%(d2%), VY%(d2%)), (v% MOD 16) + 1
68  End If  
70  IF d1% = -1 THEN VY%(d2%) = 240 + (COS(6.283185 * (d2% / v%)) * 239)
80 NEXT d2%, d1%
90 IF LEN(INKEY$) = 0 THEN GOTO 20

QBとの違い:

参照:
2次元描画関数に戻る
←リンク元に戻る プログラム開発関連に戻る


ページ歴史:2019-04-12 16:32:59
日本語翻訳:WATANABE Makoto、原文著作者:SysOp

ホームページのトップに戻る

表示-非営利-継承