CopyExtFilesIntoProject

導入

v1.0

カテゴリ

ファイル

詳細

現在のシーンによって使用されているすべての外部ファイルを、現在のプロジェクトまたは指定のプロジェクトにコピーします。 このコマンドにより、プロジェクト内にシーンが自動的に含まれるようシーン別に外部ファイルを取りまとめることができます。 つまり、プロジェクトを zip 圧縮して別のコンピュータに解凍し、すべての外部ファイル(写真、オーディオなど)がその場所で使用できるようにすることが可能です。

ファイルは対応するディレクトリにコピーされます(例: 写真は Pictures ディレクトリにコピーされます)。

スクリプト構文

CopyExtFilesIntoProject( SceneFileName, [Overwrite], [Models], [UpdateSourcePaths], [Files], [IgnoreFilesFromRefModel] );

パラメータ

パラメータ タイプ 詳細
SceneFileName 文字列 シーンの完全パス名(目的のプロジェクト パス)。
Overwrite ブール ファイル(存在する場合)を上書きする場合は True

デフォルト値: False

Models 文字列 モデルのリストが指定されている場合は、そのモデルに関連するファイルのみがコピーされます。

デフォルト値: 選択されたオブジェクト

UpdateSourcePaths ブール True の場合、コピーされたファイルを持つすべてのソース オブジェクトがシーン内で更新されます。 現在のプロジェクトにコピーされた新しいファイルがシーンで使用されるため、このパスは現在のプロジェクトへの相対パスになります。 False の場合、ファイルはローカルにコピーされますが、シーンではコピー前のファイルが使用されます。 これは SaveAs コマンドでも同様です。

デフォルト値: True

Files 文字列 この引数を使用してコピーするファイルを指定できます。 引数を指定した場合は、Models 引数が無視されます。 ファイル名は、解決されたパスか、ファイル パスの GUID です。 GUID を使用するほうがレスポンスは向上します。 複数のファイルを指定する場合はセミコロン(;)で区切ります。
IgnoreFilesFromRefModel ブール 参照モデル内のオブジェクトが使用するファイルは変更できません。このファイルは、実際には元のモデル内にありシーンには存在しないためです。 シーンをロードするたびに、そのシーン内で参照されているモデルが元の場所から読み込まれます。 このため、これらのファイルのコピーを無視するほうが効率的であることがあります。

注: このパラメータを無効にすると、リファレンス モデルが参照しているファイルはコピーされますが、オブジェクトがロックされるため、そのパスのオブジェクト オーナーは変更されません。

デフォルト値: True

1. JScript の例

/*
        This example shows how to use CopyExtFilesIntoProject command to copy the 
        external files used by a scene to a new destination.
*/
NewScene( "", false );
Application.LogMessage ( "Current project: " + Application.ActiveProject );
var sPathNewProject = XSIUtils.BuildPath(
        Application.InstallationPath( siFactoryPath ), 
        "Data", "NewProject"
);
Application.CreateProject( sPathNewProject );
var sPathScn = XSIUtils.BuildPath(
        Application.InstallationPath( siProjectPath ),
        "Scenes", "Texturing", "Head.scn"
);
// Load a scene with textures
OpenScene( sPathScn, false );
var oScene = Application.ActiveProject.ActiveScene;
// Now copy all files in the new project, by setting the last argument to false 
// the source path is not updated but the file is copied.
var oImageSource = oScene.ImageClips(0).Source;
Application.LogMessage( "Before: " + oImageSource.Parameters("FileName").Value );
CopyExtFilesIntoProject( sPathNewProject, true, null, false );
Application.LogMessage( "After: " + oScene.ImageClips(0).Source.Parameters("FileName").Value );
// Now do the same but set the last argument to true, so we change the source
Application.LogMessage( "Before: " + oScene.ImageClips(0).Source.Parameters("FileName").Value );
CopyExtFilesIntoProject( sPathNewProject, true, null, true )
Application.LogMessage( "After: " + oScene.ImageClips(0).Source.Parameters("FileName").Value );
Application.LogMessage ( "Current project: " + Application.ActiveProject);
// Expected results (note that your_current_project_path will not change): 
// INFO : Current project: $XSI_HOME\Data\XSI_SAMPLES
// INFO : Before: $XSI_HOME/Application/rsrc/noIcon.pic
// INFO : After: $XSI_HOME/Application/rsrc/noIcon.pic
// INFO : Before: $XSI_HOME/Application/rsrc/noIcon.pic
// INFO : After: $XSI_HOME/Application/rsrc/noIcon.pic
// INFO : Current project: $XSI_HOME\Data\XSI_SAMPLES

2. Python の例

#
#     This example shows how to use CopyExtFilesIntoProject command to copy some 
#     specific files. This example is theorical because we copy some files that
#     are already under the pro7ject.
#
from win32com.client import constants as c
app = Application
sFactory = app.InstallationPath( c.siFactoryPath )
sProject = app.InstallationPath( c.siProjectPath )
sScene2Open = XSIUtils.BuildPath( sProject, "Scenes", "Texturing", "Head.scn" )
app.OpenScene( sScene2Open, 0, 0 )
# Note that the files are separated by a semi-colon
sFile1 = XSIUtils.BuildPath( sProject, "Pictures", "Checks.pic" )
sFile2 = XSIUtils.BuildPath( sFactory, "Application", "rsrc", "noIcon.pic" )
sFiles = sFile1 + ";" + sFile2
app.CopyExtFilesIntoProject( sProject, 1, "", 0, sFiles, 1 )

関連項目

SaveSceneAs ExportModel FileReference.GUID