MAXScript / DotNet Value Conversions
MAXScript will automatically convert its native values to DotNet values and DotNet
values to MAXScript values.
In addition, value conversion can be performed explicitly using a dedicated function
in
3ds Max 2010 and higher.
Automatic Conversion
The following table shows the native MAXScript value types and the converted DotNet
value types in
3ds Max 9 and higher.
MAXScript type
|
DotNet type
|
Integer, Integer64, IntegerPtr,
Float, Double, MSTime
|
Byte, SByte, Decimal,
Int16, UInt16, Int32, UInt32,
IntPtr, UIntPtr, Int64, UInt64,
Single, Double
|
|
|
|
|
The following table shows the DotNet value types and the converted native MAXScript
value types.
DotNet type
|
MAXScript type
|
Byte, SByte, Decimal,
Int16, UInt16, Int32, UInt32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Explicit Conversion
The following method performs a conversion of a MAXScript value to a DotNet value.
Available in
3ds Max 2010 and higher.
dotNet.ValueToDotNetObject <value> { <dotNetClass> | <dotNetObject> }
Returns a dotNetObject value where the MAXScript value passed as first argument is
converted to a DotNet object of the type specified by the second argument.
New in
3ds Max 2018 Update 2: Some native MAXScript types are converted into .NET arrays, as some .NET libraries
do not support these types natively.
Point2,
Point3,
Point4,
Quat,
EulerAngles, and
Matrix3 types are all converted into
float[] or
double[] arrays.
NOTE:EulerAngles are displayed in degrees, but are stored internally as radians, so the
converted .NET values are in radians.
This allows for the easy creation of DotNet arrays from MAXScript arrays:
EXAMPLES
|
type = dotNetClass "System.Int32[]"
--> dotNetClass:System.Int32[]
res = dotnet.ValueToDotNetObject #(11,12,23) type
--> dotNetObject:System.Int32[]
res.length
--> 3
res.getvalue 2 --DotNet arrays are zero-based.
--> 23
|
typef = dotnetclass "System.Single[]" --> dotNetClass:System.Single[]
vf = dotnet.ValueToDotNetObject x_axis typef --> dotNetObject:System.Single[]
vf.get 0 --> 1.0
typed = dotnetclass "System.Double[]" --> dotNetClass:System.Double[]
vd = dotnet.ValueToDotNetObject x_axis typed --> dotNetObject:System.Double[]
vd.get 0 --> 1.0d0
typefa = dotnetclass "System.Single[][]" --> dotNetClass:System.Single[][]
vfa = dotnet.ValueToDotNetObject #([1,2],
[1,2,3],
[1,2,3,4],
(quat 0.854433 0.00437304 0.0050751 0.519518),
(eulerAngles -117.399 -0.757267 0.126046)
) typefa --> dotNetObject:System.Single[]
vfa0 = vfa.get 0 --> #(1.0, 2.0)
vfa1 = vfa.get 1 --> #(1.0, 2.0, 3.0)
vfa2 = vfa.get 2 --> #(1.0, 2.0, 3.0, 4.0)
vfa3 = vfa.get 3 --> #(0.854433, 0.00437304, 0.0050751, 0.519518)
vfa4 = vfa.get 4 --> #(-2.049, -0.0132168, 0.00219992)
|
typef2 = dotnetclass "System.Single[]"
vfa2 = dotnet.ValueToDotNetObject (matrix3 [0.99991,0.0127462,0.00412892]
[0.00219972,-0.460163,0.887832]
[0.0132164,-0.887743,-0.46015]
[90,0,-45]) typef2 --> dotNetClass:System.Single[,]
vfa2.get 0 0 --> 0.99991
|