MAXScript と Dotnet の値の変換
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
|
|
|
|
|
次の表は、DotNet の値の型と、変換されたネイティブの MAXScript の値の型を示したものです。
DotNet の型
|
MAXScript の型
|
Byte, SByte, Decimal,
Int16, UInt16, Int32, UInt32
|
|
|
|
|
|
|
|
|
|
|
|
|
|
明示的な変換
以下のメソッドは、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[] 配列に変換されます。
注:EulerAngle は角度で表示されますが、内部的にはラジアンで保存されます。そのため変換された .NET 値はラジアン単位になります。
このメソッドを使用することにより、MAXScript 配列から簡単に DotNet 配列を作成できます。
例
|
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
|