User Tools

Site Tools


Simulation Settings - Find Property

Summary

Below is an example demonstrating how you can find a simulation engine, set the active simulation engine to it and then retrieve a property displayed in the Simulation Settings pane using its name, via script.

API Areas of Interest

Example

Simulation_Settings_Find_Property.dsa
// Define an anonymous function;
// serves as our main loop,
// limits the scope of variables
(function(){
 
	/*********************************************************************/
	// Array<DzProperty> : A function for getting a list of the properties in a group
	function getGroupProperties( oGroup, bTraverse, bRecurse )
	{
		// Declare an array to hold properties
		var aProperties = [];
 
		// If a group is not passed in
		if( !oGroup ){
			// We are done, return an empty array
			return aProperties;
		}
 
		// Get the number of proeprties in the group
		var nProperties = oGroup.getNumProperties();
		// Pre-size the properties array
		aProperties = new Array( nProperties );
		// Iterate over the properties, setting each element in the array
		for( var i = 0; i < nProperties; i += 1 ){
			// Assign the property to the position in the array
			aProperties[ i ] = oGroup.getProperty( i );
		}
 
		// If we are recursing
		if( bRecurse ){
			// Concatenate the properties array from child groups
			aProperties = aProperties.concat(
				getGroupProperties( oGroup.getFirstChild(), true, bRecurse ) );
		}
 
		// If we are traversing
		if( bTraverse ){
			// Concatenate the properties array from sibling groups
			aProperties = aProperties.concat(
				getGroupProperties( oGroup.getNextSibling(), bTraverse, bRecurse ) );
		}
 
		// Return the array of properties
		return aProperties;
	};
 
	/*********************************************************************/
	// Array<DzProperty> : A function for getting the list properties for an element
	function getElementProperties( oElement, bTraverse, bRecurse )
	{
		// Get the property group tree for the element
		var oPropertyGroupTree = oElement.getPropertyGroups();
 
		// If the application version is 4.9.4.101 or newer and we want all properties
		if( App.version64 >= 0x0004000900040065 && bTraverse && bRecurse ){
			// Return the properties for the element
			return oPropertyGroupTree.getAllProperties();
		}
 
		// Get the first group in the tree
		var oPropertyGroup = oPropertyGroupTree.getFirstChild();
		// Return the properties for the element
		return getGroupProperties( oPropertyGroup, bTraverse, bRecurse );
	};
 
	/*********************************************************************/
	// DzProperty : A function for finding a property associated with an element
	function findElementProperty( oElement, sProperty, bUseLabel )
	{
		// Whether or not to use optimizations; 4.7.1.44 or newer
		var bUseOptimization = (App.version64 >= 0x000400070001002c);
 
		// Declare a working variable
		var oProperty;
 
		// If the application version is 4.7.1.44 or newer and we are not using
		// the label to find, or the application version is 4.11.0.166 or newer
		if( (bUseOptimization && !bUseLabel) ||
			App.version64 >= 0x0004000b000000a6 ){
			// Get the property group tree for the element
			var oPropertyGroupTree = oElement.getPropertyGroups();
 
			// If we are using the label
			if( bUseLabel ){
				// Attempt to find the property
				oProperty = oPropertyGroupTree.findPropertyByLabel( sProperty );
			// If we are not using the label
			} else {
				// Attempt to find the property
				oProperty = oPropertyGroupTree.findProperty( sProperty );
			}
 
			// If we found a property
			if( oProperty ){
				// We are done, return it
				return oProperty;
			}
		// Otherwise
		} else {
			// Get the properties of the element
			var aProperties = getElementProperties( oElement, true, true );
			// Iterate over the properties
			for( var i = 0; i < aProperties.length; i += 1 ){
				// Get the 'current' property
				oProperty = aProperties[i];
 
				// If we are using the label
				if( bUseLabel ){
					// If the label of the property is the one we are looking for
					if( oProperty.getLabel() == sProperty ){
						// We are done, return it
						return oProperty;
					}
				// If we are not using the label
				} else {
					// If the name of the property is the one we are looking for
					if( oProperty.name == sProperty ){
						// We are done, return it
						return oProperty;
					}				
				}
			}
		}
 
		// Declare working variables
		var oChild;
 
		// Iterate over the child elements
		for( var i = 0, nChildren = oElement.getNumElementChildren(); i < nChildren; i += 1 ){
			// Get the 'current' child element
			oChild = oElement.getElementChild( i );
			// Get the property from the child
			oProperty = findElementProperty( oChild, sProperty, bUseLabel );
 
			// If we are using a version with optimizations
			if( bUseOptimization ){
				// If we have a property
				if( oProperty ){
					// We are done, return it
					return oProperty;
				}
			// Otherwise
			} else {
				// If we are using the label
				if( bUseLabel ){
					// If the label of the property is the one we are looking for
					if( oProperty.getLabel() == sProperty ){
						// We are done, return it
						return oProperty;
					}
				// If we are not using the label
				} else {
					// If the name of the property is the one we are looking for
					if( oProperty.name == sProperty ){
						// We are done, return it
						return oProperty;
					}				
				}
			}
		}
 
		return null;
	};
 
	/*********************************************************************/
	// DzProperty : A function to find a property associated with a simulation engine
	function findSimulationProperty( sSimulationEngine, sElement, sProperty, bUseLabel, bActivate )
	{
		// Get the simulation manager
		var oSimulationMgr = App.getSimulationMgr();
 
		// Find the desired simulation engine
		var oSimulationEngine = oSimulationMgr.findSimulationEngine( sSimulationEngine );
		// If we did not find the simulation engine
		if( !oSimulationEngine ){
			// We are done..
			return null;
		}
 
		// Get the active simulation engine
		var oActiveSimulationEngine = oSimulationMgr.getActiveSimulationEngine();
 
		// If we have an active simulation engine and it is not the one we want
		if( oActiveSimulationEngine && oActiveSimulationEngine.className() != sSimulationEngine ){
			// If we are not activating the simulation engine
			if( !bActivate ){
				// We are done
				return null;
			}
 
			// Set the active simulation engine
			oSimulationMgr.setActiveSimulationEngine( oSimulationEngine );
		}
 
		// Declare working variables
		var oElement, oProperty;
 
		// Get the simulation elements; which hold the properties
		var aSimulationEngineElements = oSimulationMgr.getSimulationElementObjects();
		// Iterate over the elements
		for( var i = 0; i < aSimulationEngineElements.length; i += 1 ){
			// Get the 'current' element
			oElement = aSimulationEngineElements[i];
 
			// If an element name is specified and the 'current' element is not
			// named as the one we are looking for
			if( !sElement.isEmpty() && oElement.name != sElement ){
				// Next!
				continue;
			}
 
			// Find a specific property by name
			oProperty = findElementProperty( oElement, sProperty, bUseLabel );
			// If we found a property
			if( oProperty ){
				// We are done, return it
				return oProperty;
			}
		}
 
		return null;
	};
 
	/*********************************************************************/
	// Find a specific property by name
	//Element: "dForce Simulation Options", "" = no filter
	var oProperty = findSimulationProperty( "DzDForceEngine", "", "Gravity", false, true );
 
	// If we found a property
	if( oProperty ){
		// Provide feedback
		print( "Found:", oProperty.name, ":", oProperty.getLabel() );
	}
 
// Finalize the function and invoke
})();