Introduction To Scripting¶
Overview¶
- Sequoia supports QML - Qt’s markup language - for quick description of User Interface layouts.
- Within QML, JavaScript is currently used as the scripting language which can also execute Sequoia-specific commands.
JavaScript Syntax¶
- For an overview of the JavaScript language syntax, please see Wikipedia article on JavaScript Syntax .
Sequoia Modules Import¶
- Sequoia provides several modules implementing objects which in turn expose methods related to different areas of the application.
- The Thinkbox.Sequoia.Nodes module implements the objects NodeCreation, NodeControl and NodeSelection, exposing methods related to node creation, editing, and selecting. See “Scripting Nodes” for details.
- The Thinkbox.Sequoia.Documents module implements the DocumentControl object, which exposes methods related to accessing and managing Sequoia Documents. See “Scripting Documents” topic for details.
- The Thinkbox.Sequoia.Conversion module implements the ImportExport object, which exposes methods related to file conversion. See “Scripting File Import Export” topic for details.
import Thinkbox.Sequoia.Nodes 1.0
import Thinkbox.Sequoia.Documents 1.0
import Thinkbox.Sequoia.Conversion 1.0
Converting Point Files¶
- To convert a point file from a supported source file format to a supported target file format, the script must first import the Thinkbox.Sequoia.Conversion module which implements the ImportExport object.
import Thinkbox.Sequoia.Conversion 1.0
- The method convertPointFile() exposed by the ImportExport object will convert the specified source file to the specified tagret file:
ImportExport.convertPointFile ( <string>sourcefile, <string>targetfile )
- The first argument is the full filename of the source point data file.
- The second argument is the full filename of the target point data file.
Creating Objects¶
- To create scene objects, the script must first import the Thinkbox.Sequoia.Nodes module which implements the NodeCreation object:
import Thinkbox.Sequoia.Nodes 1.0
- Then, the corresponding creation method exposed by the NodeCreation object can be called:
Creating A Point Loader¶
- To create a Point Loader, the script must call the createPointLoader() method in the NodeCreation object:
<nodeHandle>NodeCreation.createPointLoader( <filename>sourceFile , <bool>promptFile )
- The first argument is the file name to load - if can be passed as empty string if no file should be loaded by the script.
- The second argument controls whether the Point Loader should prompt the user to pick a file name interactive using a file dialog.
Creating A Point Region Of Interest¶
- To create a Point Region Of Interest, the script must call the createPointROI() method in the NodeCreation object:
<nodeHandle>NodeCreation.createPointROI( <node>source )
- The first and only argument defines the node handle of a source object - either a Point Loader, or another Point Region Of Interest.
- The argument can be passed as undefined to create an object without a connection.
- To connect multiple input sources, you must set the sources input property after the object is created.
Creating A Mesher¶
- To create a Mesher, the script must call the createMesher() method in the NodeCreation object:
<nodeHandle>NodeCreation.createMesher( <node>source )
- The first and only argument defines the node handle of a source object - either a Point Loader, or a Point Region Of Interest.
- The argument can be passed as undefined to create an object without a connection.
- To connect multiple input sources, you must set the sources input property after the object is created.
Creating A Mesh Loader¶
- To create a Mesh Loader, the script must call the createMeshLoader() method in the NodeCreation object:
<nodeHandle>NodeCreation.createMeshLoader( <filename>sourceFile, <bool>promptFile, <bool>autoBuild )
- The first argument is the file name to load - if can be passed as empty string if no file should be loaded by the script.
- The second argument is a boolean flag controlling whether to prompt the user to pick a file manually.
- When passing an empty string as the file name, you might want to set the second argument to true.
- When passing a valid file name as the first argument, the second argument should be set to false.
- The third argument is a boolean flag that controlling whether to auto-update the object after creation.
Property Access¶
- Getting and setting node properties currently requires the Document as argument.
- Usually, the crrent Document is acquired using
var document = DocumentControl.getCurrentDocument();
Getting The Current Document¶
- To get the current document, the script must first import the Thinkbox.Sequoia.Document module which implement the DocumentControl object:
For example
import Thinkbox.Sequoia.Documents 1.0
var document = DocumentControl.getCurrentDocument();
- The method getCurrentDocument() exposed by the DocumentControl object will return the handle of the current document.
- The return result can be stored in a variable to pass to methods that require the document as argument.
Getting A Node Property¶
- The method getNodeProperty() exposed by the NodeControl object implemented by the Thinkbox.Sequoia.Nodes module returns the named node property of a specified node in a specified document.
<result>NodeControl.getNodeProperty ( <document>, <node>, <propertyNameString> )
- The first argument is the Document containing the node.
- The second argument is the Node handle.
- The third argument is the string containing the name of the property to query.
- The return value is the value of the property - type will depend on the property’s value type.
- Note that JavaScript variables are type-free, so any value would be accepted if assigned to a variable.
For example:
import Thinkbox.Sequoia.Documents 1.0 // needed to access documents
import Thinkbox.Sequoia.Nodes 1.0 //needed to create and access document's nodes
var node0 = NodeCreation.createPointLoader( "" , true ); //create a Point Loader, prompt the user to pick a file
var document = DocumentControl.getCurrentDocument(); //get the current document
var filename = NodeControl.getNodeProperty( document, node0, "inFilename" ); //get the filename the user picked
Setting A Node Property¶
- The method setNodeProperty() exposed by the NodeControl object implemented by the Thinkbox.Sequoia.Nodes module sets the named node property of a specified node in a specified document to the given value.
NodeControl.setNodeProperty (<document>, <node>, <propertyNameString>, <newValue> )
* The first argument is the Document containing the node.
* The second argument is the Node handle.
* The third argument is the string containing the name of the property to query.
* The last argument is the new value, where the type must match the type of the property.
Logging Results To The Console¶
- Normally, all STD output of the scripting language will be redirected to the Sequoia Log.
- Additional custom output can be sent to the Log using the console.log() method.
For example:
// see the previous example
var filename = NodeControl.getNodeProperty( document, node0, "inFilename" );
console.log( "Filename is " + filename );