PrintAllElements Variable and Context

 

In versions prior to 3ds Max 7, printing or coercing Array, MeshSelection, BigMatrix, and BigMatrixRowArray values to string would convert only the first 20 elements.

In 3ds Max 7 and higher, a MAXScript variable and a new context are available. They control whether the above mentioned value types are fully printed / coerced to string, or just their first 20 elements.

The variable is:

options.printAllElements

When set to true, all elements of Array, MeshSelection, BigMatrix, and BigMatrixRowArray values are printed or coerced to string. If false, only the first 20 elements of these value types are printed.

 

The context is:

with printAllElements <bool> do <expr>

If bool is true, expr is run with printAllElements true. This is exception safe - if an exception occurs in expr, printAllElements is returned to its initial value.

 

Examples:

a = for i = 1 to 30 collect i

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...)

 

with printAllElements off (print a #nomap;ok)

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...)

OK

 

with printAllElements on (print a #nomap;ok)

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)

OK

 

with printAllElements off a as string

"#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, ...)"

 

with printAllElements on a as string

"#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)"

 

(

-- note that the following is not exception safe!

local oldPrintAllElements = options.printAllElements

options.PrintAllElements = true

print a #nomap

options.printAllElements = oldPrintAllElements

ok

)

#(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30)

OK