MAXScript は、ネイティブ値から DotNet 値へ、および DotNet 値から MAXScript 値への変換を自動的に行います。
さらに、値の変換は、3ds Max 2010 以降 の専用の関数を使用して明示的に行うこともできます。
次の表は、ネイティブの MAXScript の値の型と、3ds Max 9以降 で変換された DotNet 値の型を示したものです。
MAXScript の型 | DotNet の型 |
---|---|
Integer, Integer64, IntegerPtr, | |
Float, Double, MSTime | Byte, SByte, Decimal, |
Int16, UInt16, Int32, UInt32, | |
IntPtr, UIntPtr, Int64, UInt64, | |
Single, Double | |
Boolean | Boolean |
String | String, Char array |
次の表は、DotNet の値の型と、変換されたネイティブの MAXScript の値の型を示したものです。
DotNet の型 | MAXScript の型 |
---|---|
Byte, SByte, Decimal, | |
Int16, UInt16, Int32, UInt32 | Integer |
Int64, UInt64 | Integer64 |
IntPtr, UIntPtr | IntegerPtr |
Single | Float |
Double | Double |
Boolean | Boolean |
String, Char array | String |
以下のメソッドは、MAXScript 値を DotNet 値に変換するものです。
3ds Max 2010以降で使用可能です。
dotNet.ValueToDotNetObject <value> { <dotNetClass> | <dotNetObject> }
最初の引数として渡された MAXScript 値を、2 つ目の引数として指定された型の DotNet オブジェクトに変換し、dotNetObject 値を返します。
3ds Max 2018.2 Update 以降で使用可能: 一部の .NET ライブラリは、一部の MAXScript タイプをネイティブでサポートしないため、それらは .NET 配列に変換されます。Point2、Point3、Point4、Quat、EulerAngles、および Matrix3 タイプはすべて float\[\]
または double\[\]
配列に変換されます。
このメソッドを使用することにより、MAXScript 配列から簡単に DotNet 配列を作成できます。
<value> dotnet.DotNetArrayToValue <dotNetObject> <Matrix3 | Point2 | Point3 | Point4 | Quat | EulerAngles>
3ds Max 2018.2 Update 以降で使用可能: .net 配列を指定した mxs 値タイプの値に変換します。 .net 配列は浮動小数点型または double 型にする必要があります。Matrix3 の場合は .net 配列のサイズを[4,4]に、Point2 の場合は[2]に、Point3 および EulerAngles の場合は[3]に、Point4 および Quat の場合は[4]にする必要があります。
<value> dotnet.DotNetObjectToValue <dotNetObject>
3ds Max 2018.2 Update 以降で使用可能: .NET オブジェクトを MAXScript 値に変換します。
例:
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