User Tools

Site Tools


Save Scene Asset(s)

Summary

Below is an example demonstrating how you can use script accessible settings to control the saving of Scene Asset(s)..., without causing the output options or file save dialogs to be displayed.

API Areas of Interest

Example

Save_Support_Asset_Scene.dsa
// Define an anonymous function;
// serves as our main loop,
// limits the scope of variables
(function(){
 
	// Initialize variables that hold modifier key state
	var g_bShiftPressed = false;
	var g_bControlPressed = false;
	var g_bAltPressed = false;
	var g_bMetaPressed = false;
 
	// If the "Action" global transient is defined, and its the correct type
	if( typeof( Action ) != "undefined" && Action.inherits( "DzScriptAction" ) ){
		// If the current key sequence for the action is not pressed
		if( !App.isKeySequenceDown( Action.shortcut ) ){
			updateModifierKeyState();
		}
	// If the "Action" global transient is not defined
	} else if( typeof( Action ) == "undefined" ) {
		updateModifierKeyState();
	}
 
	/*********************************************************************/
	// void : A function for updating the keyboard modifier state
	function updateModifierKeyState()
	{
		// Get the current modifier key state
		var nModifierState = App.modifierKeyState();
		// Update variables that hold modifier key state
		g_bShiftPressed = (nModifierState & 0x02000000) != 0;
		g_bControlPressed = (nModifierState & 0x04000000) != 0;
		g_bAltPressed = (nModifierState & 0x08000000) != 0;
		g_bMetaPressed = (nModifierState & 0x10000000) != 0;
	};
 
	/*********************************************************************/
	// void : A function for printing only if debugging
	function debug()
	{
		// If we're not debugging
		if( !g_bAltPressed ){
			// We're done...
			return;
		}
 
		// Convert the arguments object into an array
		var aArguments = [].slice.call( arguments );
 
		// Print the array
		print( aArguments.join(" ") );
	};
 
	/*********************************************************************/
	// String : A function for retrieving a translation if one exists
	function text( sText )
	{
		// If the version of the application supports qsTr()
		if( typeof( qsTr ) != "undefined" ){
			// Return the translated (if any) text
			return qsTr( sText );
		}
 
		// Return the original text
		return sText;
	};
 
	/*********************************************************************/
	// DzNode : A function for getting the root of a node
	function getRootNode( oNode )
	{
		// If a node is selected and it is a bone
		if( oNode && oNode.inherits( "DzBone" ) ){
			// We want the skeleton
			return oNode.getSkeleton();
		}
 
		// Return the original node
		return oNode;
	};
 
	/*********************************************************************/
	// void : A function for setting the support path options
	function setSupportPathOptions( oSettings, sBaseDataPath, sVendorName, sProductName, sItemName )
	{
		// Set base path for support assets to be saved to
		oSettings.setStringValue( "BaseDataPath", sBaseDataPath );
 
		// Set the vendor to the registered author
		var sVendor = App.getCurrentAuthor().name;
		// If a name was specified
		if( !sVendorName.isEmpty() ){
			// Use the specified name
			sVendor = sVendorName;
		}
 
		// If we still don't have a name
		if( sVendor.isEmpty() ){
			// Use a default
			sVendor = "Test Vendor";
		}
 
		// Set the vendor
		oSettings.setStringValue( "VendorName", sVendor );
 
		// If the product name is a non-empty string
		if( typeof( sProductName ) == "string" && !sProductName.isEmpty() ){
			// Set the product name to the one passed in
			oSettings.setStringValue( "ProductName", sProductName );
		// Otherwise
		} else {
			// Set the product name to a default
			oSettings.setStringValue( "ProductName", "Test Product" );
		}
 
		// If the item name is not empty
		if( typeof( sItemName ) == "string" && !sItemName.isEmpty() ){
			// Set the item name
			oSettings.setStringValue( "ItemName", sItemName );
		}
	};
 
	/*********************************************************************/
	// void : A function for setting the default options
	function setDefaultOptions( oSettings, sRootLabel )
	{
		// If the root label is not empty
		if( !sRootLabel.isEmpty() ){
			// Set the label of the root node to find it in the scene;
			// this can be used to override selection within the scene
			oSettings.setStringValue( "RootLabel", sRootLabel );
		}
	};
 
	/*********************************************************************/
	// void : A function for setting the required options
	function setRequiredOptions( oSettings, bShowOptions )
	{
		// Set the initial state of the compress file checkbox
		oSettings.setBoolValue( "CompressOutput", false );
 
		// Do not to show the options
		oSettings.setBoolValue( "RunSilent", !bShowOptions );
	};
 
	/*********************************************************************/
	// Get the asset IO manager
	var oAssetIOMgr = App.getAssetIOMgr();
	// Define the class name of the asset filter we want to use
	var sClassName = "DzSceneSupportAssetFilter";
	// Find the index of the asset filter with the class name we want
	var nAssetIOFilter = oAssetIOMgr.findFilter( sClassName );
	// If we didn't find an asset filter with the class name we wanted
	if( nAssetIOFilter < 0 ){
		// Inform the user
		MessageBox.critical( text("An asset filter with the class name " +
			"\"%1\" could not be found.").arg( sClassName ),
			text("Critical Error"), text("&OK") );
 
		// We're done...
		return;
	}
 
	// Get the asset filter at the prescribed index
	var oAssetIOFilter = oAssetIOMgr.getFilter( nAssetIOFilter );
	// If we do not have a valid asset filter
	if( !oAssetIOFilter ){
		// Inform the user
		MessageBox.critical( text("An asset filter with the class name " +
			"\"%1\" could not be found.").arg( sClassName ),
			text("Critical Error"), text("&OK") );
 
		// We're done...
		return;
	}
 
	// Create a settings object
	var oSettings = new DzFileIOSettings();
 
	// Get the default settings
	oAssetIOFilter.getDefaultOptions( oSettings );
 
	// Define whether or not to show options
	var bShowOptions = g_bControlPressed;
	var bOptionsShown = false;
 
	// Get the root of the primary selection
	var oRootNode = getRootNode( Scene.getPrimarySelection() );
 
	// If we had a node selected, get its name otherwise use a default
	var sRootName = (oRootNode ? oRootNode.getName() : "Genesis8Female");
	var sRootLabel = (oRootNode ? oRootNode.getLabel() : "");
 
	// Get the content manager
	var oContentMgr = App.getContentMgr();
 
	// Get the base path - the first mapped content directory
	var sBasePath = oContentMgr.getContentDirectoryPath( 0 );
 
	// Set the default options; this can be used to set
	// options before the dialog is displayed
	setDefaultOptions( oSettings, sRootLabel );
 
	// Set the support path options;
	// if the 3rd argument is "", the current author will be used;
	// the last argument is not supported by this filter
	setSupportPathOptions( oSettings, sBasePath, "Vendor Name", "Product Name", undefined );
 
	// Debug
	debug( "Defaults:", oSettings.toJsonString() );
 
	// If we are showing options, we can override the last saved state
	// by passing in the settings we want to override;
	// if we cannot get the default/saved options for the asset filter,
	// without displaying the options dialog
	if( !oAssetIOFilter.getOptions( oSettings, bShowOptions, "" ) ){
		// We're done...
		return;
	// If we can get the options for the importer
	} else {
		// Capture that options were shown
		bOptionsShown = true;
 
		// Debug
		debug( "Get:", oSettings.toJsonString() );
	}
 
	// If we are not showing options
	if( !bShowOptions ){
		// Set the support path options;
		// if the 3rd argument is "", the current author will be used;
		// the last argument is not supported by this filter
		//setSupportPathOptions( oSettings, sBasePath, "Vendor Name", "Product Name", undefined );
	}
 
	// Set the required options; override user settings if needed
	setRequiredOptions( oSettings, !bOptionsShown );
 
	// Debug
	debug( "Required:", oSettings.toJsonString() );
 
	// Construct the name of the file to save to; omit file extension
	var sFile = String("%1/%2 Test").arg( sBasePath ).arg( sClassName );
 
	// Use the asset manager to save a file, using the filter and defined settings
	var oError = oAssetIOMgr.doSaveWithOptions( oAssetIOFilter, oSettings,
		false, sFile, sBasePath, "" );
 
	// If there was no error
	if( oError.valueOf() == 0x00000000 ){
		// Debug
		debug( "Saved:", sFile );
	// If there was an error
	} else {
		// Debug
		debug( "Error:", getErrorMessage( oError ) );
	}
 
// Finalize the function and invoke
})();