« 最優秀クラウド賞。 | トップページ | 木馬責めの彼。 »

2012年5月17日 (木)

テクスチャリンク切れはもううんざりですよね。

ええ、うんざりです。





ひとまずやっつけで。



JScript
----------------------------------------------------------------

DefPath = "";


var oImageSources = FilterImageSource( Selection );
if ( oImageSources.count == 0 )
{
    Logmessage( "ドルァ" );
}
else
{
    var oP = XSIFactory.CreateObject( "CustomProperty" );
    oP.name = "テクスチャリンク切れはもううんざりですよね。";
    oP.AddParameter2( "sPath", siString, DefPath );
    var oL = oP.PPGLayout;
    oL.AddSpacer( 0, 150 );
    var oItem = oL.AddItem( "sPath", "Path", siControlFolder );
    oItem.SetAttribute( siUINoLabel, true );
   
    Inspect = InspectObj( oP, null, null, siModal, false );
    if ( !Inspect )
    {
        PicPath = oP.sPath.value;
        for ( var i=0; i<oImageSources.count; i++ )
        {
            var oSrc = oImageSources(i);
            OldPath = oSrc.FileName.value;
            aPath = OldPath.split( "\\" );
            NewPath = PicPath + "\\" + aPath[ aPath.length-1 ];

            Logmessage( OldPath + " -> " + PicPath + aPath[ aPath.length-1 ] );   
            oSrc.FileName.value = NewPath;
        }
    }
    else
    {
        Logmessage( "モルァ" );
    }
}


function FilterImageSource( in_Objs )
{
    var oCol = XSIFactory.CreateObject( "XSI.Collection" );
    for ( var i=0; i<in_Objs.count; i++ )
    {
        if ( in_Objs(i).type == "ImageSource" )
        {
            oCol.Add( in_Objs(i) );
        }
    }
    return oCol;
}

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



使い方。
ExplorerSources/Clips モードにします。
テクスチャのリンクが切れている Image Source を選択します(複数可)。
スクリプトを実行します。
ダイアログで、テクスチャがあるフォルダを選択してOK押します。
するとテクスチャのリンクが指定したフォルダ以下のその画像ファイルに貼り直されます。
以上。



エラーチェックも何もしていません。 そのフォルダに実際にそのテクスチャ画像ファイルがあろうとなかろうと、強制的に Image Source の FileName パラメータを書き換えます。 
なので目的の画像ファイルが存在しないフォルダを選んでしまうと、そもそもリンク切れではなかったものがリンク切れになってしまうことすらあり得ます。


基本的に、テクスチャ画像ファイルのファイル名は同一のままフォルダだけ移動させたとかそういう時に使います。そのフォルダ以下に、元のファイル名と同名でテクスチャ画像ファイルがあると分かっている時以外は、使ってはいけません。かえっておかしくなります。





いずれ改良するつもりですが、現状は最低限仕様です。危険です。


ちなみにスクリプトの冒頭でデフォルトのフォルダPathを書いておけば、起動した時にその Path が既に入力されている状態になっているので、少し楽かも知れません。

  DefPath = "";


この "" の中に、C:\\junki\\Pictures などと書いておけばいいということです。 なぜかバックスラッシュは2個 \\ と書かねばなりません。 これ、なぜなのでしょう。 エスケープなんとか? 違いますか。



今後の改良点:

フォルダの存在の有無のチェック
フォルダ選択だけでなく、ファイル選択によっても Path を選べるようにする
テクスチャ画像ファイルが無かった場合はスルー
ImageSource 以外のものを選んでいても動くようにする
(例えば ImageClip とか、MatLib とか)


とかなんとか。
やるかも知れません。やらないかも知れません。分かりません。



ではでは。

|

« 最優秀クラウド賞。 | トップページ | 木馬責めの彼。 »

コメント

コメントを書く



(ウェブ上には掲載しません)




トラックバック

この記事のトラックバックURL:
http://app.cocolog-nifty.com/t/trackback/217974/54623101

この記事へのトラックバック一覧です: テクスチャリンク切れはもううんざりですよね。:

« 最優秀クラウド賞。 | トップページ | 木馬責めの彼。 »