CreateObjectFromPreset

導入

v1.0

詳細

プリセットを基準に新しいオブジェクトを作成して戻します。 オブジェクトは TransientObjectContainer 内に作成されるため、シーン内には保持されず、シーン Explorer にも表示されません。 この領域は新しいシーンがロードされるたびにフラッシュされます。 このコマンドは、以下の例に示すとおり、一時的な CustomProperty オブジェクトを作成する際に便利です。

スクリプト構文

oReturn = CreateObjectFromPreset( PresetObj, [Name] );

戻り値

新規に作成されたオブジェクトを戻します。

パラメータ

パラメータ タイプ 説明
PresetObj 文字列 プリセット オブジェクトまたはプリセット ファイルの完全パス。 「モデル プリセット」、「パス プリセット」、「プリミティブ プリセット」、「プロパティ プリセット」、および「シェーダ プリセット」を参照してください。
Name 文字列 作成されるオブジェクトにつける名前

JScript の例

/*

	Example of creating a temporary custom property (aka custom pset).

	This can be useful for showing a temporary yet non-modal custom pset

	to the user.  The user doesn//t have to close the PPG immediately

	yet the object does not clutter up the scene file.

*/

NewScene( "", false );

// Demonstrate how you can use it to create a built-in custom pset

var oAnnotation = CreateTemporaryCustomPSet( "Annotation", Application.InstallationPath(siFactoryPath), "MyA" );

if ( oAnnotation ) {

	InspectObj( oAnnotation, "", "Annotation Test", siModal, false );

}

// Create an instance of one of the SDK workgroup sample psets

var presetpath = XSIUtils.BuildPath(

	Application.InstallationPath( siFactoryPath ),

	"XSISDK", "examples", "workgroup", "Addons", "PSetUIDemo"

);

var oPSetUIDemo = CreateTemporaryCustomPSet( "PSetUIDemo", presetpath, "" );

if ( oPSetUIDemo ) {

	InspectObj( oPSetUIDemo, "", "PSetUIDemo Test", siModal, false );

}

// Now the following lines will log, declaring that these instances live inside the TransientObjectContainer:

// INFO : Full path of Annotation instance is: TransientObjectContainer.MyA

// INFO : Full path of PSetUIDemo instance is: TransientObjectContainer.PSetUIDemo

// ... but nothing exists under the Scene_Root...

var oProp = Application.ActiveSceneRoot.Properties("PSetUIDemo");

if (oProp == null || typeof(oProp) == "undefined") {

	Application.LogMessage( "No instances found." );

} else {

	Application.LogMessage( "Found an instance." );

}

// INFO : No instances found.

// ... until you apply it

Application.ActiveSceneRoot.AddProperty( XSIUtils.BuildPath(presetpath, "Data", "DSPresets", "Properties", "PSetUIDemo.Preset") );

oProp = Application.ActiveSceneRoot.Properties("PSetUIDemo");

if (oProp == null || typeof(oProp) == "undefined") {

	Application.LogMessage( "No instances found." );

} else {

	Application.LogMessage( "Found an instance." );

}

// INFO : Found an instance.

// Function CreateTemporaryCustomPSet

// Creates a temporary custom property set.  This does not appear in the scene explorer and you do not have to

// worry about deleting it.

//

// in_PresetName - Name of the preset, which normally matches the name of the spdl file.  Do not include the extension

// in_PresetLocation - May be one of the siInstallationPath values (e.g. siUserPath, siUserAddonPath, etc.) or a string path

// in_CustomPSetName - Desired name for the new object, or leave empty for default behavior

//

// Return Value: newly created custom pset

function CreateTemporaryCustomPSet( in_PresetName, in_PresetLocation, in_CustomPSetName )

{

	var oPSet;

	// Last argument is optional

	if ( in_CustomPSetName == "" ) {

		in_CustomPSetName = in_PresetName;

	}

	// Figure out whether this is a string path or an siInstallationPath value

	in_PresetLocation = ( typeof(in_PresetLocation) == "string" ) 

		? in_PresetLocation

		: Application.InstallationPath(in_PresetLocation);

	var presetFullPath = XSIUtils.BuildPath( 

		in_PresetLocation, "Data", "DSPresets", "Properties", in_PresetName + ".Preset"

	);

	try {

		oPSet = CreateObjectFromPreset( presetFullPath, in_CustomPSetName );

		Application.LogMessage( "Full path of " + in_PresetName + " instance is: " + oPSet.FullName );

	} catch(e) {

		Application.LogMessage( "Failed to create temporary instance of " + in_PresetName + " preset", siWarning );

		return null;

	}

	return oPSet;

}

関連項目

XSIFactory.CreateObjectFromPreset CreatePreset LoadPreset SavePreset SIGetPreset SILoadPreset SIAddPropEx