**Magma Node Types - Krakatoa For Maya**

*Work In Progress - Last Edited on 2013/12/02*

## Overview

The following page describes the Magma Nodes available in Krakatoa MY 2.3.

## Major Node Types

The current implementation of the Magma channel editing system inside Krakatoa MY uses three major types of nodes: **Inputs**, **Operators **and **Outputs**.

**Input nodes** have no input sockets and provide only output sockets to be connected to other Operators or Output nodes.

**Operator nodes** have at least one input and output socket and process incoming data before sending it out to other Operators or Output nodes.

**Output nodes** have only one input socket and produce the final result to be written back into a particle stream's data channel.

A Magma flow must contain at least one Output node, and can contain multiple Output nodes if desired.

Operator nodes can have default values for some of their input sockets which can contain static values. For example, an Add operator can have either of its input sockets default to a Float, Int or a Vector value.

Input nodes can connect the Magma flow with the rest of the Maya scene - an InputGeometry node can pass the name of a scene geometry node to be used for surface operations, an InputValue node can provide an animatable Float, Int or Vector value etc.

## Common Node Attributes

**Description (String)**

All nodes in Magma provide an internal Description attribute which by default is set to the Type of the node. The Description value is used as the Title Text in the Editor. It can be edited in the Magma Attribute Editor to provide more information about the actual purpose of the node. For example, a VectorCross operator used to calculate the cross product of a Normal and a Tangent could be renamed from "VectorCross" to "NxT" or "Z Axis" to make the reading of the flow easier.

**Enabled (Boolean)**

All Magma nodes expose an Enabled attribute controlling whether the operator will be evaluated. When turned off, the value coming into the first input socket will be **passed through **to the first output socket of the node without changes. This is why the shortcut for toggling nodes On and Off is **CTRL+P** (short for Pass-Through). When a node is disabled, the first sockets will be drawn in their regular blue color if connected, while any other connected sockets will be dimmed to illustrate the passing of data through the top sockets.

In some nodes where passing data through the first sockets is not possible or makes no sense, the Enabled checkbox is grayed out in the UI. These nodes include all Input* Nodes (InputValue, InputChannel, InputGeometry, InputParticles), as well as all Object category operators.

## OUTPUT Nodes

The Output node outputs data provided by InputChannel nodes or calculated by other operators in the flow to the specified particle data channel. The channel could be an existing one, and a new channel that does not exist yet.

The Output node provides the following attrubutes:

**enabled**- if unchecked, the specified particle data Channel will not be overwritten. Any nodes connected to this Output will not be evaluated, unless they are connected to some other active Output node.**channelName**- defines the name of the particle data Channel to write to. A list of typical channel names is provided for convenience, but you can type in arbitrary names to create new channels or overwrite custom channels with untypical names.**channelType**- defines the type of the particle data Channel to write to. For the pre-defined names on the Channel Names list, the type will be set automatically, but you can use the Channel Type list to define the type of custom channels when typing in the name manually.

## INPUT Category

### InputChannel

- The InputChannel operator has no inputs and one output.
- The output is the value of a specified existing channels from the particle stream being edited, if available. Otherwise, an error will be printed.

### InputGeometry

- The InputGeometry operator has no inputs and one output.
- The operator provides a text field to specify a scene Geometry object to be used by Surface operators like IntersectRay or NearestPoint.
- The button "Select From Scene" lets you click an object in the scene and add its name to the text field.

### InputParticles

- The InputParticles operator has no inputs and one output.
- The operator provides a text field to specify a scene Particle object to be used by Particle operators like NearestParticle (this is currently Work In Progress, more particle-related operators coming soon)

### InputValue

- The InputValue operator has no inputs and one output.
- The operator has UI parameters to select the value type (Vector, Float, Integer) and set the value for the chosen value type.
- The value can be animated over time.
- The output is the (optionally animated) value at the current time.

## Arithmetic Category

### Abs

- The Abs operator has one inputs and one output.
- The input can be a Scalar (Float or Integer) and has no default value when unconnected.
- The output is the Absolute value (without sign) of the input value.

### Add

- The Add operator has two inputs and one output.
- The first input can be an Integer, a Float or a Vector.
- The second input must match the type of the first input.
- Both inputs have Float default values of 0.0 when unconnected and the type of the Defaults can be switched to Integers or Vectors.
- The output is the sum of the two inputs.

### Ceil

- The Ceil operator has one input and one output.
- The input must be a Float and has no default value when unconnected.
- The output is the closest whole number that is greater or equal to the input (rounding up)

### Divide

- The Divide operator has two inputs and one output.
- The first input can be a Vector, a Float or an Integer.
- The second input can be a Float when the first input is a Vector of Float, and Integer if the first input is Integer.
- Both inputs have Float defaults with a value of 1.0 when unconnected.
- The output is the quotient of the two inputs.

### Floor

- The Floor operator has one input and one output.
- The input must be a Float and has no default value when unconnected.
- The output is the closest whole number that is less than or equal to the input (rounding down)

### Log

- The Log operator has one input and one output.
- The input must be a Float and has no default value when unconnected..
- The output is the Natural Logarithm of the input value.
**NOTE**that Krakatoa ships with two pre-defined BlackOps found under BLOP\Logarithms: LogBase and Log10 for calculating the logarithm with a user-defined base or base of 10.

### Modulo

- The Modulo operator has two inputs and one output.
- The first input must be a Scalar and defaults to Integer 0 when unconnected.
- The second input must match the type of the first input and defaults to Integer 1 when unconnected.
- The output is the whole part of the division.

### Multiply

- The Multiply operator has two inputs and one output.
- The two inputs can be of type Vector, Float or Integer.
- Vectors and Floats can be freely multiplied, Integers can only be multiplied with other integers.
- Both inputs have default Float values of 1.0 when unconnected, the default value type can be switched to Vector or Integer.
- The output is the product of the two inputs.

### Negate

- The Negate operator has one input and one output.
- The input can be of type Vector, Float or Integer and has no default value when unconnected.
- The output is the input with inverse sign.

### Power

- The Power operator has two inputs and one output.
- The first input can be of type Vector or Float and has a default value of 1.0
- The second input must be of type Float and has a default value of 2.0
- The output is the first inputmultiplied by itself second input times

### Sqrt

- The Sqrt operator has one input and one output.
- The input must be of type Float and does not have a default value when unconnected.
- The output is the positive square root of the input.

### Subtract

- The Subtract operator has two inputs and one output.
- The first input can be a Vector, a Float or an Integer and has a Float default value of 1.0 when unconnected.
- The second input must match the first input's type and has a default value of 0.0 when unconnected.
- The default type can be switched between Vector, Float and Integer.
- The output is the difference between the two inputs.

## Convert Category

### AngleAxisToQuat

- The AngleAxisToQuat operator creates a Quaternion value from a rotation expressed as an Angle in Radians and an Axis to rotate about.
- It has two inputs and one output.
- The first input is the Angle in Radians.
- The second input is the Axis.
- The output is the Quaternion value representing the specified rotation.

### Breakout

- The Breakout operator has one input and three outputs.
- The input can be a Vector, Float or Integer and has no default value when unconnected.
- The outputs represent the first, second and third components of the input value if it is a Vector.
- If the input is a Float or an Integer, the first ouput will pass through the input without change, the second and third will cause an error.

### EulerAnglesToQuat

- The EulerAnglesToQuat operator creates a Quaternion value from a rotation expressed as Euler angles about the three axes.
- It has three inputs and one output.
- The three inputs are the X, Y and Z Angles in Radians.
- The output is the Quaternion value representing the specified rotation.

### QuatToVectors

- The QuatToVectors operator has one input and three outputs.
- The input must be a Quat and has no default value when unconnected.
- The three outputs represent the orthonormal X, Y and Z axes of the Quaternion taken as a 3x3 Rotation matrix

### ToFloat

- The ToFloat operator has one input and one output.
- The input must be a Scalar (usually an Integer) and has no default value when unconnected.
- The output is the input converted to Float if the input is Integer, or the input itself if it is already a Float.

### ToInt

- The ToInteger operator has one input and one output.
- The input must be a Scalar (usually a Float) and has no default value when unconnected.
- The output is the input converted to an Integer if the input is Float, or the input itself passed through if it is already an Integer.

### ToVector

- The ToVector operator has three inputs and one output.
- The three inputs must be Floats and have a default value of 0.0 when unconnected.
- The output is a Vector value comprised of the three inputs as its components.

### VectorsToQuat

- The VectorsToQuat operator has three inputs and one output.
- The three inputs define the X, Y and Z orthonormal axes of a 3x3 Rotation matrix
- The output is the Quat value describing the oritnation of that matrix.

## Function Category

### Blend

- The Blend operator has three inputs and one output.
- The first and second inputs must be of the same type - either Vector or Float. They have no default values when unconnected.
- The third input defines the blend amount and has a default value of 0.0 which causes the first input to be output.
- The output is the blended value of the two inputs based on the third input's value which should be in the range from 0.0 to 1.0.

### Clamp

- The Clamp operator has three inputs and one output.
- The first input is the value to be clamped and must be a Float.
- The second input is the min. range value and has a default of 0.0 when unconnected.
- The third input is the max. range value and has a default of 1.0 when unconnected.
- The output is the first input clamped in the range of the second and third inputs.

### Noise

- The Noise operatror has one input and one output.
- The input must be a Float or a Vector and has no default value when unconnected.
- The operator exposes three internal properties not controllable via inputs - Num.Octaves, Lacunarity and Normalize.
- The output is a Float noise value calculated based on the input value and the Octaves and Lacunarity parameters.
- If the Normalize option is checked, the output will be normalized in the range from -1.0 to 1.0.

### VecNoise

- The VecNoise operatror has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The operator exposes three internal properties not controllable via inputs - Num.Octaves, Lacunarity and Normalize.
- The output is a Vector noise value calculated based on the input value and the Octaves and Lacunarity parameters.
- If the Normalize option is checked, the output will be normalized in the range from -1.0 to 1.0.

## Logic Category

### Equal

- The Equal operator has two inputs and one output.
- The two inputs must be of the same type to be compared.
- The first input has no default value when unconnected.
- The second input has a default Float value of 0.0. The default value type can be switched to Vector or Integer.
- The output is Integer 1 if the values of the two inputs are equal, Integer 0 if not equal.

### Greater

- The Greater operator has two inputs and one output.
- The two inputs must be of compativle types to be compared - both Scalars or both Integers.
- The first input has no default value when unconnected.
- The second input has a default Float value of 0.0. The default value type cannot be changed.
- The output is Integer 1 if the first input's values is greater than the value of the second input, Integer 0 if equal or less.

### GreaterOrEqual

- The GreaterOrEqual operator has two inputs and one output.
- The two inputs must be of the same Scalar type to be compared - both Floats or both Integers.
- The second input has a default Float value of 0.0. The default value type cannot be changed.
- The output is Integer 1 if the first input's values is greater than or equal to the value of the second input, Integer 0 if less.

### Less

- The Less operator has two inputs and one output.
- The two inputs must be of the same Scalar type to be compared - both Floats or both Integers.
- The second input has a default Float value of 0.0. The default value type cannot be changed.
- The output is Integer 1 if the first input's values is less than the value of the second input, Integer 0 if equal or greater.

### LessOrEqual

- The LessOrEqual operator has two inputs and one output.
- The two inputs must be of the same type to be compared.
- The output is Integer 1 if the first input's values is less than or equal to the value of the second input, Integer 0 if greater.

### LogicalAnd

- The LogicalAnd operator has two inputs and one output.
- The two inputs must be of Integer type where 0 represents FALSE and any non-zero value represents TRUE.
- The output is Integer 1 if both inputs have non-zero values, 0 if one of them has a zero value.

### LogicalNot

- The LogicalAnd operator has one input and one output.
- The input must be of Integer type where 0 represents FALSE and any non-zero value represents TRUE.
- The output is Integer 1 if the input is 0, 0 if the input is not 0.

**LogicalOr**

- The LogicalOr operator has two inputs and one output.
- The two inputs must be of Integer type where 0 represents FALSE and any non-zero value represents TRUE.
- The output is Integer 1 if at least one of the input is not zero, 0 if both inputs are zero.

**LogicalXor**

- The LogicalXor operator has two inputs and one output.
- The two inputs must be of Integer type where 0 represents FALSE and any non-zero value represents TRUE.
- The output is Integer 1 if exactly one one of the two input is not zero, 0 if both inputs are zero or both inputs are not zero.

### Switch

- The Switch operator has three inputs and one output.
- The first two inputs values can be of any type, preferably of the same type to ensure consistent output type.
- The third input must be of Integer type where a value of 0 is considered FALSE and any non-zero value is TRUE.
- The output of the operator will be the first input's value if the third input is non-zero (TRUE), and the second input's value if the third input is 0 (FALSE).

## Object Category

### ElementQuery

- The ElementQuery operator has three inputs and three outputs.
- The first input should be connected to an InputGeometry node representing the mesh to query.
- The second input provides the Object index when multiple Geometry objects are provided.
- The third input provides the Element Index within the sepecified Geometry object to be queried.
- The first output will contain the Surface Area of the element.
- The second output will contain the Volume of the element.
- The third output will contain the Centroid of the element.

### FaceQuery

- The FaceQuery operator has four inputs and a variable, arbitrary number of outputs.
- The first input should be connected to an InputGeometry node representing the mesh to query.
- The second input provides the Object index when multiple Geometry objects are provided.
- The third input provides the Face index within the specified Geometry object to be queried.
- The fourth input provides the Barycentric coordinates of the point within the specified Face to query data from.
- An Expose Position attribute is set to On by default, exposing a Position output. The Position is based on the weighted position of the Face vertices based on the Barycentric coordinates.
- Several typical Mesh channels are listed in a control and allow the adding to the list of Exposed channels. Moving a channel name to the Exposed channels list exposes a new output socket. The channel must exist in the InputGeometry's mesh.
- The pre-defined channel names include:
**Normal**- the smoothed normal vector at the specified point, weighted by the Barycentric coordinates using the vertex Normals.**FaceNormal**- the unsoothed Face Normal. It will be constant for all points on the surface of the Face.**TextureCoord**- the texture mapping coordinate of the current UV set at the specified point, weighted using the UV values at the Face's vertices using the Barycentric coordinates. The coordinates will be returned as a Vector3f, with the 3rd, W component set to 0.0.**map1**- the standard default UV set of Maya meshes. It is provided for convencience.

- Any names of existing channels, including custom-named UV sets and Color sets can be entered manually in a text field and will expose outputs to query data.

### IntersectRay

- The IntersectRay operator has three inputs and seven outputs.
- The first input must be connected directly to an InputGeometry operator providing at least one geometry object.
- The second input must provide the ray origin in world space.
- The third input must provide the ray direction in world space.
- The first output returns the Position of the intersection, or [0,0,0] if no intersection was found.
- The second output returns an Integer with a value of 1 (TRUE) if the intersection is valid, 0 (FALSE) if not valid.
- The third output returns the zero-based Object Index, matching the order of objects on the InputGeometry node's list.
- The fourth output returns the zero-based index of the face that was hit.
- The fifth output returns the signed distance to the intersection point - positive if the point is seeing the front side of the face (outside), negative if seeing the backside (inside)
- The sixth output returns the face (unsmoothed) normal at the intersection point.
- The seventh output returns the barycentric coordinates of the intersection point within the face.

### InVolume

- The InVolume operator has two inputs and one output.
- The first input must be connected directly to an Input Geometry operator with at least one geometry object picked.
- The second input provides the world space position to check against the provided geometry volumes.
- The output is a Boolean which will be 1 (True) if the point is in at least one of the specified volumes, or 0 (False) if it is outside.

### MeshQuery

- The MeshQuery operator has two inputs and at least three outputs.
- The first input must be connected directly to an InputGeometry operator with at least one geometry object.
- The second input is the zero-based object index (Integer) corresponding to the order of geometry objects in the InputGeometry node. It defaults to 0 when unconnected.
- The first output is the Face Count of the specified mesh.
- The second output is the Vertex Count of the specified mesh.
- The third output is the Element Count of the specified mesh.

### NearestParticle

- The NearestParticle operator has two inputs and three outputs.
- The first input must be connected to an InputParticles operator.
- The second input must provide the world space position to check for neatest particles from.
- A control in the operator's UI defines which particle to return. It defaults to 1 (meaning the closest), but it can be set to return the second-closest, third-closest and so on.
- The first output returns the Position of the closest particle.
- The second output returns Integer 1 (TRUE) if a closest particle was found, 0 (FALSE) if not.
- The third output returns the Particle Index within the particle system.
**NOTE:**Using the Particle Index and the same InputParticles node, a ParticleQuery operator could be used to acquire additonal information about the particle like Velocity, Color etc.

### NearestPoint

- The NearestPoint operator has two inputs and seven outputs.
- The first input must be connected directly to an InputGeometry operator with at least one geometry object picked.
- Dragging a wire into an empty area of the Editor will create an InputGeometry operator automatically.
- Holding Ctrl while releasing the mouse the the above case will pop up the full operators menu

- The second input must provide the lookup point in world space.
- Dragging a wire into an empty area of the Editor will create a Position InputChannel node connected via a ToWorld Transform opertator.
- Holding Ctrl while releasing the mouse the the above case will pop up the full operators menu

- The first output returns the Position of the nearest point, or [0,0,0] if no valid nearest point could be found.
- The second output returns an Integer with a value of 1 (TRUE) if the point is valid, 0 (FALSE) if not valid.
- The third output returns the zero-based Object Index, matching the order of objects on the InputGeometry node's list.
- The fourth output returns the zero-based index of the face the point belongs to.
- The fifth output returns the signed distance to the nearest point - positive if the point is seeing the front side of the face (outside), negative if seeing the backside (inside)
- The sixth output returns the face (unsmoothed) normal at the nearest point.
- The seventh output returns the barycentric coordinates of the nearest point within the face.

### ParticleQuery

- The ParticleQuery operator has two inputs and an arbitrary number of outputs.
- The first input must be connected directly to an InputParticles operator with a PRT object selected.
- The second input defines the particle index within the particle system. It has no default value when unconnected and is typically connected to the Particle Index output of a NeatestParticle operator.
- The outputs are defined via the UI of the operator.
- Any number of particle channels can be added as outputs to query any data available in the stream.

### ParticleSumCount

- The ParticleSumCount operator has four inputs and at least two outputs.
- The first input must be connected directly to an InputParticles operator.
- The second input must provide the world space lookup position to search particles from.
- The third input is optional and defines the number of neighbor particles to sample. It has a default value of 2. By connecting to this input socket, each particle can define a different number of neighbors value.
- The fourth input defines the Falloff. It has a default value of 0.0 and may not be connected. It controls how the distance to the particle affects its accumulation into the final value. By connecting to this input socket, each particle can define a different Falloff value to sample its neighbors.
- The first output is the Max. Distance (the distance to the farthest particle found)
- The second output is the Total Weight which can be used to divide the resulting channel values by to get an Average value.
- Any number of particle channels can be added as outputs and their channels will be accumulated by the operator, outputting their sum. The sum can be then divided by the Total Weight to produce an Average.

### ParticleSumRadius

- The ParticleSumRadius operator has four inputs and at least two outputs.
- The first input must be connected directly to an InputParticles operator.
- The second input must provide the world space lookup position to search particles from.
- The third input is optional and provides the Radius which defaults to 1.0 and defines the radius of the spherical region to search within. It can be connected to define a different Radius for each particle.
- The fourth input is optional and defines the Falloff, controlling how the distance to the particle affects its accumulation into the final value. It can be connected to define a different Falloff for each particle.
- The first output returns the number of particles found inside the spherical region.
- The second output is the Total Weight which can be used to divide the resulting channel values by to get an Average value.
- Any number of particle channels can be added as outputs and their channels will be accumulated by the operator, outputting their sum. The sum can be then divided by the Total Weight to produce an Average.

### VertexQuery

- The VertexQuery operator has three inputs and a variable, arbitrary number of outputs.
- The first input should be connected to an InputGeometry node representing the mesh to query.
- The second input provides the Object index when multiple Geometry objects are provided. It defaults to 0.
- The third input provides the Vertex index within the specified Geometry object to be queried. It defaults to 0.
- An Expose Position attribute is set to On by default, exposing a Position output. The Position is based on the weighted position of the Face vertices based on the Barycentric coordinates.
- Several typical Mesh channels are listed in a control and allow the adding to the list of Exposed channels. Moving a channel name to the Exposed channels list exposes a new output socket. The channel must exist in the InputGeometry's mesh.
- The pre-defined channel names include:
**Normal**- the smoothed normal vector at the specified vertex.**TextureCoord**- the texture mapping coordinate of the current UV set at the specified vertex. The coordinates will be returned as a Vector3f, with the 3rd, W component set to 0.0.**map1**- the standard default UV set of Maya meshes. It is provided for convencience.

- Any names of existing channels, including custom-named UV sets and Color sets can be entered manually in a text field and will expose outputs to query data.

## Transform Category

### FromCamera

- The FromCamera operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The UI controls define the transform mode - Point for Position vectors (applies orientation, scaling and translation), Vector for Vectors (applies orientation and scaling but no translation) and Normal for Normals (orientation only, no scaling and translation).
- The output returns the Vector transformed from Camera to World space.

### FromWorld

- The FromWorld operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The UI controls define the transform mode - Point for Position vectors (applies orientation, scaling and translation), Vector for Vectors (applies orientation and scaling but no translation) and Normal for Normals (orientation only, no scaling and translation).
- The output returns the Vector transformed from World space into object space.

### ToCamera

- The ToCamera operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The UI controls define the transform mode - Point for Position vectors (applies orientation, scaling and translation), Vector for Vectors (applies orientation and scaling but no translation) and Normal for Normals (orientation only, no scaling and translation).
- The output returns the Vector transformed into Camera space.

### ToWorld

- The ToWorld operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The output returns the Vector transformed from object space into World space.

### TransformByQuat

- The TransformByQuat operator has two inputs and one output.
- The first input defines the Quat value to transform by and defaults to Quat 0,0,0,1 when not connected.
- The second input defines a Quat or Vector value to be transformed. It defaults to a Vector of 0,0,0 when not connected.
- The output is the Quat or Vector value from the second input transformed by the Quat value in the first input.

## Trigonometry Category

### ACos

- The ACos operator has one input and one output.
- The input must be a Float value in the range from -1.0 to 1.0.
- The output is inverse of the Cosine function as angle in degrees in the range from 0 to pi.

### ASin

- The ASin operator has one input and one output.
- The input must be a Float value in the range from -1.0 to 1.0.
- The output is the inverse of the Sine function as an angle in radians.
- The Result is in the range from -pi/2 to pi/2.

### ATan

- The ATan operator has one input and one output.
- The input must be a Float value.
- The output is the inverse of the Tangent function as angle in radians.
- The result is in the range from -pi/2 to pi/2.

### ATan2

- The ATan2 operator has two inputs and one output.
- The two inputs must be Float values.
- The output is the inverse of the Tangent function of the quotient of the two inputs as an angle in radians.
- The output uses the sign of each input to choose the appropiate quadrant.
- The Result is in the range from -pi to pi.

### Cos

- The Cos operator has one input and one output.
- The input must be a Float value representing the angle in radians.
- The output is the Cosine function for the given angle.

### Sin

- The Sin operator has one input and one output.
- The input must be a Float value representing the angle in radians.
- The output is the Sine function for the given angle.

### Tan

- The Tan operator has one input and one output.
- The input must be a Float value representing the angle in radians.
- The output is the Tangent function (sin(X)/cos(X)) for the given angle.

## Vector Category

### ComponentSum

- The ComponentSum operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The output is the sum of its components.

### Magnitude

- The Magnitude operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The output is a Float value representing the length (magnitude) of the Vector.

### MatrixMulVec

- The MatrixMulVec operator has four inputs and one output.
- The first input is the Vector and defaults to 0,0,0 when unconnected.
- The second, third and fourth inputs are the columns of the Matrix and default to [1,0,0], [0,1,0] and [0,0,1] when unconnected.
- The output is a Vector representing the matrix multiplied by the first input's vector.

### Normalize

- The Normalize operator has one input and one output.
- The input must be a Vector and has no default value when unconnected.
- The output is the normalized (lenght 1.0) vector with the same direction as the input.

### VectorCross

- The VectorCross operator has two inputs and one output.
- The two inputs must be Vector values and have no default values when unconnected.
- The output is the vector cross product of the two inputs - a vector perpendicular to the two vectors and with length equal to the area of the parallelogram defined by the two vectors.

### VectorDot

- The VectorDot operator has two inputs and one output.
- The two inputs must be Vectors and have no default values when unconnected.
- NOTE that the VectorDot result only makes sense when the two inputs are Normalized.
- The output is a Float representing the length of the projection of the one vector onto the other.