MAL.Add |
ref_arr_out = MAL.Add( BYREF arr_out AS ARRAY, BYREF arr_in1 AS ARRAY, BYREF arr_in2 AS ARRAY, [BYVAL nPoint AS INTEGER=ML_ALL], [BYVAL nFrameOffset AS INTEGER=0] ) AS REFERENCE
ref_arr_out = MAL.Add( BYREF arr_out AS ARRAY, BYREF arr_in AS ARRAY, BYREF nPoint1 AS INTEGER, BYVAL nPoint2 AS INTEGER, [BYVAL nFrameOffset AS INTEGER=0] ) AS REFERENCE
ref_arr_out = MAL.Add( BYREF arr_out AS ARRAY, BYREF arr_in AS ARRAY, [!] [BYVAL value AS REAL=0], [BYVAL nPoint AS INTEGER=ML_ALL], [BYVAL nFrameOffset AS INTEGER=0] ) AS REFERENCE
ref_arr_out = MAL.Add( BYREF arr_out AS ARRAY, BYREF arr_in AS ARRAY, [!] BYVAL valueX AS REAL, [BYVAL valueY AS REAL=valueX], [BYVAL nPoint AS INTEGER=ML_ALL], [BYVAL nFrameOffset AS INTEGER=0] ) AS REFERENCE
ref_arr_out = MAL.Add( BYREF arr_out AS ARRAY, BYREF arr_in AS ARRAY, [!] BYVAL valueX AS REAL, [BYVAL valueY AS REAL=valueX], [BYVAL valueZ AS REAL=valueX], [BYVAL nPoint AS INTEGER=ML_ALL], [BYVAL nFrameOffset AS INTEGER=0] ) AS REFERENCE
Adds one array to another and returns the resulting array as a reference. The 2 input arrays must be of same data type. The second syntax is used to add a scalar number to each of the input arrays index. If the array is a 2D or 3D array, you can specify a number for each dimension. This is useful when you want to translate the 2D/3D point to a different point.
Using the second syntax, the nPoint1 must be specified as an integer. You can use the function INT( n ) to force a number to be of type INTEGER. Note that the point ranges are not allowed using this syntax.
Important Note [!] You need to specify the X/Y/Z offsets to add in syntax 3, 4 and 5 as REAL otherwise the Libray will use it as a point number and use syntax 1 or 2. To make sure that the numbers are REAL, include at least 1 decimal or use the NUM function.
Example:
OPTION EXPLICIT ON OPTION BASE 1
' Include the MaxMAL Library $INCLUDE "MyBASIC2_MaxMAL" $LIBRARY "MyBASIC2_MaxMALLib"
' Forward Declare PrintArray DECLARE SUB PrintArray
' Declare variables and arrays CONST cPoints = 2 CONST cFrames = 10
DIM arrOut(cFrames,cPoints,3) AS REAL DIM arrIn1(cFrames,cPoints,3) AS REAL DIM arrIn2(cFrames,cPoints,3) AS REAL
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Initialize Arrays ' arrOut = 0 arrIn1 = 1 arrIn2 = 2
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Test MaxMAL Vector Algebra Functions ''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' arrOut = arrIn1 + arrIn2 CALL PrintArray( MAL.Add( arrOut, arrIn1, arrIn2 ), "LET arrOut( 3 ) = arrIn1( 1 ) + arrIn2( 2 )" )
' arrOut = arrOut - arrIn1 CALL PrintArray( MAL.Subtract( arrOut, arrOut, arrIn1 ), "LET arrOut( 2 ) = arrOut( 3 ) - arrIn1( 1 )" )
' arrOut = arrOut - arrIn2 CALL PrintArray( MAL.Subtract( arrOut, arrOut, arrIn2 ), "LET arrOut( 0 ) = arrOut( 2 ) - arrIn2( 2 )" )
' arrOut = arrIn1 / arrOut -> #DIVBYZERO CALL PrintArray( MAL.Divide( arrOut, arrIn1, arrOut ), "LET arrOut( # ) = arrIn1( 1 ) / DIVBY0( 0 )" )
' arrOut = arrIn1 / arrIn2 CALL PrintArray( MAL.Divide( arrOut, arrIn1, arrIn2 ), "LET arrOut( 0.5 ) = arrIn1( 1 ) / arrIn2( 2 )" )
' arrOut = arrIn2 * arrOut CALL PrintArray( MAL.Multiply( arrOut, arrIn2, arrOut ), "LET arrOut( 1 ) = arrIn2( 2 ) * arrOut( 0.5 )" )
' arrOut = arrIn1 * 7.5 CALL PrintArray( MAL.Multiply( arrOut, arrIn1, 7.5 ), "LET arrOut( 7.5 = arrIn1( 1 ) * 7.5" )
' arrOut = arrOut / 2.5 CALL PrintArray( MAL.Divide( arrOut, arrOut, 2.5 ), "LET arrOut( 3 ) = arrOut( 7.5 ) / 3 " )
' arrOut = arrOut + 30 CALL PrintArray( MAL.Add( arrOut, arrOut, 30.0 ), "LET arrOut( 33 ) = arrOut( 30 ) + 3" )
' arrOut = arrOut - 30/40/50 CALL PrintArray( MAL.Subtract( arrOut, arrOut, 30.0, 40.0, 50.0 ), "LET arrOut( 3, -7, -17 ) = arrOut( 30 ) - POINT3D( 30, 40, 50 )" )
END
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' ' Print an array with up to 3 dimensions. Array is passed as a reference ' SUB PrintArray( arr AS REFERENCE, msg AS STRING ) PRINT msg, RUN( "ArrayTable", arr, LEN( msg ) = 0 ) END SUB
|