MAL.Add

Previous  Next

 

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