Below is an example demonstrating how you can use script accessible settings to control the saving of a dzuvsupportassetfilteraction that includes only the selected object(s), without causing the output options or file save dialogs to be displayed.
// DAZ Studio version 4.9.3.124 filetype DAZ Script // Define an anonymous function; // serves as our main loop, // limits the scope of variables (function(){ // Initialize 'static' variables that hold modifier key state var s_bShiftPressed = false; var s_bControlPressed = false; var s_bAltPressed = false; var s_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 s_bShiftPressed = (nModifierState & 0x02000000) != 0; s_bControlPressed = (nModifierState & 0x04000000) != 0; s_bAltPressed = (nModifierState & 0x08000000) != 0; s_bMetaPressed = (nModifierState & 0x10000000) != 0; }; /*********************************************************************/ // void : A function for printing only if debugging function debug() { // If we are not debugging if( !s_bAltPressed ){ // We are 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; }; /*********************************************************************/ // Boolean : A function for testing whether or not a QObject instance // inherits one of a list of types function inheritsType( oObject, aTypeNames ) { // If the object does not define the 'inherits' function if( !oObject || typeof( oObject.inherits ) != "function" ){ // We are done... it is not a QObject return false; } // Iterate over the list of type names for( var i = 0, nTypes = aTypeNames.length; i < nTypes; i += 1 ){ // If the object does not inherit the 'current' type if( !oObject.inherits( aTypeNames[i] ) ){ // Next!! continue; } // Return the result return true; } // Return the result return false; }; /*********************************************************************/ // DzNode : A function for getting the root of a node function getRootNode( oNode ) { // If we have a node and it is a bone if( oNode && inheritsType( oNode, ["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 do not 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 adding an element name function setElementOption( oSettings, sElementSettingsKey, sElementName ) { // Get the (nested) settings that hold the named element var oElementsSettings = oSettings.getSettingsValue( sElementSettingsKey ); // If the object doesn't already exist if( !oElementsSettings ){ // Create it oElementsSettings = oSettings.setSettingsValue( sElementSettingsKey ); } // Declare working variable var sElement; // Initialize var i = 0; // Iterate over the element names for( nElements = oElementsSettings.getNumValues(); i < nElements; i += 1 ){ // Get the 'current' element name sElement = oElementsSettings.getValue( i ); // If the name is the same as the one we are adding if( sElement == sElementName ){ // We are done... return; } } // Create it oElementSettings = oElementsSettings.setStringValue( String( i ), sElementName ); }; /*********************************************************************/ // void : A function for adding a UV set name function setUVSetOption( oSettings, sUVSetName ) { // Set the options for the named UV set setElementOption( oSettings, "MaterialNames", sUVSetName ); }; /*********************************************************************/ // void : A function for adding multiple UV set names function setUVSetOptions( oSettings, aUVSetNames ) { // Iterate over the UV set names array for( var i = 0; i < aUVSetNames.length; i += 1 ){ // Set the 'current' UV set name setUVSetOption( oSettings, aUVSetNames[ i ] ); } }; /*********************************************************************/ // 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 = "DzUVSupportAssetFilter"; // Find the index of the asset filter with the class name we want var nAssetIOFilter = oAssetIOMgr.findFilter( sClassName ); // If we did not 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 are 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 are 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 = s_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 are 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 base path for support assets to be saved to; // because we are explicitly controlling where we want // the assets saved vs using the base path from the last // time the filter UI was used, we need to set this after // getOptions() is called oSettings.setStringValue( "BaseDataPath", sBasePath ); // Build a list of the UV sets var oObject = oRootNode.getObject(); var oShape = oObject.getCurrentShape(); var oGeometry = oShape.getGeometry(); var nUVSets = oGeometry.getNumUVSets(); var aUVSetNames = []; var oUVSet, oUVSetUri; var sFilePath; for( var i = 0; i < nUVSets; i += 1 ){ oUVSet = oGeometry.getUVSet( i ); oUVSetUri = oUVSet.assetUri; sFilePath = oUVSetUri.toPath(); if( sFilePath.endsWith(".enc") ){ continue; } aUVSetNames.push( oUVSet.name ); } // Set specific UV sets setUVSetOptions( oSettings, aUVSetNames ); } // 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 ) ); } // Clean up; do not leak memory oAssetIOFilter.deleteLater(); // Finalize the function and invoke })();