Scripting Nodes¶
Prerequisites¶
The following methods are exposed by the NodeCreation, NodeControl and NodeSelection objects implemented by the module Thinkbox.Sequoia.Nodes
Before calling these methods, you must ensure the module is imported.
import Thinkbox.Sequoia.Nodes 1.0
Creating Nodes¶
<String> NodeCreation.createPointLoader ( <QUrl>defaultFile, <Bool>promptFile )
Creates a new Point Loader.
The first argument defines the file name to use as the point data source. It can be an empty string.
The second argumemt controls whether to prompt the user to pick a source file manually (true), or not (false).
<String> NodeCreation.createPointROI ( <String>nodeId )
Creates a new Point Region Of Interest object.
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.
<String> NodeCreation.createMesher ( <String>nodeId, [ <Bool>useSuggestedRadius ] )
Creates a new Mesher object.
The first 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.
The second (optional) argument is a boolean value.
If supplied as true, or not specified, the suggested radius calculated by the Mesher will be used.
If supplied as false, the radius will not be set and has to be set by the script by modifying the inRadius property, or by the user via the UI.
<String> NodeCreation.createMeshLoader ( <String>defaultFile, <Bool>promptFile, <Bool>autobuild )
Creates a new Mesh Loader object.
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.
<String> NodeCreation.createImageProjection ( <String>defaultFile, <Bool>promptFile )
Creates a new Image Projection object
The first argument defines the file name to use as the image source. It can be an empty string.
The second argumemt controls whether to prompt the user to pick an image file manually (true), or not (false).
<String> NodeCreation.createSurfacePoints ( <String>nodeId )
Creates a new Surface Points object.
The first and only argument defines the node handle of a source object - either a Mesher, or a Mesh Loader.
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.
<String> NodeCreation.createMarker ( [ <Vector3D>position ] )
Creates a new Marker object.
The first and only optional argument defines the node’s position.
If not specified, the Marker will be created at the World Origin.
<String> NodeCreation.createCamera ()
Creates a new Camera in the Active Document and in the Active Viewport.
Collecting Nodes¶
<StringList> NodeControl.getAllNodes ( [ <String>documentId ] );
Returms a list of all node IDs in the Document.
The first, optional argument is the ID of the Document - if not specified, the Active Document will be used.
<StringList> NodeControl.getAllNodesOfType ( <String>type, [ <String>documentId ] );
Returns a list of all node IDs in the Document that match the specified type.
The first argument is the Type String, e.g. “PointLoader”, “Mesher” etc.
The second, optional argument defines the Document ID. If not specified, the Active Document will be used.
See also NodeControl.getNodeType() for the related method returning the Type String of a node.
Node Selection¶
<void> NodeSelection.setSelectedNode ( <String>nodeId )
Sets the selection to the specified node.
Any other selected nodes will be deselected automatically.
The first and only argument is the ID of the node to select.
Example:
var a1 = NodeCreation.createPointLoader("", true); //create a Point Loader
var a2 = NodeCreation.createMesher(a1); // create a Mesher connected to it
//At this point, the Mesher would be selected
NodeSelection.setSelectedNode(a1); // select the Point Loader instead
<void> NodeSelection.addSelectedNode ( <String>nodeId )
Selects the specified node, while retaining the existing selection.
The first and only argument is the ID of the node to add to the selection.
Example:
var a1 = NodeCreation.createPointLoader("", true); //create a Point Loader
var a2 = NodeCreation.createMesher(a1); // create a Mesher connected to it
//At this point, the Mesher would be selected
NodeSelection.addSelectedNode(a1); // add the Point Loader to the selection
//At this point, both objects are selected
<void> NodeSelection.removeSelectedNode ( <String>nodeId )
Deselects the specified node, while keeping the rest of the selected node in the selection set.
The first and only argument is the ID of the node to remove from the selection.
<void> NodeSelection.clearSelectedNodes ( <String>documentId )
Deselects all nodes in the specified Document.
The first and only argument is the Document ID.
<stringList> NodeSelection.getSelectedSequoiaNodes ()
Returns the selected nodes as a list of Node IDs.
Example:
//Manually select several objects in the Document... then evaluate:
var s1 = NodeSelection.getSelectedSequoiaNodes(); //get the selected object
console.log( s1 ); //output the selected node IDs
Accessing Node Properties¶
<variant> NodeControl.getNodeProperty ( <String>nodeId, <String>propertyName, [ <String>documentId ] )
Returns the value of the specified property in the given node and document.
The type of the return value 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.
The first argument specifies the Node ID.
The second argument provides the string with the name of the property to query.
The third, optional argument specifies the Document ID.
Example:
var n0 = NodeCreation.createPointLoader("", true); //create a Point Loader, let the user pick the file name
var response = NodeControl.getNodeProperty(n0, "inFilename"); //get the filename property of the first selected object
console.log(response); //and output to the Log to see what the user picked...
<void> NodeControl.setNodeProperty ( <String>nodeId, <String>propertyName, <Variable>value, [ <String>documentId ] )
Sets the value of the property in the given node and document to the provided value.
The first argument specifies the Node ID.
The second argument provides the string with the name of the property to query.
The third, optional argument specifies the Document ID.
<StringList> NodeControl.getAllNodePropertyNames ( <String>nodeId, [ <String>documentId ] )
Returns all property names available in the specified node as a list of strings.
The first argument specifies the Document ID.
The second argument specifies the Node ID.
<Vector3D> NodeControl.getNodePosition ( <String>nodeId, [ <String>documentId ] )
Returns the scene object’s world space Position.
The first argument specifies the Node ID.
The second, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
<Quaternion> NodeControl.getNodeOrientation ( <String>nodeId, [ <String>documentId ] );
Returns the scene object’s world space Orientation.
The first argument specifies the Node ID.
The second, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
<Vector3D> NodeControl.getNodeScale ( <String>nodeId, [ <String>documentId ] );
Returns the scene object’s world space Scale.
The first argument specifies the Node ID.
The second, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
<void> NodeControl.setNodePosition ( <Vector3D>position, <String>nodeId, [ <String>documentId ] );
Sets the scene object’s world space Position to the first argument.
The second argument specifies the Node ID.
The third, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
<void> NodeControl.setNodeOrientation ( <Quaternion>orientation, <String>nodeId, [ <String>documentId ] );
Sets the scene object’s world space Orientation to the first argument.
The second argument specifies the Node ID.
The third, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
<void> NodeControl.setNodeScale ( <Vector3D>scale, <String>nodeId, [ <String>documentId ] );
Sets the scene object’s world space Scale to the first argument.
The second argument specifies the Node ID.
The third, optional argument specifies the Document ID.
If not specified, or if supplied as empty string, the current Document will be used implicitly.
Example:
var sel = NodeSelection.getSelectedSequoiaNodes(); //get the selected objects
var i = 0;
for (i = 0; i < sel.length; i++) {
var pos = NodeControl.getNodePosition ( sel[i] ); //get the i-th node's position
pos.x += 1.0; //move the object 1 meter along X
NodeControl.setNodePosition ( pos, sel[i] ); // set the position of the node
}
<String> NodeControl.getNodeName ( <String> nodeId, [ <String> documentId ] );
Returns the name of the node as a string value.
The first argument is the ID of the node.
The second, optional argument is the ID of the Document - if not specified, the Active Document will be used.
<String> NodeControl.getNodeType ( <String> nodeId, [ <String> documentId ] );
Returns the type of the node.
The first argument is the ID of the node.
The second, optional argument is the ID of the Document - if not specified, the Active Document will be used.
Example:
var sel = NodeControl.getAllNodes(); //get all nodes in the Active Document
var i = 0;
for (i = 0; i < sel.length; i++) {
var name = NodeControl.getNodeName ( sel[i] ); //get the i-th node's name
var type = NodeControl.getNodeType ( sel[i] ); //get the i-th node's type
console.log ( "Node ID:" + sel[i] + " Name:"+ name + " Type:" + type );
}
<VariantList> NodeControl.getNodeBoundingBox ( <Bool>worldspace, <String>nodeId, [<String> documentId ] );
Returns an array of Position vectors representing each of the 8 corners of the node’s bounding box.
Note that the values will be stored as 32 bit Singles.
See below for methods that return 64 bit Doubles.
The first argument controls whether the world-aligned bounding box (True) or the object-aligned bounding box (when False) will be returned.
The second argument supplies the node to query.
The third optional argument provides the Document ID. When not supplied, the Active Document will be used.
<List of doubles> NodeControl.getMinBoundingBox ( <String> nodeId, [ <String> documentId ] );
<List of doubles> NodeControl.getMaxBoundingBox ( <String> nodeId, [ <String> documentId ] );
Return the Minimum and Maximum of the specified node’s bounding box as lists of Doubles.
<void> NodeControl.setMesherUCSSource ( <String> mesherId, <String>UcsId, [ <String> documentId ] );
Sets the UCS node of a Mesher.
The first argument defines the Node ID of the Mesher node.
The second argument defines the Node ID of the UserCoordinateSystem node.
The third, optional argument defines the Document ID. If not specified, the Active Document will be used.
<void> NodeControl.removeMesherUCS ( <String> mesherID, [ <String> documentId ] );
Removes the UCS node of a Mesher.
The first argument defines the Node ID of the Mesher node.
The second, optional argument defines the Document ID. If not specified, the Active Document will be used.