|
[VML考察1]
[VML考察2] [VML fill] [VML stroke] [VMLのshadowサブエレメント] [VML extructionの属性] [VMLのskewサブエレメント] [画像を回転] [VML作成]
|
VMLのツール紹介・関連サイト・shapeエレメントのサブエレメントであるpathのいくつかと楕円コマンドなど。 |
VMLの考察1---間違いがある場合はご容赦を(できれば教えてくださいませ)。 [はじめに] 参考サイト一覧 VML Reference(MSDN):http://msdn.microsoft.com/library/default.asp?url=/workshop/author/vml/SHAPE/introduction.asp(英語) VMLとTIMEのお部屋(のほほん気分なHP):http://www5b.biglobe.ne.jp/~bichan/vml/vml.htm(日本語--実践的解説) ベクトルマークアップ言語(VML)-W3Cノート(どら猫本舗):http://www.doraneko.org/misc/vml/19980513/Overview.html(日本語訳)他 [ツール紹介] VMLをワードやエクセル上で編集する際に便利なScriptEditorの使い方:http://5.pro.tok2.com/~ayanaotakashun/cgi-bin/dbf/profile.cgi?_v=1098531533&tpl=view(雛形倶楽部データベース)VML【WORD】での ロゴの作り方:http://5.pro.tok2.com/~ayanaotakashun/kouza/onepoint/018/one018.htm(雛形倶楽部ワンポイントレッスンより) VMLのパスを得たり、VML図形の確認に便利なツールを紹介しておきます。どちらも”あやなおたかしゅん”さんの好意により提供されています。 VML ベクトル図形作成ツール:http://5.pro.tok2.com/~ayanaotakashun/sample/vml1/vml1_d.htm VML タグ形状確認ツール:http://5.pro.tok2.com/~ayanaotakashun/kouza/onepoint/010/one010.htm 作成ツールで一旦「全消去」を行い、原点を調整してから、「汎用的な形(shape)&パス(path)」を選択してタグをコピーし、確認ツールに貼り付けます。具体的な作成例はVML
作成ページを参照ください。 例: サブパスやパスについて「閉じる」「閉じない」「閉じている」「閉じていない」「開いている」など表現しているところがあります。 クローズドパスの例 複数の直線で連結しているパスであるが、xコマンドにより閉じられる。つまり終点座標は(400,0)ではなく、(50,50)が本質的には正しい。
オープンパスの例 複数の3次ベジエ曲線を連結しているパスであり、開始点と終了点が異なりxコマンドで閉じてもいないので開いたままになっている。このサブパス描画後の現在位置は(200,50)になる。 shapeのpathについて ・OutlookExpressにVMLを使用すると、座標区切りが半角スペースからコンマ(",")となったり、"x wa"は"wrになったりが起こりますが、意味的には同じことなので問題ありません。"x wa"はxにより前のサブパスが閉じられるためwaで楕円を描く場合にwrで楕円を描くのと同等になることのようですが、ちょっと違うような気がします。"x"コマンドが無い場合は閉じられないので、"wa"と"wr"の意味合いが変わってきます。"wa"は前のサブパスに引き継いで楕円を描きますが、"wr"は前のパスとは別に新たに楕円を描きます。"x wa"は"wr"に書き換えられるのも納得ですね。”x at"も"ar"に書き換えられます。他にもOEではstrokeweightがピクセルではなくポイントに変換されます。 path="サブパス サブパス 〜〜"のように一つのshapeに複数のサブパスを記述して汎用図形を書き連ねることができます。 コマンドについてはhttp://www.doraneko.org/misc/vml/19980513/Overview.html#_Toc416858391を参照ください。 円弧を描くサブパス(wa wr at ar)
xc=(x1+x2)÷2、yc=(y1+y2)÷2。x1 x2 x3 x4 y1 y2 y3 y4は整数でなければならない(小数部分は切り捨てられる)。 試しに小数点使用すると(1単位2ピクセル) <v:shape strokecolor="black" stroked="t"
fillcolor="red" strokeweight="3" style="width:160;
height:160; rotation:0;" coordsize="80 80" coordorigin="0
0" path="wa 200 200 400 400 200 200 200 200"></v:shape> "wa x1 y1 x2 y2 x3 y3 x4 y4 x" ※円弧の開始点と終了点を結ぶ直線を弦といいます。
ベクトルは本来方向と大きさを表す概念であるが、ここでは角度を得るために指定されるのであって大きさは問題にならない。 例として中心がC(15,-10)の場合、P3(x3,y3)=(5,-8)としても、P3(x3,y3)=(-5,-6)としてもCP→のベクトル方向は同じである。 "at x1 y1 x2 y2 x3 y3 x4 y4 x"
単に楕円を描くだけなら・・・ほぼ完全な楕円(楕円サイズによっては終了ベクトルと開始ベクトルの角度差が大きくなることもありますが、想定内でしょう???・・・意味不明。大きく楕円形が崩れることはないという意味です。) wa、wrの場合、path="wa x1 y1 x2 y2 x3 y3 x4 y4"或いはpath="wr
x1 y1 x2 y2 x3 y3 x4 y4"とした場合、x3=x1、y3=y1、x4=x1、y4=y1+1とすれば楕円になります。x3=x1、y3=y1、x4=x1-1、y4=y1としてもOKです。他にも簡単な座標計算はありますが。 at、arの場合、path="at x1 y1 x2 y2 x3 y3 x4 y4"或いはpath="ar
x1 y1 x2 y2 x3 y3 x4 y4"とした場合、x3=x1、y3=y1、x4=x1+1、y4=y1とすれば楕円になります。x3=x1、y3=y1、x4=x1、y4=y1-1としてもOKです。他にも簡単な座標計算はありますが。 ※ 次はx e コマンドを付ける付けないで、サブパスの連結がどう行われるかを見ていきたいと思います。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 wa 200 200 400 400 10 10 400 400"></v:shape> xコマンドなし。★は閉じられず、円弧の描画と連結される。星と円弧は閉じられていないひとつのサブパスを形成する。 waコマンドをwrコマンドに変えてみましょう。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 wr 200 200 400 400 10 10 400 400"></v:shape> 星は閉じられませんが、円弧は黙示的なmコマンドにより現在位置を変えて新たに描画されます。次のx
waとの違いにも注目してください。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80,0 l 60,65, 0,65, 50,100, 25,160, 80,120, 135,160, 110,100, 160,65 100,65 x wa 200 200 400 400 10 10 400 400"></v:shape> xコマンドで★を閉じてみる。星は開始点と終了点が直線で結ばれ線も描画される。円弧は星と直線で結ばれない。円弧にxコマンドが無いので閉じられず、円弧の描画開始点と描画終了点は直線で結ばれない。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80,0 l 60,65, 0,65, 50,100, 25,160, 80,120, 135,160, 110,100, 160,65 100,65 x wa 200 200 400 400 10 10 400 400 x"></v:shape> 上と同じだが、最後にxコマンドを追加してみる。円弧も閉じられたサブパスとなるため円弧の描画開始点と描画終了点は直線で結ばれる。 次に重ねた場合 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 wa 20 20 100 100 10 10 100 100"></v:shape> xコマンドなし。★は閉じられず、円弧の描画と連結される。星と円弧は閉じられていないひとつのサブパスを形成する。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 x wa 20 20 100 100 10 10 100 100"></v:shape> xコマンドで★を閉じてみる。星は開始点と終了点が直線で結ばれ線も描画される。円弧は星と直線で結ばれない。円弧にxコマンドが無いので閉じられず、円弧の描画開始点と描画終了点は直線で結ばれない。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 x wa 20 20 100 100 10 10 100 100 x"></v:shape> 上と同じだが、最後にxコマンドを追加してみる。円弧も閉じられたサブパスとなるため円弧の描画開始点と描画終了点は直線で結ばれる。 eコマンドでサブパスを独立させる。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 e wa 20 20 100 100 10 10 100 100"></v:shape> xコマンドなし。★は閉じられないが、円弧の描画と独立する。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 x e wa 20 20 100 100 10 10 100 100"></v:shape> xコマンドで星を閉じる。★は円弧の描画と独立する。円弧のパスは閉じられない。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 x e wa 20 20 100 100 10 10 100 100 x"></v:shape> 上と同じだが、最後にxコマンドを追加してみる。xコマンドで星を閉じる。★は円弧の描画と独立する。円弧も閉じられたサブパスとなるため円弧の描画開始点と描画終了点は直線で結ばれる。 eコマンドはそれまでのサブパスを終了させ、以降のサブパスを独立させて描画開始すると考えればいいだろう。 xコマンドはサブパス(複数のサブパスで構成された場合も)の開始点と終了点を直線で結んで閉じ、直線を描画する。 例えば星と円弧をひとつのサブパスのように扱い、このサブパスを閉じると次のようになる。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 80 0 l 60 65 0 65 50 100 25 160 80 120 135 160 110 100 160 65 100 65 wa 200 200 400 400 10 10 400 400 x"></v:shape> どうだろうか。星のサブパス開始点と円弧のサブパス終了点は直線で結ばれ、線として表示されている。 mコマンドで現在位置を変えてみよう。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 m 30 50 m 250 10 m 70 0 x e"></v:shape> これはパスが無いので何も表示されない。しかしコンテンツは箱型になっている。[Ctrl]+[A}をしてみてください。 では直線lコマンドで結んでみる。mコマンドにより(30,50)=>(250,10)と現在位置が移動しているのが分かる。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 l 30 50 m 250 10 l 70 0 x e"></v:shape> mコマンドはサブパスをエンドすることにはならない(前のサブパスも閉じられないが移動した座標と前のサブパス終了点とは連結しない)。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 l 30 50 20 10 m 250 10 l 70 0 x e"></v:shape> 現在位置を前のサブパス終了点から移動しない場合は、mコマンドを必要としない。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 c 30 50 60 30 100 10 l 70 0 x e"></v:shape> 円弧の場合は描画終了点座標が分かりにくい(計算を必要とする場合が多い)ので、直線の描画開始座標の把握が難しい。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wa 0 0 30 50 0 0 30 50 l 70 0 x e"></v:shape> 次のはmコマンドで新たなサブパス開始にしないで、lコマンドで直線をつなげた場合。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 l 30 50 l 250 10 l 70 0 x e"></v:shape> 次のも同じ。直線は連結する。同じコマンドが続く場合、コマンドは省くことができる。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 l 30 50 250 10 70 0 x e"></v:shape> mコマンドの連続。これはパスが無いので何も表示されない。しかしコンテンツは箱型になっている。[Ctrl]+[A}をしてみてください。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="m 0 0 30 50 250 10 70 0 x e"></v:shape> waコマンドの連続。 <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3"
style="width:160;
height:160; rotation:0;" coordsize="160
160" coordorigin="0 0" path="wa 0 0 50 30 0 0 0 10 100 100
150 180 100 100 100 120"></v:shape> では次の場合は? <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wa 0 0 50 30 0 0 0 10 wa 100 100 150 180 100 100 100 120"></v:shape> <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wr 0 0 50 30 0 0 0 10 wr 100 100 150 180 100 100 100 120"></v:shape> <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wa 0 0 50 30 0 0 0 10 m 50 50 wa 100 100 150 180 100 100 100 120"></v:shape> 重ねると? <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wa 0 0 50 30 0 0 0 10 wa 10 10 60 40 0 0 0 20"></v:shape> <v:shape strokecolor="black" fillcolor="red" stroked="t" strokeweight="3" style="width:160; height:160; rotation:0;" coordsize="160 160" coordorigin="0 0" path="wr 0 0 50 30 0 0 0 10 wr 10 10 60 40 0 0 0 20"></v:shape> こういう場合はどうなるの?って・・・ [1」filled="true"であるshapeのpath内で、サブパスの塗りつぶしをなくす方法・・・同じパスを重ねるだけ。nfコマンドで特定の独立したサブパスだけを塗りつぶさないこともできます。これについてはVML 考察2で解説します。VML作成でも少し触れています。 例として楕円を透過させる。 同じサイズの楕円を同じ位置に描画させる。切り抜きは塗りつぶしだけに起こるので、線は重なっていても消えない。 <v:shape strokecolor="black" filled="true" fillcolor="#ffccff"
style="width:160; height:160; left:0; top:0; position:absolute; rotation:0;"
coordsize="80,80" coordorigin="0 0" path="wr 50 50
100 70 0 0 0 1 wr 50 50 100 70 0 0 0 1 x e"> 参考:nfコマンドを使うと、<v:shape strokecolor="black" filled="true" fillcolor="#ffccff" style="width:160; height:160; left:0; top:0; position:absolute; rotation:0;" coordsize="80,80" coordorigin="0 0" path="wr 50 50 100 70 0 0 0 nf x e"> 少しだけ位置をずらしてみたもの。ずれて重なっていない部分は塗りつぶしが行われている。 [2]サブパスがxコマンドで閉じられ、続いてwaコマンドで円弧を描いた場合(path="サブパス
x wa 〜")
|
|
|
|
|