戻り値の型をチェックする

 
 
 

操作するオブジェクトの型を確認する作業は困難です。これは、Autodesk Softimage SDK から得られる「型」情報が非常に多種多様なためです。 たとえば、すべての Softimage オブジェクトに実装されている ClassName (Application) プロパティがありますが、このプロパティは、項目が属するインタフェースまたはクラスを識別する ClassName (Application) メソッドとは異なります。

注:

Application.ClassName メソッドは VBScript の TypeName 関数に似ており、サブタイプまたはシーン アイテムの種類(X3DObject など)を返します。 Application.ClassName メソッドでは、VBScript のプログラマ以外のユーザでもインタフェース名をテストできます。

しかし、VBScript の TypeName 関数では標準的なデータ型(文字列、ブール型、整数など)やクラス名をテストできますが、Application.ClassName メソッドの動作ではテストできない点が異なります。たとえば、JScript では戻り値のデータ型を判断するために typeof オペレータを使用してテストする必要があります。

以下の表では、いくつかの Softimage オブジェクトの概要と、Type プロパティおよび ClassName メソッドのどちらで作業をすると何が戻されるのかを説明します。

テストする項目

Type プロパティの戻り値

Object.Type に対する LogMessage の表示内容

ClassName(Object)に対する LogMessage の表示内容

XSICollection

Softimage コレクション タイプ

"XSICollection"

"Object"

CollectionItem

文字列のオブジェクト タイプ このタイプは、CollectionItem のタイプに応じて、ジオメトリの種類を表したり、パス、ライト、またはカメラであることを示します。

"Camera""polymsh"など

"CollectionItem"

カメラリグ(Camera_Root、Telephoto_Root など)

プリミティブ タイプ(カメラ リグの場合は 1 タイプのみ)

"CameraRoot"

"CameraRig"

カメラ(Camera、Telephoto など)

プリミティブ タイプ(カメラの場合は 1 タイプのみ)

"camera"

"Camera"

ライトリグ(Light_Box_Root、Spot_Root など)

プリミティブ タイプ (ライト リグの場合は 1 タイプのみ)

"SpotRoot"

"LightRig"

ライト(Light_Box、Spot など)

プリミティブ タイプ(ライトの場合は 1 タイプのみ)

"light"

"Light"

OGLLight

siLightType 定数値のライト タイプ

  • siLightPoint の場合は 0

  • siLightInfinite の場合は 1

  • siLightSpot の場合は 2

  • siLightSun の場合は 3

"0""1""2"など

"OGLLight"

パス(Default_Pass など)

オブジェクト タイプ(パスの場合は 1 タイプのみ)

"#Pass"

"Pass"

レイヤ(Default_Layer など)

オブジェクト タイプ(レイヤの場合は 1 タイプのみ)

"#Group"

"Layer"

Null

プリミティブ タイプ

"null"

"Null"

メッシュ サーフェス オブジェクト(円錐、立方体、円柱、円盤、グリッド、球、円環体、*面体、サッカー ボール)

ジオメトリ タイプ

"polymsh"

"X3DObject"

インプリシット(弧、円、螺旋、正方形、円錐、立方体、円柱、円盤、グリッド、球、トーラス)

インプリシット タイプ

"arc""circle""cone"など

"X3DObject"

NURBS サーフェス オブジェクト(円錐、立方体、円柱、円盤、グリッド、球、円環体)

ジオメトリ タイプ

"surfmsh"

"X3DObject"

CurveList(弧、円、螺旋、正方形)

ジオメトリ タイプ

"crvlist"

"X3DObject"

プリミティブ

ジオメトリ タイプ

"polymsh""surfmsh""crvlist"など

"Primitive(プリミティブ)"

SubComponent

文字列のサブコンポーネントのクラスタ タイプ 形式: cluster_type + "SubComponent"

"pntSubComponent""edgeSubComponent""polySubComponent"など

"SubComponent"

オペレータ

オペレータ タイプ

注:

使用可能なオペレータの全リストについては、「オペレータ プリセット」を参照してください。

"twistop""geom"など

"Operator(オペレータ)"

FCurve

siFCurveType 定数の F カーブ タイプ

  • siUnknownFCurve の場合は 0

  • siDefaultFCurve の場合は 0

  • siBooleanFCurve の場合は 10

  • siIntegerFCurve の場合は 15

  • siStandardFCurve の場合は 20

  • siRawDataFCurve の場合は 30

"0""10""20"など。

"FCurve(F カーブ)"

Geometry0D Geometry1D Geometry2D

文字列のサブコンポーネントのクラスタ タイプ

注:

これらのオブジェクトおよびそのコンポーネントは、廃止されました。

"pntSubComponent""edgeSubComponent""polySubComponent"など。

"Geometry0D""Geometry1D""Geometry2D"など。

キネマティクス、グローバル/ローカル変換、Scene_Material(特定のパラメータ セット)

パラメータ(プロパティ)セット タイプ

"kine""CompoundParameter""material"など。

"Kinematics""KinematicState""Material"など。

シーン カラー、アンビエント ライティング、ディスプレイ、ジオメトリ アプロクシメーション(一般的なパラメータ セット)

パラメータ(プロパティ)セット タイプ

"Scenecolors""AmbientLighting""display""geomapprox"など。

"Property(プロパティ)"

パラメータ(PosX、緑、長さ、U サブディビジョンなど)

パラメータ

"Parameter(パラメータ)"

"Parameter(パラメータ)"

コンストレイント

コンストレイント名

"dircns"

"Constraint(コンストレイント)"

EventInfo

文字列のイベント タイプ すべての Softimage イベントで、これは XSIApplication です。

"XSIApplication"

"EventInfo"

ヒント:

このリストには、Type プロパティに指定可能な戻り値のサンプルのみが含まれます。 Type および ClassName の詳細については、「Type プロパティのテストの目的」および「ClassName メソッドのテストの目的」を参照してください。

Type プロパティのテストの目的

Type プロパティは、チェックしているオブジェクトに応じて、異なる種類の情報を戻します。 たとえば、3D オブジェクトやコレクション項目をチェックしている場合は、プリミティブ タイプを戻します。 F カーブや OGL ライトをチェックしている場合は、F カーブや OGL ライトのタイプに応じた数値を戻します。

ヒント:

詳細については、「戻り値の型をチェックする」の冒頭の比較表を参照してください。

例: Type プロパティを使用する

' Set up some items to test
Set oObj = ActiveSceneRoot.AddGeometry( "Cube", "MeshSurface" )
Set oColl = CreateObject( "XSI.Collection" )
oColl.Add oObj

' Is there any difference between the CollectionItem
' and the object it refers to?
printInfo oObj
printInfo oColl.Item(0)

' What about fcurves?
printInfo oObj.posx.AddFCurve

' Getting the operator type
ApplyOp "twist", oObj
Set oOpStack = oObj.ActivePrimitive.ConstructionHistory
For Each oOp in oOpStack
	printInfo oOp
Next

' Testing parameters and properties
printInfo oObj.Properties(0)
printInfo oObj.Parameters(0)

' What about the model?
printInfo ActiveSceneRoot

' Pass and Layer info
printInfo GetValue( "Passes.Default_Pass" )
printInfo GetValue( "Layers.Layer_Default" )

' CameraRig & primitive
Set oCamera = ActiveSceneRoot.FindChild( "camera" )
printInfo oCamera
Set oCameraRig = oCamera.Parent
printInfo oCameraRig

function printInfo( in_object )
	logmessage in_object.type
end function

' Output of above script is:
'INFO : "polymsh"
'INFO : "polymsh"
'INFO : "20"
'INFO : "twistop"
'INFO : "geom"
'INFO : "kine"
'INFO : "Parameter"
'INFO : "#model"
'INFO : "#Pass"
'INFO : "#Group"
'INFO : "camera"
'INFO : "CameraRoot"

ClassName メソッドのテストの目的

ClassName メソッドは、Softimage オブジェクト モデル インタフェースの名前、つまり最も派生されたクラス(クラス階層ツリーのリーフ)の名前を戻します。 ClassName メソッドは、VBScript の TypeName() 関数を使用するのと同様ですが、このメソッドは Softimage でサポートしている任意の言語でも使用できます。

例: JScript を使用して ClassName メソッドを呼び出す

// JScript example : display the class name of an object
var oObj = ActiveProject.ActiveScene.Root.AddGeometry("Sphere", "NurbsSurface");
LogMessage( "Object typename = " + Application.ClassName(oObj) );

例: 球体に対して Type および ClassName の両方をテストする

たとえば、次のコード フラグメントを実行するとします。

' Set the workspace
Set oRoot = ActiveProject.ActiveScene.Root

' Create a polymesh sphere 
Set oSphere = oRoot.AddGeometry( "Sphere", _ "MeshSurface" )
Set oPrim = oSphere.ActivePrimitive

' Use the Type property (Softimage type)
LogMessage "Type property gives: " & oSphere.Type

' Use the ClassName method (interface name)
LogMessage "ClassName method gives: " & _ ClassName( oSphere )

Script Editor のヒストリ ペインに、以下のメッセージが表示されます。

' INFO : "Type property gives: polymsh"
' INFO : "ClassName method gives: X3DObject"

ただし、Type プロパティの動作は、オブジェクトおよびコンテキストに応じて異なります。 Type プロパティのチェック対象の詳細については、「Type プロパティのテストの目的」を参照してください。

その他のテスト: BelongsTo、Owners、Parent、および Parent3DObject

BelongsTo プロパティから、ファミリの情報(現在のオブジェクトがどのオブジェクト ファミリに属しているか)にアクセスします。ファミリの詳細については、「ファミリとは」を参照してください。

Owners プロパティは、現在のオブジェクトの親オブジェクト(Autodesk Softimage から見る限りは親)を返します。オーナーの詳細については、「親およびオーナーとは」を参照してください。

Parent プロパティは、現在のオブジェクトの親オブジェクト、または現在のサブコンポーネントの親となるジオメトリを返します。 Softimage は、ユーザによる問い合わせの対象がオブジェクトまたはサブコンポーネントのどちらに該当するかを判別して、該当する値を返します。

Parent3DObject プロパティは、現在のサブコンポーネントの親となるオブジェクトを返します。親の詳細については、「親およびオーナーとは」を参照してください。

オブジェクトとサブコンポーネントの詳細については、「シーン エレメントへのアクセス」を参照してください。

ファミリとは

ファミリとは、一部のプロパティまたはメソッドを共有する可能性があり、オブジェクト階層内のシブリングではないオブジェクト同士を関連付ける方法です。 つまり、継承ツリー内において直線上に位置していないオブジェクト同士の間の明示的な関係は、「ファミリ」によって確立されます。 オブジェクト モデルの階層表示を確認するには、「オブジェクト モデルの階層」を参照してください。

プロパティ、メソッド、およびイベントを共有するオブジェクト間の明示的な関係を確立するために Autodesk Softimage SDK の開発者達はファミリを使用したと言えば、もっと分かりやすいでしょう。

ヒント:

ファミリの全リストについては、マニュアルの siFamily コンスタントを参照してください。

例: アクション ソースのファミリを確認する

Families プロパティを使用してファミリ情報にアクセスできます。 この例では、単純なアクションをコード フラグメントで作成して(つまり検索先となるアクションソースが存在します)、その後で Families プロパティを使用して所属先ファミリのリストを出力します。

' Set up my workspace
Set oRoot = Application.ActiveProject.ActiveScene.Root

' The commands create a simple actionsource from some ' animation on the nulls position
Set oNull = GetPrim( "Null" )
sPosParams = oNull & ".kine.local.posx," & oNull _
	& ".kine.local.posy," & oNull & ".kine.local.posz"
Translate oNull, -8.153, 7.015, -0.702, siRelative, _
	siView, siObj, siXYZ
SaveKey sPosParams, 1.000
Translate oNull, 8.350, -8.935, 0.894, siRelative, _
	siView, siObj, siXYZ
SaveKey sPosParams, 50.000
Translate oNull, 9.413, 8.935, -0.894, siRelative, _
	siView, siObj, siXYZ
SaveKey sPosParams, 100.000
StoreAction oRoot, sPosParams, 2, "StoredFcvAction", _
	True, 1, 100
	
' Get the action source from the model
Set oSources = oRoot.Sources

' Print the names and families of each source
For Each s In oSources
	LogMessage s.name & ": " & s.Families
Next

現在選択されているオブジェクトのファミリ情報を確認するには

' Test to see if the object is a 3D Object
If oSel.BelongsTo( "3D Object" ) Then
	LogMessage "BelongsTo property = True (for 3D Obj)"
Else
	LogMessage "BelongsTo property = False"
End If

' Print family id
LogMessage "Families property = " & oSel.Families

親およびオーナーとは

オブジェクトのとは、Softimage 階層においてそのオブジェクトの 1 つ上位にあるノードです。 オブジェクトは親を 1 つしか持てませんが、その親も親を持つことができ、Explorer ツリーでは以降同様に続きます。 たとえば、このイメージでは、「cube3」が「sphere1」の親で、「Scene_Root」が「cube3」の親です。

サブコンポーネント(ポイント、セグメント、およびファセット)の場合、その親としてみなされるのは、親となるジオメトリ、またはそのサブコンポーネントの親となるオブジェクトのどちらかです。

オブジェクトのオーナーは、Softimage 階層内でそのオブジェクトを使用する他のノードのいずれか 1 つです。 オブジェクトの親がそのオブジェクトのオーナーである場合も多くあります。 たとえば、上のイメージで「cube3」は、「sphere1」の親およびオーナーの両方を兼ねます。たとえば、上側のイメージで「cube3」は「sphere1」の親およびオーナーの両方を兼ねます。また、「sphere1」がデフォルト レーヤとデフォルト バックグラウンド オブジェクトのパーティションのメンバであるため、ProjectLayersLayer_DefaultProjectPassesDefault_PassBackground_Objects_Partition の下に表示されています。

現在選択されているオブジェクトのオーナーを確認するには

' Get the selection
Set oSelected = Selection

' Find the owner & print its name
For Each s In oSelected
	LogMessage s.Owners.Count & " owner(s) for " & s
	Set oOwner = s.Owners
	For i = 0 To oOwner.Count - 1
		Set o = oOwner(i)
		LogMessage "Owner #" & i + 1 & " is " & o
	Next
Next

現在選択されているオブジェクトの親を確認するには

' Get the selection
Set oSelected = Selection

' Find & print the parent's name of each selected item
For Each s In oSelected
		LogMessage s & "'s parent is " & s.Parent
Next
重要:

シーン ルートの Parent プロパティを使用するときは、ルートがシーン階層の最上位のノードであるために、シーン ルートが戻されることを覚えておいてください。

現在選択されているサブコンポーネントの親情報を確認するには

' Get the selection (assuming it's a subcomponent)
Set oSelected = Selection(0)
Set oSubSel = oSelected.SubComponent

' Find the Parenting Geometry
LogMessage oSubSel & "'s parenting geometry is " & _
	oSubSel.Parent
	
' Find the Parent Object
LogMessage oSubSel & "'s parent object is " & _
	oSubSel.Parent3DObject