Filter expressions
This section contains information about advanced scripting in Pixyz Studio.
Filter expressions let you run a single Python call for multiple operations in the Pixyz Core module.
This example show how you can use filter expressions:
## Without filter expressions: n * execution time of core.getProperty
names = list()
for occurrence in scene.findByProperty('Name', '.*'): # scene.findByProperty('Name', '.*') returns all scene occurrences
names.append(core.getProperty(occurrence, 'Name'))
## With filter expressions: one call for multiple operations
names = scene.evaluateExpressionOnSubTree('Property("Name")', scene.getRoot())
Types
An expression returns a value that is of one of these types:
- None
- Entity – an entity may be an occurrence, a component, a material…
- String
- Numeric
- Boolean
Functions
You can use these functions:
Boolean String.Matches(String regexp)
String Entity.Property(String propertyName)
Boolean Entity.SetProperty(String propertyName, String propertyValue)
Occurrence Occurrence.Parent()
Entity Occurrence.Component(String componentType)
Boolean This.IsNone()
Numeric This.ToNumeric()
All functions apply to an object. This code block shows an example:
## Filters all occurrences containing `Hello` in the property Name
## Property returns a String and applies on an Occurrence
## Matches applies on an Occurrence and returns a Boolean
Property('Name').Matches('.*Hello.*')
Logical operators
You can use these logical operators:
Logical operator | Example | Result |
---|---|---|
AND | Expr = Expr1 OR Expr2 |
If Expr1 == true , returns eval(Expr1) .Otherwise, returns eval(Expr2) . |
OR | Expr = Expr1 AND Expr2 |
If Expr1 == false , returns eval(Expr1) .Otherwise, returns eval(Expr2) . |
Examples
Hide all unselected occurrences:
selection = scene.getSelectedOccurrences()
scene.evaluateExpressionOnOccurrences(selection, 'SetProperty("Visible", "Inherited")')
scene.invertSelection()
unselected = scene.getSelectedOccurrences()
scene.evaluateExpressionOnOccurrences(unselected, 'SetProperty("Visible", "False")')
scene.clearSelection()
scene.select(selection)
Select all occurrences whose parent has a material whose name contains "8":
filter = 'Parent().Property("Material") AND Parent().Property("Material").Property("Name").Matches(".*8.*")'
occs = scene.getFilteredOccurrences(filter)
scene.select(occs)