Casio Basic入門G06

Casio Basic入門
<目次>

誤字脱字・記載ミスや分かりにくい表現は随時追記・修正します

修正更新 2015/08/02



 5. Casio Basic でグラフィックス


前回: Casio Basic入門G05


Chapter G06
F-Line と 線のスタイル設定

今回は、F-Line  コマンドと線のスタイル設定コマンドを調べます。
これらコマンドについては、fx-9860GII の取扱説明書(fx-9860GII_Soft_J_2.04.pdf)の 8-24 ページには、

F-Line <X座標値1>,<Y座標値1>,<X座標値2>,<Y座標値2>

SketchThick <Sketch文またはGraph文>

SketchBroken <Sketch文またはGraph文>

SketchDot <Sketch文またはGraph文>

SketchNormal <Sketch文またはGraph文>

Sketch...... は、線のスタイル設定コマンド.


と記載があるだけなので、実際にプログラムを作りながら細かい点を確認してゆきます。



最初に、軽くおさらい。以下のプログラム FLINE0.1 を作ります。

ファイル名: DLINE1.0
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0
F-Line 0,31,126,31

⇒ ダウンロード: DLINE1.0

後で使うので、入力/保存しておいてください。


F-Line コマンド

・書式F-Line <X1>,<Y1>,<X2>,<Y2>
  • 座標 (X1, Y1) と (X2, Y2) を端点として直線を描画する。
  • 座標は、論理座標あるいはViewWindow座標系に従う。
・入力方法[SHIFT] [F4] (Skeetch) [F6] (▷) [F2] {LINE) [F2] (F・Line)

これを実行すると、以下のようになります。

DLINR1.0 

グラフィックス描画エリアは、127ピクセル x 63 ピクセルなので、値1が1ピクセルに相当するように座標指定するのが、グラフィックス描画のポイントでした。
ViewWindow 0,126,0,0,62,0,0

F-Line コマンドで、画面中央に横線を引くには、座標 (X1, Y1) = (0, 31) と (X2, Y2) = (126, 31) の間に線を描画するように設定。
F-Line 0,31,126,31

プログラム冒頭の5行は、おまじないように設定しておくと良い。
但し ClrGraphCls でも良い。ClrGraph は、座標系を論理座標系に自動指定し、もし座標軸を描画すれば目盛間隔が1 になるように自動設定されるので、ある意味きちんと初期化されることから GlrGraph はおまじないに使えます。設定を変えたくない場合は Cls を使えば良のですが、今の設定が何かは不明なのでプログラム冒頭での Cls 使用の場面は限られると思います。



次に、画面中央に点線を描画しましょう。

ファイル名: DLINE1.1
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0
SketchDot F-Line 0,31,126,31

直線描画のプログラム DLINE1.0  に赤文字部分を追加しています。
⇒ ダウンロード: DLINE1.1

後で使うので、入力/保存しておいてください。


SketchDot コマンド

・書式SketchDot [描画(スケッチ)コマンド]
  • 1行で記述しないとエラーになる
  • 点線として線を描画
  • 有効な描画(スケッチ)コマンドには、F-LineLineVerticalHorizontalCircle が使える。
・入力方法[SHIFT] [F4] (SKTCH) [F6] (▷) [F6] (▷) [F5] (STYL) [F4] (・・・・・・)


上記を実行すると以下のようになります。

DLINE1.1 

なお、SketchDot を入力する時、他にも線のスタイル設定コマンドがあります。

DLINE1.1_スタイル設定 

これらを全て使ってみましょう。


ファイル名: DLINE1.2
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0
F-Line 0,0,126,0
SketchThick F-Line 0,4,126,4
SketchBroken F-Line 0,8,126,8
SketchDot F-Line 0,12,126,12
SketchNormal F-Line 0,16,126,16

⇒ ダウンロード: DLINE1.2


最初に普通の線、続いて、太線 (SketchThick)、破線 (SketchBroken)、点線 (SketchDot)、そして 普通の線 (SketchNormal)を、4ピクセルおきに、下から上へ順に描画しています。
  • 太い = Thick (シック) ⇒ 太線
  • 破 = Broken (ブロークン) ⇒ 破線、コマンドを実行すると太い破線になります
  • 点 = Dot (ドット) ⇒ 点線
  • 普通 = Normal (ノーマル) ⇒ 普通の線、コマンドを実行すると線の装飾指定を付けない時と同じになります

SketchThick コマンド

・書式SketchThick [描画(スケッチ)コマンド]
  • 1行で記述しないとエラーになる
  • 太線として線を描画
  • 有効な描画(スケッチ)コマンドには、F-LineLineVerticalHorizontalCircle が使える。
・入力方法[SHIFT] [F4] (SKTCH) [F6] (▷) [F6] (▷) [F5] (STYL) [F2] ()

SketchBroken コマンド

・書式SketchBroken [描画(スケッチ)コマンド]
  • 1行で記述しないとエラーになる
  • 点線として線を描画
  • 有効な描画(スケッチ)コマンドには、F-LineLineVerticalHorizontalCircle が使える。
・入力方法[SHIFT] [F4] (SKTCH) [F6] (▷) [F6] (▷) [F5] (STYL) [F3] (----)

SketchDot コマンド

・書式SketchDot [描画(スケッチ)コマンド]
  • 1行で記述しないとエラーになる
  • 点線として線を描画
  • 有効な描画(スケッチ)コマンドには、F-LineLineVerticalHorizontalCircle が使える。
・入力方法[SHIFT] [F4] (SKTCH) [F6] (▷) [F6] (▷) [F5] (STYL) [F4] (・・・・・・)

SketchNormal コマンド

・書式SketchNormal [描画(スケッチ)コマンド]
  • 1行で記述しないとエラーになる
  • 点線として線を描画
  • 有効な描画(スケッチ)コマンドには、F-LineLineVerticalorizontalCircle が使える。
・入力方法[SHIFT] [F4] (SKTCH) [F6] (▷) [F6] (▷) [F5] (STYL) [F1] (―)


これを実行すると以下のようになります。

DLINE1.3 

==========

同じことを、別のコマンドを使って実現できます。

ファイル名: DLINE1.3
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0

F-Line 0,0,126,0

S-L-Thick
F-Line 0,4,126,4

S-L-Broken
F-Line 0,8,126,8

S-L-Dot
F-Line 0,12,126,12

S-L-Normal
F-Line 0,16,126,16

⇒ ダウンロード: DLINE1.3

赤文字で示したコマンドは、線のスタイル設定を行います。


これらのスタイル設定後、普通の線を描画すれば、設定したスタイルが反映されます。

DLINE1.3 

S-L-Thick コマンド

・書式S-L-Thick
  • パラメータは無い。
  • これが設定されていると、描画する線が太線になる
  • F-LineLineVerticalHorizontalCircle などの描画(スケッチ)コマンドに使える。
  • 次に S-L-xxxx で設定されるまで、線のスタイル設定は保持される。
・入力方法[SHIFT] [MENU] [F6] (▷) [F2] (S/L) [F2] ()

S-L-Broken コマンド

・書式S-L-Broken
  • パラメータは無い。パラメータを付けるとエラーになる。
  • これが設定されていると、描画する線が破線になる
  • F-LineLineVerticalHorizontalCircle などの描画(スケッチ)コマンドに使える。
  • 次に S-L-xxxx で設定されるまで、線のスタイル設定は保持される。
・入力方法[SHIFT] [MENU] [F6] (▷) [F2] (S/L) [F3] (----)

S-L-Dot コマンド

・書式S-L-Dot
  • パラメータは無い。パラメータを付けるとエラーになる。
  • これが設定されていると、描画する線が点線になる
  • F-LineLineVerticalHorizontalCircle などの描画(スケッチ)コマンドに使える。
  • 次に S-L-xxxx で設定されるまで、線のスタイル設定は保持される。
・入力方法[SHIFT] [MENU] [F6] (▷) [F2] (S/L) [F2] (・・・・・・)

S-L-Normal コマンド

・書式S-L-Normal
  • パラメータは無い。パラメータを付けるとエラーになる。
  • これが設定されていると、描画する線が普通の線になる
  • F-LineLineVerticalHorizontalCircle などの描画(スケッチ)コマンドに使える。
  • 次に S-L-xxxx で設定されるまで、線のスタイル設定は保持される。
・入力方法[SHIFT] [MENU] [F6] (▷) [F2] (S/L) [F1] ()

これらの線のスタイル設定コマンド S-L-xxxx は、一旦設定されると、次に設定を変えない限り、その設定が維持されます。
これに対して、既に調べた Sketchxxxx コマンドは、その場限りのスタイル設定です。描画の効果は同じですが、設定の有効性が異なる点に注意が必要です。

==========

S-L-xxxx コマンドによる設定の有効範囲を確認するプログラムを作ってみます。

ファイル名: DLINE1.4
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0

" 0:No"
" 1:Thick"
" 2:Broken"
" 3:Dot"
" 4:Normal"
"Input menu#"?→M  (入力待ちして、入力されたテンキーの数字を変数 M に代入)

M=0⇒""           (何もせずテキスト画面で改行するだけ)
M=1⇒S-L-Thick
M=2⇒S-L-Broken
M-3⇒S-L-Dot
M=4⇒S-L-Normal
M≥5⇒Return

Prog "DLINE1.0"

⇒ダウンロード: DLINE1.4

このプログラムは、線のスタイル設定をするだけで、最後に既に作った普通の 直線を引くプログラム DLINE1.0 を呼び出して実行しています。このように直線描画を敢えて別プログラムで行わせているのは、スタイル設定 S-L-xxxx コマンドの有効範囲が、他のプログラムにまで及ぶのかどうかを確認するためです。
  • 出力命令" "入力命令?を使ったメニュー選択のコードを使っています。⇒ コマンドリファレンス 出力命令" "入力命令?参照
  • 別のプログラム呼び出しコマンド Prog を使っています。⇒ コマンドリファレンス Prog 参照
  • 条件分岐命令 ⇒ を使っています。⇒ コマンドリファレンス 条件分岐命令 ⇒ 参照
  • プログラム終了コマンド Return を使っています。⇒ コマンドリファレンス Return 参照
fx-9860GII での上記の各命令やコマンド類の入力方法;

・入力命令?[SHIFT] [VARS] [F4] (?)
・比較演算 = [SHIFT] [VARS] [F6] (▷) [F3] (REL) [F1] (=)
・条件分岐 ⇒[SHIFT] [VARS] [F3] (JUMP) [F3] (⇒)
・比較演算 ≥[SHIFT] [VARS] [F6] (▷) [F3] (REL) [F5] (≥)
・Return
[SHIFT] [VARS] [F2] (CTL) [F2] (Rtrn)

ここで使った命令やコマンドについての詳細な使い方については、Casio Basic入門38 を参照してください(但し、これは fx-5800P を前提にしているので、上の fx-9860GII での入力方法を参考にして読んで下さい)。


で、このプログラムを起動します;
DLINE1.4 

[1] (1:Thick) を押し、続いて [EXE] を押すと、

DLINE1.4 Thick 

太線が描画されます。つまり、描画(スケッチ)のスタイル設定が保持されていて、別のプログラムにも効果を与えることが分かります。

[EXE] を2回押して、Program List 画面へ戻ります。

再び、[EXE] か[F1] を押して、同じ DLINE.1.4 を起動します。

DLINE1.4 

ここで、[0] (0:No) 、続いて [EXE] を押すと、

DLINE1.4 Thick 

このように、S-L-xxxx を設定していないにもかかわらず、太線が描画されます。これで、一旦、線のスタイル設定を行うと、設定は保持されままであることが確認できます。

さて、このプログラムで、[1] (1:Thick) を選び、太線を描画させてから、[AC] で強制終了します。続いて、破線を描画するプログラム DLINE1.1 (既に作っています)を実行してみます。

DLINE1.1 

すると、太線にならず破線が描画されます。つまり、S-L-Thick よりも SketchThick が優先されることが分かります。

==========

このプログラムは、1つのスタイルを試したらプログラムが終了するので、他のスタイルを試すにはプログラムをもう一度起動する必要があります。繰り返しスタイルを試せる方が分かりやすいので、プログラムを改良します。

繰り返し実行させるには、ループを使えば良いので、以下のようにプログラムを変更してみます。

ファイル名: DLINE1.5
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0

While 1

ClrText

" 0:No"
" 1:Thick"
" 2:Broken"
" 3:Dot"
" 4:Normal"
"Input menu#"?→M

M=0⇒""
M=1⇒S-L-Thick
M=2⇒S-L-Broken
M-3⇒S-L-Dot
M=4⇒S-L-Normal
M≥5⇒Return

Prog "DLINE1.0"

WhileEnd

(今回追加部分を赤文字で示す)

⇒ダウンロード: DLINE1.5


グラフィックスコマンドを調べるにあたり、このようにループによる繰り返し処理を使った方が、分かりやすいことが多いので、ループコマンドに抵抗のある方は、このタイミングで、その使い方に慣れて下さい。

今回は、While ループを使って、無限ループにしています。
 ⇒ Casio Basic コマンドリファレンス While

While ループの書式

While
[ループ継続条件] 
 ループ内の処理
WhileEnd

[ループ継続条件] に 1 を指定すると、常に「真」 となって、常にループが継続されるので、無限ループになり、上のプログラムではこれを利用しています。ループから抜けるには、[AC] キーでプログラムを強制終了させます。

DLINE1.5 

[1] (1:Thick)、[2] (2:Broken)、[3] (3:Dot)、[4] (4:Normal) を選んで [EXE] を押すと、選んだスタイルで線が描画されます。
ところが、[0] (No) を選んだ場合は、直線に選んだスタイルで線が描画されることを確かめて下さい。

==========

上のプログラムでは、メニューの入力待ちのところで、うっかりテンキー以外を押すと異常動作します。これは、入力命令?を使う限りしかたありません。グラフィックスコマンドの確認の目的では、これで十分ですが、実用プログラムでは誤動作の原因になったり、、操作上の問題になることもあります。

そこで、入力命令? の代わりに Getkey コマンドを使って、必要な [0][4] 以外には反応せず、さらに[AC] で強制終了させる代わりに [EXIT] で正常終了させるようにプログラムを改造してみます。今回のテーマには直接必要のない改造ですが、グラフィックスを利用した実用プログラムの練習・準備のために、作ってみました。

ちなみに、以下の Doループでのキーコード取得と、それに続く If / Else If  / Else / IfEnd によるキーコード別の条件分岐、ならびにそれらを 無限ループ内に入れて、[EXIT] などの特定キーで正常終了させるのは、Casio Basic での構造化プログラミングの定石といって良いコードだと思います。
Casio Basic入門43 参照


ファイル名: DLINE1.6
ClrGraph
CoordOff
GridOff
AxesOff
LabelOff

VewWindow 0,126,0,0,62,0

While 1

ClrText
" 0:No"
" 1:Thick 2:Broken"
" 3:Dot   4:Normal"
"Input menu#"
Locate 16,7,"<EXIT>"

Do
Getkey→K
LpWhile K=0

If K=71:Then
Else If K=72:Then
S-L-Thick
Else If K=62:Then
S-L-Broken
Else If K=52:Then
S-L-Dot
Else If K=73:Then
S-L-Normal
Else If K=47:Then
Break
Else 0→K
IfEnd:IfEnd:IfEnd
IfEnd:IfEnd:IfEnd

K⇒Prog "DLINE1.0"◢

WhileEnd
ClrText
Locate 9,5,"bye!"

⇒ ダウンロード: DLINE1.6

DLINE1.6 





今回のまとめ
  • 線のスタイル設定コマンド SketchThick / SketchBroken / SketchDot / SketchNormal は、パラメータに描画コマンド (Line, F-Line, Horizontal, Vertical, Circle) を指定すると、描画コマンドで書かれる図形は指定された線のスタイルで描画される。これらのスタイル設定コマンドは、その場限りの設定になる。
  • 線のスタイル設定コマンド S-L-Thick / S-L-Broken / S-L-Dot / S-L-Normal は、パラメータを設定しない。設定するとエラーになる。これらのコマンドは、次に設定するまで、その設定は保持され、他のプログラムにも影響を及ぼす。これらのスタイル設定コマンドは、描画コマンド (Line, F-Line, Horizontal, Vertical, Circle) で書かれる図形の線のスタイルに反映される。
  • 設定が保持される S-L-xxxx コマンドよりも、その場限りの設定を行う Sketchxxxx コマンドが優先される。


今回使ったグラフィックス コマンド
  • F-Line
  • SketchDot
  • SketchBroken
  • SketchThick
  • SketchNormal
  • S-L-Dot
  • S-L-Broken
  • S-L-Thick
  • S-L-Normal


つづく...

Casio Basic入門 G07 / 目次




応援クリックをお願いします。励みになるので...

人気ブログランキングへ


FC2ブログランキングへ







keywords: fx-9860GIICasioBasic、プログラミング入門グラフィックスプログラム関数電卓

リンク集 | ブログ内マップ


関連記事

テーマ : プログラム関数電卓
ジャンル : コンピュータ

コメントの投稿

非公開コメント

CG10との違い

管理人様、更新おつかれさまです。

fx-CG10における線のスタイル設定は一番細いSketchThinが一種類増えて全部で5種類になっているのと、線の太さが必ずしも3倍比になっていないのでスタイル設定をすると完全な互換は無くなるようです。

SketchNormal
3x3ドットで表示されるのでfx-9860GIIと同じ太さです。

SketchThick
5x5ドットで表示されるのでfx-9860GIIよりも若干細いです。

SketchBroken
6x3ドットで表示されるのでfx-9860GIIよりも横長で細いです。

SketchDot
3x3ドットで表示されるのでfx-9860GIIと同じ太さです。

SketchThin
1*1ドットで表示されます。

今回のF-Lineでの描画速度はfx-9860GIIでクロックを3.69MHzまで落とすとCG10描画の雰囲気になります(^^;

Re: CG10との違い

sentaro様

いつもながら、貴重な互換性情報をありがとうございます。


> fx-CG10における線のスタイル設定は一番細いSketchThinが一種類増えて全部で5種類になっているのと、線の太さが必ずしも3倍比になっていないのでスタイル設定をすると完全な互換は無くなるようです。

グラフィックスを使うと、表示のレイアウトに互換性が無くなるということですね。


> SketchNormal
> 3x3ドットで表示されるのでfx-9860GIIと同じ太さです。
>
> SketchThick
> 5x5ドットで表示されるのでfx-9860GIIよりも若干細いです。
>
> SketchBroken
> 6x3ドットで表示されるのでfx-9860GIIよりも横長で細いです。
>
> SketchDot
> 3x3ドットで表示されるのでfx-9860GIIと同じ太さです。
>
> SketchThin
> 1*1ドットで表示されます。

この情報は、本文に追記させて頂きますね。



> 今回のF-Lineでの描画速度はfx-9860GIIでクロックを3.69MHzまで落とすとCG10描画の雰囲気になります(^^;

うゎっ...遅過ぎる!

SketchDot F-Line x1,y1,x2,y2 はチョット余計な内部処理をしていることが分かっています(次回あたりの紹介予定)。

fx-cg10 で、Sketch Horizontal y との処理速度の違いは見られますか?

CG10での結果

管理人様、こんにちは!

>グラフィックスを使うと、表示のレイアウトに互換性が無くなるということですね。

はい、3倍ドットそのままじゃないCG10/20独自スタイル路線になっています(^^;

ってことで、百聞は一見にしかずというわけで、CG10での実行結果画面です。

DLINE1.2の最後にSketchThinを追加して、
http://pm.matrix.jp/img/DLINE1.2a.png

実行した結果です。
http://pm.matrix.jp/img/DLINE1.2b.png

一番下のラインは3ドット幅のSketchNormalのはずですが3ドット目がエリア外になっているのか描画されないので2ドット幅になっています。


>うゎっ...遅過ぎる!

CG10では描画しているのが見えるので面白いといえば面白いですが、ノーマル速度同士で並べて実行すると一瞬で描画するfx-9860GIIが爆速に見えます(^^;

>fx-cg10 で、Sketch Horizontal y との処理速度の違いは見られますか?

速度的にはほとんど変わらず、右から描画(F-Line)するか、左から描画(Horizontal)するかの違いしかないみたいです。

Re: CG10での結果

sentaro様

今晩は、


> はい、3倍ドットそのままじゃないCG10/20独自スタイル路線になっています(^^;
>
> ってことで、百聞は一見にしかずというわけで、CG10での実行結果画面です。

わざわざ、画像まて撮って頂き、恐縮です。

一番下のSketchNormalが1ドット分消えてるというのは、指定座標が線幅の中央のドットを指定するため、と理解して良いのでしょうか?

fx-9860GIIでは、2ドット幅のThickの場合、下のピクセルの位置が指定されるので、下端では2ドット幅が保証されますが、上端は1ドット削れることが起きます。



> 速度的にはほとんど変わらず、右から描画(F-Line)するか、左から描画(Horizontal)するかの違いしかないみたいです。

ありがとうございます。この点は、fx-9860GIIと同じ仕様ですね。

次回は、この点を含めた内部の描画仕様に踏みこむ予定です。コンパイラ開発にも影響ある内容になりそうです。

まだ、まとめきっていないので、予定ですが...


頂いて画像を拝見する限り、高精細LCDは良いですね。

No title

管理人様、

>一番下のSketchNormalが1ドット分消えてるというのは、指定座標が線幅の中央のドットを指定するため、と理解して良いのでしょうか?

なぜそうなるのかちょっと不思議でしたけど、

>fx-9860GIIでは、2ドット幅のThickの場合、下のピクセルの位置が指定されるので、下端では2ドット幅が保証されますが、上端は1ドット削れることが起きます。

上端で試してみると同じく2ドットしか描画されないので、管理人様の推察されたとおり、中央のドットが基準みたいですね(^^)



>次回は、この点を含めた内部の描画仕様に踏みこむ予定です。コンパイラ開発にも影響ある内容になりそうです。

お!内部仕様が判明するとコンパイラも作りやすくなります、というか仕様がきっちり分からないとコンパチにならないですよね(^^;


>頂いて画像を拝見する限り、高精細LCDは良いですね。

はい、高精細カラーはオーバースペックなようでグラフィックとなるとやはり見た目のインパクトが違いますね。
難点はその描画の遅さですが次期バージョンアップで少しは改善されるのではと期待しています(^^;

Re: No title

sentaro様

こんばんは、

> 上端で試してみると同じく2ドットしか描画されないので、管理人様の推察されたとおり、中央のドットが基準みたいですね(^^)

やはり、そうでしたか...

このあたりも、忘れる前に、どこかの記事に入れておくことにします。



> お!内部仕様が判明するとコンパイラも作りやすくなります、というか仕様がきっちり分からないとコンパチにならないですよね(^^;

はい、単なるグラフィックスコマンドの探索から、コンパイラ作るというより面白い動機付けができたので、とても楽しくなっています。


> はい、高精細カラーはオーバースペックなようでグラフィックとなるとやはり見た目のインパクトが違いますね。
> 難点はその描画の遅さですが次期バージョンアップで少しは改善されるのではと期待しています(^^;

高速化してくれれば、というか、Ptune で高速化さえできれば良いのですが、楽しみですね。

最新記事
最新コメント
カテゴリ
C# (3)
検索フォーム
Visitors
Online Counter
現在の閲覧者数:
プロフィール

やす (Krtyski)

Author:やす (Krtyski)
since Oct 30, 2013


プログラム関数電卓は、プログラムを作り・使ってナンボ!

実際に触って気づいたこと、自作プログラム、電卓プログラミングについて書いています

おもしろい・役に立つならクリックしてください。励みになります。

人気ブログランキングへ


FC2ブログランキングへ


写真: 「4駆で泥んこ遊び@オックスフォード郊外」

リンク
月別アーカイブ
Sitemap

全ての記事を表示する

RSSリンクの表示
最新トラックバック
ブロとも申請フォーム

この人とブロともになる

QRコード
QR