int consolewidth() | コンソール画面の幅を取得します。いちおうスクロールバーや余白の余裕を見た値です(ブラウザによって少し異なります)。コンソール画面のサイズに合わせてグラフィックしたいときに使います。引数はありません。 |
int consoleheight() | コンソール画面の高さを取得します。いちおうスクロールバーや余白の余裕を見た値です(ブラウザによって少し異なります)。コンソール画面のサイズに合わせてグラフィックしたいときに使います。引数はありません。 |
int [sid.]mpx() int [sid.]mpy() | マウスがスクリーン上にあるとして各々そのx座標、y座標を返します(いちいちスクリーン内かどうかまでは調べません)。sidはスクリーンidで、省略された場合はマウスの乗っている(重なっている場合は一番上の)スクリーンです。 |
sid [sid.]screenstyle("style") | SVGとcanvasに共通です。グラフィック画面の外観をCSSスタイルを使って設定または変更します。newscreen()やscreen()で設定する内部の描画用パラメータとは別です。引数のstyleはCSSスタイル形式で指定します。初期値は""(空)でこれでよければ特に実行する必要はありません。枠をつけるならscreenstyle("border:2px solid silver;");などとします。sidはスクリーンのid番号ですが、指定されなければこれからnewscreen()で作成されるスクリーンすべてに、指定されれば(すでにある)その番号のスクリーンにのみ適用します。不要な書き直しを避けるために基本的にはスクリーン作成前に指定してください。適用したスクリーンのidを返します。 ...参考までによく使いそうな"style"設定を例としてあげておきます。スタイルなし:""、背景色:"background:#def;"、枠:"border:2px solid silver;"、幅:"width:400px;"、高さ:"height:300px;"、左マージン:"margin-left:50px;"、上マージン:"margin-top:10px;"、右マージン:"margin-right:8px;"、下マージン"margin-bottom:8px;"、非表示:"visivirity:hidden;"、表示:"visibility:visible;"、はみだし部分も表示する:"overflow:visible;" など。 |
sid newscreen(w,h,zw,zh,dx,dy,so) | SVGとcanvasに共通です。新しいグラフィック画面(領域)を準備し描画対象スクリーンに設定します。引数は、w,h:描画領域の幅,高さ(int)、zw,zh:描画内容の拡大縮小率(float)、dx,dy:描画内容の位置補正(int)、so:canvasとSVGの重ね順で"cs"ならcanvasの上にSVG、"sc"ならSVGの上にcanvasです。"sc"は重ね合わせた画像の保存がうまくできず、canvasかSVGのいずれか一方しか保存できません。初期値は w=400, h=300, zw=1.0, zh=1.0, dx=0, dy=0, so="cs" で、以上は与えられた引数の値のみ前の値から変更されます(引数省略機能が動作します)。描画領域外にはみ出た部分は表示されません。作成されたスクリーンのidを返します。作成するスクリーンのidの指定はできません(自動的に1から順番になります)。 |
sid [sid.]screen(w,h,zw,zh,dx,dy,so) | SVGとcanvasに共通です。スクリーンパラメータを変更しそれを使って内容を書き換えますが描画対象スクリーンは変更されません。スクリーンidを指定しない場合現在の描画スクリーンを対象としますがまだスクリーンがなければ特別サービスで新しく作成します。引数はnewscreen()と同じですが、与えた引数のパラメータのみ変更(再設定)されます(引数省略機能は動作しません)。すでにあるSVG画像は新しいパラメータで書き直されますがcanvas画像は書き直されません。変化させる画像とさせない画像の使い分けには利用できます。SVGは画像データによっては書き直しに時間がかかります。変更を適用したスクリーンのidを返します。 |
sid [sid.]screenselect() | SVGとcanvasに共通です。引数はありません。スクリーンidの指定があればそのスクリーンを描画対象スクリーンに変更します。id指定がなければそのまま描画対象スクリーンのidを返しますが、まだスクリーンがなければ0が返されるのでスクリーンの有無の判定もできます。 |
sid [sid.]screencopy() | SVGとcanvasに共通です。引数
はありません。グラフィックスクリーンをコピー表示します。すなわち同じ画像が表示されます。描画対象スクリーンは変更されません。作ったアイコン画像を並べたいときなどにお使いください。sidはnewscreen()で返されたコピー元のスクリーンidで、指定されなければ現在有効なスクリーンです。返り値は新しくコピーして作ったスクリーンのidでidの指定はできません。 |
sid [sid.]screenmouseall('siki') sid [sid.]screenmouseover('siki') sid [sid.]screenmouseout('siki') sid [sid.]screenmousemove('siki') sid [sid.]screenmousedown('siki') sid [sid.]screenmouseup('siki') sid [sid.]screenmouseclick('siki') | SVGとcanvasに共通です。グラフィックスクリーン上でのマウスイベントの処理を指定します。mouseallはすべてのマウスイベントにまとめて設定します。常に同じカーソル表示をする場合などいちいち個別に設定しなくてすみます。 'siki'は式を文字列として記載しCALCの式として評価されます。解除するなら''(空文字)またはnullを設定します。文字列を返すとマウスがスクリーン内にあるときカーソル位置に表示されます。なお上記設定によらずグラフィック番号("Graphic1"とか)は常に表示されます(画像保存の番号選択のため)。sidはスクリーンidですが省略されると現在の描画スクリーンに対して設定します。設定したスクリーンのidを返します。なおこの動作は割込で処理されますが割込処理中はブラウザとのやりとりは行われません。そのため一部の関数(input()等)は使えず(エラーになります)、画面書き換え等も割込処理が終了してからの動作となります。 同じスクリーンに複数のイベントを設定した場合ブラウザによってイベントの発生の有無や順序が異なり(特にclick,down,up)なかなか思い通りにならなかったり、またマウスの動きが速いと(特にmoveで)追従や動作しない場合があります。 |
スクリーン画面をダブルクリックするとマウス座標を表示して10秒間その値を記憶し、その間にプログラムの座標を記入したいところをクリックすればそこに座標が"X,Y"の形で挿入されます。描画関数の引数に位置の値を入れるのに使用します。慣れると描画タグのコピーペーストと組み合わせて楽にタグを書き込めます。10秒以内にスクリーン画面で再度ダブルクリックすると表示と記憶は消されます。座標が記憶されている間はダブルクリックしたマウスカーソルの位置にその旨表示されているので判別が可能です。XとYはスクリーン内部の描画座標、(x,y)は画面上の見かけのピクセル数で、挿入されるのは描画座標のほうです。スクリーンへの拡大縮小や位置補正がかかっていなければこれらは同じで描画座標のみ表示されます。描画タグへの位置補正zoom,rotate,shiftが有効の場合値がずれますのでご注意ください。 |
以下グラフィック描画パラメータの設定関数です。SVGとCANVASに共通で現在選択されているスクリーンに対し設定します。 |
void pen(w,"lc","lj") | 図形を描く筆を準備します。wは太さ(float)で初期値は1.0、1以下を指定すると色が薄くなりそれらしくみえます。lcは筆先の形状で文字列"butt","round","square"のいずれか(初期値は"butt")、ljは接続部の形状で"miter","round","bevel"のいずれか(初期値は"miter")です。詳しくはSVGのstroke-linecap,stroke-linejoinを検索参照してください。与えられた引数の値のみセット(変更)されます。 |
void pendash([l1,l2,...]) | 破線を描く設定をします。引数は描画する線の長さ,描画しない線の長さを交互に指定します。与えた引数のみでセットされます(引数省略機能は動作しません)。引数が1個か与えられなければ普通の直線にリセットされます。一部のブラウザのcanvasではうまく動作しません。 |
void color("c1","c2",o1,o2) | 描画色および色の不透明度を設定します。c1,c2は色を表す文字列で、c1は主色(主に図形の外形、線の色、文字の色)、c2は副色(図形内部や文字の縁取り等)の色です。o1,o2は数値(float)で0.0~1.0の値、o1は主色の不透明度(0:透明,1:不透明)、o2は副色の不透明度です。不透明度は色の方にagba()を使って設定してもかまいませんが両方混ぜて使うと競合して思い通りになりませんのでどちらか一方だけにしておくのがいいです。色の表現は"transparent"(透明)のほか、"white","red","blue"などの色名称(WEB標準色)、3原色16進指定"#000"(黒)~"#FFF"(白)、"#000000"(黒)~"#FFFFFF"(白)、"rgb()"、"rgba()"などが可能です。空文字("")は透明になります。与えられた引数の値のみセット(変更)されます。初期値はc1が黒("black")、c2が透明("transparent")、o1,o2は共に1.0(不透明)ですが副色c2の初期値は色が設定されていないので実際には透明になります(色を指定したとき効果を発揮します)。 |
void font("style","weight","family") | テキストを書くのに使用するフォントのスタイル、太さ、種類を設定します。styleは"normal"(標準体),"italic"(イタリック体),"oblique"(斜体...日本語フォントでは概ねitalicと同じ),"small-caps"(英小文字を小さな大文字で表示しますが無視される場合が多いです)で複数なら間を空白で区切ります。weightは"normal"(標準)、"bold"(太字)または"100"~"900"の太さを表す数字です。familyは書体(フォント)名ですが"monospace","sans-serif","serif","cursive","fantasy"等一般的なフォント指定で指定しておくのが安全そうです(なければPCやブラウザのディフォルトのフォントになるけどむしろもくろみからは遠いかもしれない)。ディフォルトは"normal","normal","monospace"です。与えられた引数の値のみ変更されます。返り値はありません。 |
void anchor(x,y) void scale(zx,zy,zp) void zoom(zx,zy,zp) void rotate(angle) void turn(angle) void rotated(angle) void turnd(angle) void translate(x,y) void shift(x,y) | 今後の描画時の描画位置などの補正をします。すでに描いてしまった図形には影響しません。またスクリーンそのものに設定する表示時の拡大縮小や位置の移動とは別です。 anchorはscale,zoom、およびrotate,turnの基準点を設定します。ディフォルト値はどちらも0です。 scale,zoomは拡大縮小で、縮尺は横方向zxと縦方向zyの位置や寸法、縮尺で線が細くあるいは太くなりすぎて見にくくなったときの線幅補正zp(縦横はなし、縮尺された線幅に対して)を指定できます。ディフォルト値はすべて1.0(等倍)です。scaleとzoomは同じです。 rotate,turnは回転で角度の単位はラジアン、時計回りが正の値です。rotated,turndは角度の単位は度(degree)です。ディフォルト値は0(回転なし)です。rotateとturnは同じです。 translate,shiftは横及び縦方向の平行移動で単位はピクセルです。ディフォルト値はどちらも0(移動なし)です。translateとshiftは同じです。translate,shiftは元の座標系で行われ、scale及びrotateの影響は受けません(そうしておかないと計算がめんどうでわけがわからなくなった)。 処理はscale->rotate->translateの順に行われます。いったん設定するとずっと有効になるので必要な処理が終わったら戻してください。save()とrestore()を使えばいちいち値を指定せず戻せます。 斜めの図形を描いたり、すでに書いてしまったコードで一部大きさや位置を変更・修正したり、またSVGではこれを使って図形を書き直すことにより動かしたりすることもできます。 |
int save([idnum]) int store([idnum]) int restore([idnum]) | save()とstore()は上記pen()からrotate()までの関数で設定されたパラメータを保存し、restore()はそれを復元します。saveとstoreは同じです。引数がないなら自動でデータをpush/popしますのでsave()とrestore()は正しく対応していないといけません。正の整数が引数idnumとして指定されればその番号で保存/復元しますがこの場合は自動的なpush/popはしません。手動指定する場合の引数の番号は引数なしの自動採番(1から)とかぶらないようある程度大きな番号を指定するのが確かです。保存された、あるいは復元されたパラメータのid番号を返します。 |
以下グラフィックの描画関数です。現在選択されているスクリーンに対し描画します。 頭がc_のものはCANVAS用でCANVASスクリーンに描画し、それ以外はSVGスクリーンに描画します。 SVGでは描画タグのid(tid)を返し、tid.line(...)などの形で書き換えができます。tidは1からタグ作成順につけられます。tidは手動での指定もできますが自動のid番号と重ならないような充分大きな値(推奨90000以上)をお薦めします。手動idのタグは自動作成されませんのでタグの作成は tid=90001;tid.line(...); あるいは 90001.text(...); などの形になります。同じ描画関数をスクリーンをまたいで使用するなどでタグidを固定したい場合に手動指定を使用します。 なおいったんグラフィックに投入した描画タグの削除はできません。 |
tid [tid.]line(x1,y1,x2,y2) void c_line(x1,y1,x2,y2) | 直線を引きます。x1,y1,x2,y2は各々始点のx座標,y座標、終点のx座標,y座標です。SVGでは描いた図形タグのidを返し、idが指定されればそのidの図形を書き換えます。線の長さは小数でもかまいませんが短いと何も描かないブラウザがあり限界はよくわかりません。0.1くらいあればいいようです。 |
tid [tid.]rect(x,y,w,h,rx,ry) void c_rect(x,y,w,h) | 四角形を描きます。x,y,w,hは各々左上のx座標,y座標、四角形の幅,高さ、rx,ryは角の丸さ(SVGのみ)です。SVGでは描いた図形のidを返し、idが指定されればそのidの図形を書き換えます。 |
tid [tid.]circle(x,y,r) void c_circle(x,y,r) | 丸(円ともいう)を描きます。x,y,rは各々中心のx座標,y座標、半径です。SVGでは描いた図形のidを返し、idが指定されればそのidの図形を書き換えます。 |
tid [tid.]ellipse(x,y,rx,ry) void c_ellipse(x,y,rx,ry) | 楕円を描きます。x,y,rx,ryは各々中心のx座標,y座標、横半径、縦半径です。SVGでは描いた図形のidを返し、idが指定されればそのidの図形を書き換えます。 |
tid [tid.]text(x,y,"text","size","anc") void c_text(x,y,"text","size","anc") | テキストを書きます。xはテキストanc位置のx座標,yはテキストほぼ下側(フォントのベースライン?)のy座標、textはテキストの内容、sizeは大きさ("14px","12pt","1em","150%"などです。数字だけならピクセルとみなされます)、ancは左右基準位置の指定("start","left":文字の左下、"middle","center":中央下、"end","right":右下)です。テキストには改行は含ませない方が確かです。また表示されるテキストの長さはなぜかSVGとcanvasで、あるいは表示環境によってかなりのちがいが出て尻切れになることがあるので充分余裕をとってください。SVGでは描いた図形のidを返し、idが指定されればそのidの図形を書き換えます。 |
tid [tid.]point(x,y,w,h) void c_point(x,y,w,h) | 座標x,yを中心に四角の点を打ちます。x,y,w,hは各々中心のx座標,y座標、幅、高さです。pen()の値は使いません。SVGでは描いた図形のidを返し、idが指定されればそのidの図形を書き換えます。 ...ただしSVGで大量の点をうつとだんだんグラフィックデータが重くなり最後にはブラウザが固まるかこけます。数千ポイント程度を上限としてください。大量に点を打つならcanvas関数c_point()をお使いください。 |
pid [pid.]path() void c_path() void c_drawpath() | path()は多角形、円弧、曲線など多彩な図形を描く手順(いわゆるパス)を設定します。svgでidが指定されなければ、あるいはcanvasでは新しいパスの開始を宣言しますがこの段階ではまだ何も描かれません。色や線の太さなどのパラメータはSVGではパス宣言時、canvasではc_drawpath()実行時に取り込まれ適用されます。新しいパスの最初のコマンドはmoveto()でなくてはなりません。SVGでは設定されたパスのidを返し、idが指定されればパスをそのidに切り替えパラメータを取り込み直して再描画します。一方canvasの場合(c_path())では(あれば)現行のパスを終了し新しいパスを設定しますが既存のパスはc_drawpath()を実行しないと何も描画されませんのでお気をつけください。 描画はSVGの場合描画コマンドの都度自動的に行われますがcanvasではc_drawpath()で行われます。canvasで都度描画しますと透明度を設定した場合上書きで効果が変わってきます(透明度を低く設定しておいて幾度も上書きしてじわっと表示するのには使えますが)。 以下はパスへの描画コマンドですが、いったんパスに投入された個々の描画コマンドの削除や変更はできません。 |
pid [pid.]moveto(x,y) void c_moveto(x,y) | パスの始点として座標x,yを設定します。ペンをそこに持っていくイメージです。path(),c_path()を宣言したら最初に実行する必要があります。また描画コマンドの間でもかまいません。SVGでは設定したパスのidを返し、idにpath()で返されたid番号を指定するとそのパスに新しい始点の座標を設定します。 |
pid [pid.]lineto(x,y) void c_lineto(x,y) | パスの始点から座標x,yに直線を引きx,yを新しい始点に設定します。多角形を描くときはlineto()を必要回数続けて最後にclosepath()します。SVGでは描画したパスのidを返し、idにpath()で返されたid番号を指定するとそのパスに描画します。 |
pid [pid.]ellipseto(x,y,rx,ry,ro,sf)
| 楕円弧を描きますが話が難しいです。パスの始点から座標x,yを終点とし、x軸半径rx、y軸半径ryで、角度ro(単位は度)だけ回転した楕円の楕円弧を描きますが、そのような楕円は2つ考えられ、さらに始点から終点まで4つの弧が想定されます(左図参照、交点が始点終点)。だからsfの値0~3でその弧を選びます。半径の指定が小さく指定点を通らないなら半径は自動的に拡大されます。...真円ならともかく傾いた楕円ともなるとパラメータが直感的に設定しにくいのが難です。描画後x,yを新しい始点に設定します。idにpath()で返されたidを指定するとそのパスに描画します。描画したパスのidを返します。 |
void c_arc(cx,cy,r,sa,ea,cc) | 円弧を描きます。点(cx,cy)を中心として半径rの円または円弧を描きます。sa,eaは開始終了の円弧の角度で0から2*PI。ccは円弧を描く方向でtrueなら反時計回りになります。線は開始点から円弧のsaにあたる点に引かれ円弧が描かれ円弧の終了点が次のパスの開始点になります。値は返しません。 |
void c_arcto(x1,y1,x2,y2,r)
| 円弧を描きますがこちらも話が難しいです。始点(x0,y0)からx1,y1への直線とx1,y1からx2,y2への直線に接する半径rの円を考え、始点から円との接点までの直線、その接点からもう一つの直線との接点まで円弧を描きます。canvasの場合は円で楕円にはなりません。値は返しません。 |
pid [pid.]curveto(x,y,df) void c_curveto(x,y,df) | 前回のパスを参考にしてパスの始点から座標x,yに曲線を引きx,yを新しい始点に設定します。少ない点でなめらかな曲線にしたいとき使用しますが、あまり細かい範囲で使用したり急に折れ曲がったりすると振動したりしてかえっておかしな描画になることがあります。引数dfはそれを抑えるためのダンパー係数で0.0~1.0を指定できます(ディフォルトは0.5、ダンパーなしが0.0、1.0だとフルダンパーで直線描画になります)。SVGではidにpath()で返されたid番号を指定するとそのパスに描画します。描画したパスのidを返します。 |
pid [pid.]closepath() void c_closepath() | パスの最後の点からmoveto()で設定された最初の点へ直線を引き図形を閉じます。path()コマンドを閉じる(終了する)のではありません。多角形を描くときはlineto()を必要回数続けて最後にclosepath()します。SVGではidにpath()で返されたid番号を指定するとそのパスに描画します。描画したパスのidを返します。 |
str [sid.]getsvgcode(sn) | 編集・チェック用の関数です。指定された、あるいは無指定なら現在有効なグラフィックスクリーンのSVGコード(タグを表示用に変換したもの)を返します。引数snで単なる整数でのスクリーン指定も受け付けます(sn優先、テストあるいはチェック用)。canvas部分は取り除かれます。printすればSVGグラフィックのコードが表示されます。printして表示されたコードをそのまま他のホームページにコピーペーストしてSVG画像を表示させることもできます。 |
void showpoint(r) void c_showpoint(r) | 編集・チェック用の関数です。r>=1なら描画タグの指定点に○(canvasでは□)印を表示します。rは○(□)の大きさ(半径または片側)です。パスのmoveto()は緑、lineto()は青、curveto()は赤、その他のパスは紫、パス以外のタグ(point,c_pointを除く)は茶色で表示されます。 |