Below is an example demonstrating how you can remotely execute the Symmetrize script, silently, by passing in a settings object to control the operation of the script without displaying its dialog.
// DAZ Studio version 4.15.0.17 filetype DAZ Script // Define an anonymous function; // limits the scope of variables (function(){ /*********************************************************************/ // 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; }; /*********************************************************************/ // void : A function that executes a script and passes arguments to it function executeScriptWithArgs( sPath, aScriptArgs ) { // Declare working variables var sTitle, sMessage; // Define common strings var sButton = text( "&OK" ); // Create a script object var oScript = new DzScript(); // Create a file info object var oFileInfo = new DzFileInfo( sPath ); // Get the file extension var sExtension = oFileInfo.extension(); // If the path does not have a file extension, attempt to find the // script with a supported extension; doing it this way, we can debug // with an ascii file and distribute a binary (encrypted) file with // the same name... without having to update the contents of the script // or manually handle the file extensions; requires 3.0.1.5 or newer var sScriptPath = sExtension.isEmpty() ? oScript.getScriptFile( sPath ) : sPath; // Clean up; do not leak memory oFileInfo.deleteLater(); // If a script is found if( !sScriptPath.isEmpty() ){ // If the script loads if( oScript.loadFromFile( sScriptPath ) ){ // Execute the script; pass in an array of arguments; // passing in arguments requires 2.2.2.17 or newer oScript.execute( aScriptArgs ); // If the script doesn't load } else { // Define text variables for the message sTitle = text( "Read Error" ); sMessage = text( "The '%1' file could not be loaded." ).arg( sScriptPath ); // Inform the user MessageBox.information( sMessage, sTitle, sButton ); } // If a script is not found } else { // Define text variables for the message sTitle = text( "File Not Found" ); sMessage = text( "A '%1.ds(a|b|e)' file could not be found." ).arg( sPath ); // Inform the user MessageBox.information( sMessage, sTitle, sButton ); } }; /*********************************************************************/ // Define the path of the script we will call; without the file extension var sScriptPath = String( "%1/symmetrize" ).arg( App.getScriptsPath() ); // Execute the symmetrize script, silently executeScriptWithArgs( sScriptPath, [{ "nodes": text( "Root" ), "propagation": text( "Recursive" ), "direction": text( "Swap Left and Right" ), "trunk_nodes": text( "Mirror Across Y Axis" ), "left_node_prefix": "left;l", "right_node_prefix": "right;r", "transforms": { "rotation": { "x": true, "y": true, "z": true }, "translation": { "x": true, "y": true, "z": true }, "scale": { "general": false, "x": false, "y": false, "z": false } } }] ); // Finalize the function and invoke })();
The Symmetrize script takes exactly 1 argument; an Object with seven (7) required named members, and one (1) optional named member, that are used to control its operation. Failure to specify all required members will result in a usage message being displayed when executed.
Configurable settings handled by the Symmetrize script:
true
, preferred values will override any corresponding values set in the other members