93のブロマガ

自分用凄くどうでもいいAviUtl用スクリプトのメモ

2014/05/04 11:41 投稿

  • タグ:
  • AviUtl

https://www.dropbox.com/s/2euc982wa45xmz2/position%28n%29.aup
サンプル
5/5 更新 ちょっと訂正があります
+++++++++++++++

function position(n)
--[[ A=position() 等と書くと Aに三次元の座標テーブルを収める
nは倍率、0だとアニメーション効果等による座標の移動を無視する。引数省略可]]

local oX,oY,oZ = obj.ox, obj.oy, obj.oz
if n==nil then n=1 end
if n==0 then oX,oY,oZ=0,0,0; n=1 end
local Pos={}
Pos[1]=(obj.x+oX)*n
Pos[2]=(obj.y+oY)*n
Pos[3]=(obj.z+oZ)*n

return Pos
end


なにこれ
座標を変数(テーブル)で外に出したい場合
A={obj.x+obj.ox,obj.y+obj.oy,obj.z+obj.oz}
と書かずとも
A=position()
と書けば全く同じ意味に。すごくどうでも良い!
カッコの中に数値を入力すると座標に倍率を掛けます、マイナスで逆に。(多分使わない)
0を入れるとアニメーション効果の動きを無視します(トラックバーの値だけ取得)

----------------------------------------------------------

function linkpos(table,n)
--[[tableに三次元テーブルを受け取ると座標をリンクする
nは倍率、0だとアニメーション効果等による座標の移動を無視する]]
local OX,OY,OZ = obj.ox, obj.oy, obj.oz
if n==nil then n=1 end
if n==0 then OX,OY,OZ=0,0,0; n=1 end
obj.ox=OX+table[1]*n
obj.oy=OY+table[2]*n
obj.oz=OZ+table[3]*n
end


なにこれ
先程出した座標を収めた変数(テーブル)を使って他のオブジェクトに
リンクします、上のスクリプトと併用するといいかも

例えば。
レイヤー1に円を、スクリプト制御に A = position() と書く
他のレイヤーに四角を。位置は適当な場所に。スクリプト制御に
linkpos(A) と書く。
これで円の座標を動かすと四角も一緒に動きます。
linkpos(A,0.5)と書けば円の移動の半分だけ四角が移動します。マイナスなら逆方向。

---------------------------------------------------------

function margepos(pos)
--[[テーブルのマージ、

position()などで取得した複数のテーブルを一つのテーブルに纏める]]
local M={}
for i = 1,#pos do
M[i*3-2]=pos[i][1]; M[i*3-1]=pos[i][2]; M[i*3]=pos[i][3]
end
return M
end


なにこれ
座標テーブルを一つに纏めます
格子線などに図形の座標をリンクする場合
此方の動画では

レイヤー1のオブジェクトに ax=obj.x ay=obj.y az=obj.z
レイヤー2のオブジェクトに bx=obj.x by=obj.y bz=obj.z
レイヤー3のオブジェクトに cx=obj.x cy=obj.y cz=obj.z
anchor = {ax,ay,az, bx,by,bz ,cx,cy,cz}
anchor を格子線の座標に入力、と言った感じでしたが

これを使うと
レイヤー1のオブジェクトに a=position()
レイヤー2のオブジェクトに b=position()
レイヤー3のオブジェクトに c=position()
anchor = marge({a,b,c})
格子線の座標にanchor で終わりです。ちょっとだけ楽
引数にはカッコ{} 必須です。marge(a,b,c)だとダメ。
可変引数をどう扱えばいいのかよくわかりませんでした。

訂正:: 格子線の座標に直接 marge({a,b,c}) でOKですね。
------------------------------------------------------------

おしまい
自分が楽したい用途です。
グループ制御による立方体空間に収めたくない方向け
※AviUtlを起動したら上の3つ灰色で書いたものを
図形などにスクリプト制御を置き、そこにコピペ。
&実行(=赤いカーソルが重なればいいだけ)すると
position(n)とlinkpos(n)、margepos(pos)
使えるようになります。
=AviUtlを再起動した場合は一度このスクリプトがある部分を
赤いカーソルが通過しないと使えません。
position, linkpos,margepos,の部分は好きに名前を変えて構いません
只の名前なので一文字でも(他のスクリプトと被って無ければ)大丈夫
数字は使えないっぽい

コメント

コメントはまだありません
コメントを書き込むにはログインしてください。

いまブロマガで人気の記事