Math Commands

 

Hexadecimal Numbers
These numbers are prefixed by the "0x" character sequence, and can contain 1-8 hexidecimal digits (A-F, a-f, 0-9).
...
t = 5 * 0xa0; // equivalent to 5 * 160
...

In addition, the integer() function has been enhanced to recognize and process hexidecimal numbers in string form.

...
t = integer("0x0a"); // t will hold 10
t = integer("Now is the 0xF000 time"); // t will hold 61440
...

Scientific Notation
The compiler now correctly recognizes and processes numeric values in scientific notation without the need for trailing decimal values.

...
val = 2e2;
...

This section describes the commands available to both Layout and Modeler LScripts. These include commands and functions for math, variable conversions, string manipulations.

Binary Numbers
LScript now provides support for binary-formatted numbers. These numbers are prefixed by the "0b" character sequence, and can contain 1-32 binary digits (0 or 1).

...
t = 0b1001; // t holds 9
...

In addition, the integer() function has been enhanced to recognize and process binary numbers in string form.
...
t = integer("0b110"); // t will hold 6
t = integer("Now is the 0b10000 time"); // t will hold 16
...

This section describes the commands available to both Layout and Modeler LScripts. These include commands and functions for math, variable conversions, string manipulations.

General Commands

center
The center command returns the center point that lies between two given points in three-dimensional space. This command accepts a number of different parameter counts and types: an array whose first two elements are vectors, two vectors (either as a constant or as variables), or six numeric values where the first three represent the first vector, and the next three represent the second vector. center() returns a vector data type.

// since boundingbox() returns two vectors, we can just

// feed its output to center()

objectCntr = center(boundingbox());

extent
The extent command accepts the same number and types of arguments as center(), but instead of calculating the center of a pair of vectors, it returns the extents (distances) between the two points. extent() returns a vector data type, whose elements (x, y, z) represent the extents along each of those axes.

objectSize = extent(boundingbox());

angle
The angle function returns the angle, in degrees, between two points on a specified plane (XZ, YZ, or XY). It accepts two vectors representing the two points, and a third parameter that specifies the axis perpendicular to the plane in which the angle should be calculated.


editbegin();
    pnt1 = pointinfo(points[1]);
    pnt2 = pointinfo(points[2]);
editend();

info(angle(pnt1,pnt2,X),“degrees”); // return angle in the
                                                // YZ plane

regexp
The regexp() function lets LScript construct regular expressions from character strings. Use this function to enter regular expression patterns. regexp() can replace regular expressions if two separate arguments are provided for compiling.

// display lines in a file that begin with the letters “PUB”
// compile a regular expression to be used

expr = regexp(“^PUB”);

// regexp() returns ‘nil’ if the expression fails to compile
if(expr == nil)
    return;
if((file = File(“nfa.c”,”r”)) == nil)
    return;
while(!file.eof())
{
    line = file.read();
    if(line == expr)
        info(line);
}

Conversions
The conversion commands convert variables of one type to another. Several of these commands have method equivalents.

The conversion functions integer(), number() and vector() can scan a provided character string until they find the 
first numeric occurrence (a number or a period [.] followed by a
number) before they attempt to convert.

x = integer("My number: 55"); // returns 55
x = number("fskd#jdl.532(iew"); // returns .532

number
number() takes a string argument and attempts to convert it into a numeric(floating-point) value.

str = “69.6”;
t = number(str);// returns 69.9
t = number(“The answer is: .1593”);
// returns .1593

binary
A binary() function is now available that will convert integer values into their binary equivalents in string form. The function takes an integer value, and an optional size value (whose maximum on any platform is [sizeof(int) * 8] bits). The function will remove leading zeros, unless an explict number of bits are indicated:

generic
{
    info(binary(32)); // displays "100000"
    info(binary(32,32)); // displays "00000000000000000000000000100000"
    info(binary(130,8)); // displays "10000010"
    info(binary(130,10)); // displays "0010000010"
}

integer
integer() takes a string argument and returns an integer value. If the character string includes a decimal point, it will be stripped.

str = “69.6”;
t = integer(str);            // returns 69
t = integer(round(number(“69.9”))); // returns 70

vector
The vector command takes a string argument and attempts to convert it into a vector.

str = “4 6.5 8”;
t = vector(str); // returns <4,6.5,8>

string
The string() command takes a varying number of arguments, each of which can be any of the supported LScript data types (except array), and constructs a character string.

t = string(“Value “,val,” exceeds max limit of “,
10 * items,” items”);

ascii
The ascii() conversion function takes a character value and returns its integer equivalent. This is handy for comparing nonprinting characters.

if(ascii(line[x]) == ‘\t’)

hex
The hex conversion tool converts a number into a hexadecimal value.

obj = getfirstitem(LIGHT);
info(hex(obj.id));     // prints “0x20000000”

octal
The octal conversion tool converts a number into its octal value.

value = octal(1.7);//result: “\1”

Math

sqrt
The sqrt() function calculates the square root of a number. It accepts a numeric value, and returns the square root of that value.

value = sqrt(4); //result: 2

exp
The exp() function calculates the exponent of a value. It accepts a numeric value, and returns the exponent of that value.

value = exp(2); //result: 7.38906

log
The log() function calculates the logarithmic value of a number. It accepts a number, and returns the logarithmic value of that number.

value = log(124.2); //result: 4.82189

log10
The log() function calculates the logarithmic base 10 value of a number. It accepts a number, and returns the logarithmic value of that number.

sin
The sin() function calculates the sine value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = sin(241.8); //result: 0.102454

cos
The cos() function calculates the cosine value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = cos(153.2); //result: -0.739789

tan
The tan() function calculates the tangent value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = tan(135.0); //result: -0.0887158

asin
The asin() function calculates the asin value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = asin(.2); //result: 0.201358

acos
The acos() function calculates the acos value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = acos(.53); //result: 1.0122

atan
The atan() function calculates the atan value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = atan(129.2); //result: 1.56306

cosh
The cosh() function calculates the hyperbolic values of the cos() function.

value = cosh(82.2); //result: 1.55863

sinh
The sinh() function calculates the hyperbolic values of the sin() function.

value = sinh(.13); //result: 0.130366

tanh
The tanh() function calculates the hyperbolic values of the tan() function.

value = tanh(.01); //result: 0.00999967

cot
The cot() function calculates the cot value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = cot(21); //result: -0.654665

csc
The csc() function calculates the csc value of an angle, specified in radians. It accepts a numeric radian angle, and returns the operation result of that value.

value = csc(121.3); //result: 1.06403

abs
The abs() function returns the absolute value of a number. Regardless of the sign of the number, the return value from this function is always positive.

value = abs(-121.2); //result: 121.2

ceil
The ceil() function returns the smallest integer value that is greater than or equal to the numeric value passed as an argument.

value = ceil(-1.201); //result: -1

floor
The floor() function returns the largest integer value that is less than or equal to its numeric parameter.

value = floor(-1.201); //result: -2

deg
The deg() function accepts a single numeric angle parameter, specified in radians, and converts it to degrees.

value = deg(241.3); //result: 13824.5

random
The random() function generates pseudo-random integer numbers. It can either accept two numeric integer values—which returns a random integer number that lies between those two numbers (inclusive)—or it can accept two floating-point numbers— which will generate a floating-point number that lies between those numbers. Numbers can be negative or positive.

triggerFrameInt = random(20,50);
triggerFrameFloat = random(20.2, 50.2);

min
The min() function returns the smaller of its two numeric arguments.

t = min(1,7); //result: 1

max
The max() function returns the larger of its two numeric arguments.

t = max(1,7); //result: 7

mod
The mod() function returns the modulo—or remainder—of the division when its first numeric argument is divided by its second. The LScript operator % can also be used as a substitute for this behavior.

t = mod(34.5,6); // returns 4.5
    or, alternately,
t = 34.5 % 6;

pow
The pow() function raises its first numeric argument to the power specified by the second argument. You can also use the ^^ operator

t = pow(5,3); // returns 125
or
t = 5^^3;

hypot
The hypot() function calculates the hypotenuse of the right triangle whose sides correspond to the function’s first and second numeric arguments.

t = hypot(3,5);

rad
The rad() function accepts a single numeric angle parameter, specified in degrees, and converts it to radians.

t = rad(degrees);

// equivalent to: degrees * (PI / 180)

randu
The randu() function returns a random number that lies between 0 and 1.

rad = 0.05 * maxlen * (1 + randu());

range
The range() function determines if its first numeric parameter falls within the range of numeric values specified by the second and third parameters, inclusively. It returns a Boolean value (true or false).

if(range(top,3,8))

selector
The selector() function compares the first two numeric parameters, and if the first is less than the second, it returns the third. If the first is greater than or equal to the second, it returns the fourth.

t = selector(4,7,15,3); // returns 15
t = selector(15,7,7,10); // returns 10

step
The step() function evaluates two numeric arguments, and if the second value is less than the first, it returns 0 . If the second value is greater than or equal to the first, it returns the third numeric parameter .

t += step(y,10,.25); // step by .25

round
The round() function will round a numeric value to the decimal place specified in the second integer parameter. If this second value is 0, then the numeric value will be rounded to the nearest whole integer.

t = round(37.7,0); // returns 38
t = round(4.4394,2); // returns 4.44

frac
The frac() function returns the fraction portion of a numeric value.

t = frac(46.75); // returns 0.75

fac
The fac() command calculates the factorial value of the provided numeric parameter.

t = fac(5); // returns 120

Vector Commands

vmag
The vmag() function calculates the magnitude of a three dimensional vector. It can take a vector or three numeric values. 

t = vmag(x,y,z);
// calculate magnitude of my location

You can calculate the distance between two arbitrary vectors in space simply by subtracting them and passing the result to vmag():

v1 = <1,3,5.4>;
v2 = <.054,2,90>;
t = vmag(v1 - v2);

cross2d
cross2d() calculates the cross product of two floating-point values.

value = cross2d(21.4, 53.2, 34.2, 12.1);
//result: -1560.5

cross3d
cross3d() calculates the cross product of two 3-D vectors.

a = <13.2, 2.5, 5.2>;
b = <122.1, 23.4, 53.2>;
value = cross3d(a,b);
//result: <11.32, -67.32, 3.63>

dot2d
dot2d() calculates the dot product of two floating-point values.

value = dot2d(112.1, 24.8, 63.3, -125.6);
//result:10210.8

dot3d
dot3d() calculates the dot product of two 3-D vectors.

value = dot3d(<12.2, 42.5, -12.3>, <125.5, 32.6, -23.1>);
//result: 3200.73

sec
The sec() function calculates the secant value.

value = sec(123.3); //result: -1.40371

gamma
The gamma() function interpolates the factorial function of a value.

value = gamma(121.7); //result: 121.7

normalize
The normalize() function takes a vector and returns a normalized version of that vector.

vec = 123.2;
vec = normalize(vec);
//result: <0.992815, -0.0257874, 0.116849>