Zip ファイル スクリプト パッケージ

この Zip ファイル スクリプト パッケージ ファイルは通常の .ms ファイルと同じように実行できます。ツールで必要な二次的なファイルは、メインのツール スクリプトの実行前に、パッケージ内で自動的に検出されるか、指定した場所に自動的に抽出されます。

スクリプト パッケージのファイル タイプは .mzp です。これらのスクリプト パッケージが、実行可能なスクリプト ファイルとして認識されるのは次のような場合です。

mzp パッケージ

パッケージのスタートアップ コントロール ファイルは mzp.run です。mzp パッケージを開くと、パッケージ内で mzp.run ファイルが検索されます。 ファイルが見つかると、その中のパッケージ コマンドが順番に実行されます。

パッケージ内に mzp.run コントロール ファイルがない場合、MAXScript ではすべてのファイルをシステムの Temp ディレクトリ内にある個別の一時ディレクトリに解凍し、その中の実行可能ファイルをすべて実行します。 このときの実行順序は決まっていません。mzp パッケージ内のスクリプト ファイルの種類には、ms、 .mse および ネストされた .mzp ファイルがあります

.mzp ファイルの内容が、既定の一時フォルダまたは mzp.run コントロール ファイルで定義された抽出先フォルダに抽出されるとき、MAXScriptでは、mzp ファイル内のフォルダ構造がすべてそのまま構築および複製されます。

mzp.run ファイル内の 「run」コマンドまたは前項で説明した既定の実行方法でパッケージ内のスクリプト ファイルを実行すると、.bmp イメージ ファイルや include ファイルなどのスクリプト実行中に開かれるファイルがパッケージ内で検索されます。 パッケージ内で検索されるのは相対パス名のファイルのみで、完全に指定されたパス(先頭にデバイス名が付くパス)の場合は指定された場所で検索されます

コマンドに指定するファイル名やディレクトリ名は、次のような文字だけで構成されている場合であれば二重引用符で囲む必要はなくなりました

英数字、_、$、*、.、-、\

。途中にスペースがあるファイル名や、上記のリストにない記号を使用するファイル名の場合は二重引用符で囲む必要があります。

例:

name "test package"
version 3
treeCopy flobber to $scripts
copy *.ms to $scripts\flobber\dobber
move foo.max $scenes
drop $scenes\foo.max

zip パッケージは、次のコマンドを 1 つ以上含むテキストファイルです。すべてオプションで省略可能です。

name "<package_name>" 	 

パッケージ名を指定します。

   

description "<text>"   

パッケージに関する説明です。通常、パッケージ内の readme ファイルで実行に関する追加指示を提供します。

   

version <number> 

パッケージのバージョン番号を返します。

   

extract to "<directory>" 

パッケージ内のファイルを抽出する場所を指定します。これは(ドライブ文字または から始まる)絶対パス名または相対名のどちらにすることもできます。相対名は、既定の一時ディレクトリに対して相対的であると解釈されます。MAX のメインの実行可能ディレクトリを指定するには、特別なプレフィックス $max を使用できます。

   

run "<script_file_name>" 

パッケージが MAXScript のメニュー項目[スクリプトを起動](MAXScript run)または fileIn() 関数を通して起動された場合に、指定されたスクリプト ファイルを実行します。複数の run コマンドを使用でき、コマンドは順番に実行されます。実行する明示的なスクリプト ファイルで指定された、 fileIn() 呼び出しを使用してパッケージが起動された場合、run コマンドは無視されます。 mzp.run ファイルの実行中は、「 run 」コマンドはすべて無視されます。詳細は、.mzp ドロップ プロトコルを参照してください。

   

drop "<dropScript_file_name>" 

パッケージが MAX へのドラッグアンドドロップで起動された場合に、指定された dropScript ファイルを実行します。指定できるファイルは 1 つの msp.startup ファイル内に 1 つだけです。

   

copy "<files>" to "<directory>" 

指定された 1 つまたは複数のファイル(<files> の文字列にワイルドカードが入っている場合)を所定のディレクトリにコピーします。ここでは特別なプレフィックス、 $max を使用できます。

   

clear temp 

指定されたスクリプトがすべて実行または解除されたときに、一時的に抽出したファイルを削除します。

   

clear temp on MAX exit 

現在実行されている MAX セッションが終了したときに、一時的に抽出したファイルを削除します。

   

clear temp on reset 

ファイルを開くかリセットが実行されたときに、一時的に抽出したファイルを削除します。

   

keep temp 

抽出されたファイルの削除を禁止します。

   

open <max_file_name> 

名前の付いた MAX シーン ファイルを開きます。

注: mzp.run ファイルの実行が i-drop イベントの最中にトリガされた場合、「 open 」コマンドはすべて無視されます。詳細は、.mzp ドロップ プロトコルを参照してください。

   

merge <max_file_name> 

名前の付いた MAX シーン ファイルを合成します。

注: mzp.run ファイルの実行が i-drop イベントの最中にトリガされた場合、「 merge 」コマンドはすべて無視されます。詳細は、.mzp ドロップ プロトコルを参照してください。

   

xref <max_file_name> 

名前の付いた MAX シーン ファイルを外部参照します。

注: mzp.run ファイルの実行が i-drop イベントの最中にトリガされた場合、「 xref 」コマンドはすべて無視されます。詳細は、.mzp ドロップ プロトコルを参照してください。

   

import <importable_file_name> 

指定されたファイルを読み込みます。

注: mzp.run ファイルの実行が i-drop イベントの最中にトリガされた場合、「 import 」コマンドはすべて無視されます。詳細は、.mzp ドロップ プロトコルを参照してください。

1 つの mzp.run ファイルで使用できる「 open 」または「 import 」コマンドは 1 つだけです。使用できる「 merge 」コマンドと「xref」コマンドの数に制限はありません。

ファイル検索:

現在のパッケージ ファイル内で相対ファイル名として指定されているファイルの検索は、次の関数によって行われます。

fileIn <filename>

include <filename>

openBitmap <filename>

   

editScript <filename> 
注:保存した場合の内容は、パッケージ内に反映されるのではなく、一時的な抽出ファイルに反映されます。

   

loadMAXFile <filename> 
mergeMAXFile <filename> ... 
getMAXFileObjectNames <filename> 
importFile <filename> ... 
loadMaterialLibrary <filename> 

ビットマップ検索:

指定された .bmp ビットマップ ファイルのパッケージ内での検索は、次の UI 項目によって行われます。

   

bitmap <name> fileName:<filename> 
button <name> images:<image_spec_array> 
checkButton <name> images:<image_spec_array> 

相対ファイル名には、次のようなパス名を入れることができます。

例:

fileIn "libs/myFns.ms"

この場合、抽出されたパッケージの「libs」フォルダ内で「myFns.ms」が検索されます。パッケージ内の内容は、必要に応じてネストしたどのフォルダにも配置することができます。実行スクリプトまたは mzp.run コントロール ファイル内のファイルの名前は、パッケージのディレクトリ構造に対して相対的に解釈されます。

コピーと移動:

copy "<from>" to "<to>" [noReplace] 
move "<from>" to "<to>" [noReplace] 
treeCopy "<from>" to "<to>" [noReplace] 
treeMove "<from>" to "<to>" [noReplace] 

これらは、パッケージ内のファイルを指定されたとおりにコピーまたは移動します。treeCopy と treeMove の場合は、ファイルの格納されているネストされたディレクトリ全体を移動します。既定の設定では、コピー先または移動先の場所に既存ファイルがある場合には、新しく抽出されたファイルで置き換えられます。これを防止するには、「noReplace」キーワードを追加します。

<to> には必ずディレクトリを指定します。treeCopy/Move は、ソース サブディレクトリを <to> で指定されたディレクトリ内に複製します。コピーおよび移動の <from> の指定には、相対ファイル名、絶対ファイル名、またはワイルドカード パターンを使用できます。相対ファイル名の場合は、パッケージ内の相対的な位置が検索されます。完全に指定された名前は、メインのファイルシステム内で検索されます。

treeCopy/Move の <from> には、ディレクトリのパスを指定できます。この場合、ディレクトリ全体およびそのサブディレクトリがコピー/移動されます。ワイルドカードによるパス名を指定した場合には、それに一致するファイルやディレクトリ ツリーのみがコピー/移動されます。

各種コマンド(extract to、run、copy、move など)には、$ で始まる特別なパス名も指定できます。 特別なパス名によって、現在実行されている MAX の中の場所を指定します。

$ で始まる名前で認識されるものには次のものがあります。

$max - main MAX executable directory 
$maps - first directory in Maps directory config 
$scenes - scenes directory 
$fonts - fonts directory 
$imports - imports directory 
$sounds - sounds directory 
$matlibs - matlibs directory 
$scripts - scripts 
$startupScripts - auto-load startup scripts 
$plugins - first in the Plug-ins directory config 
$plugcfg - plugcfg 
$images - images 
$ui - UI 
$macroScripts - macroScripts in UI directory 
$web - web directory 
$temp - system temp directory 

これらのディレクトリは、ユーザが各種ユーザ設定ダイアログ ボックスで設定したカスタマイズを反映します。

例:

複数のディレクトリのシーン ファイル、プラグイン ファイルとマップファイルを含むパッケージを構成した場合、次のように move コマンドを使用して、mzp.run ファイル内でこれらのファイルをインストールすることができます。

move "plug-ins\*.*" to "$plugins"
move "*.max" to "$scenes"
move "texmaps\*.bmp" to "$maps"
注:

追加機能として、パッケージ内から実行されるスクリプトに、実行スクリプトより存続期間が長い関数、macroScript、プラグイン、ロールアウト、主要 MAXScript 値または構文が定義される場合、そのパッケージは定義値または構文と「関連付け」られることになり、関数またはロールアウト/プラグイン/macroScript 内のハンドラが後に実行されるときに再び最初に検索されます。

Winzip:

.mzp は、WinZip のような zip ユーティリティで作成できます。その後、ユーティリティを .mzp タイプと関連付ければ、.mzp ファイルをダブルクリックするだけでそれをエディタで開けます。この関連付けは一度だけ行えば十分です。これには、Windows エクスプローラで .mzp ファイルを選択し、[Shift]を押しながら右クリックして、表示されるポップアップ メニューで[アプリケーションから開く...](Open with...)を選択します。表示されるアプリケーションのリストで必要な zip ユーティリティを見つけ、ダイアログ ボックスの最下部にある[この種類のファイルを開くときは、いつもこのアプリケーションを使う...](Always use this program ...)チェックボックスにチェックマークを付けます。

msZip インタフェース:

MAXScript zip パッケージ インタフェースでは、スクリプタから呼び出し可能な 2 つの MAXScript 関数を公開しています。

msZip.fileInPackage <mzpFilename> &<exractDirVar> 				  

「fileInPackage」関数は、本質的に次の関数と同じです。

fileIn <mzpFileName> 			

成功した場合は true、失敗した場合または .mzp ファイルが存在しないか無効な場合は false を返します。また、パッケージ ファイルの抽出先のディレクトリを参照渡しの引数 <extractDirVar> に返します。

例:

local extractDir = ""
if msZip.fileInPackage "foo.mzp" &extractDir then 
( 
-- extractDir contains the extracted-to directory name ... 
) 
msZip.unloadPackage <mzpFilename> &<exractDirVar> &<dropFileVar> 			 

「unloadPackage」関数は、抽出を行ってから、その中の mzp.run ファイル内にあるファイル コピー コマンドと移動コマンドをすべて実行します。ただし、パッケージ内のスクリプトは実行しません。extractTo ディレクトリと「ドロップ」コマンド ファイルは参照渡し引数で返されます。

例:

local extractDir = "", dropFile = ""
if msZip.unloadPackage "foo.mzp" &extractDir &dropFile then
(
-- extractDir contains the extracted-to directory name
-- dropFile contains any found drop file name (the path to extracted location )
...
)

関連事項