操作するオブジェクトの型を確認する作業は困難です。これは、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 定数値のライト タイプ |
"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 カーブ タイプ |
"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 プロパティは、チェックしているオブジェクトに応じて、異なる種類の情報を戻します。 たとえば、3D オブジェクトやコレクション項目をチェックしている場合は、プリミティブ タイプを戻します。 F カーブや OGL ライトをチェックしている場合は、F カーブや OGL ライトのタイプに応じた数値を戻します。
詳細については、「戻り値の型をチェックする」の冒頭の比較表を参照してください。
' 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 メソッドは、Softimage オブジェクト モデル インタフェースの名前、つまり最も派生されたクラス(クラス階層ツリーのリーフ)の名前を戻します。 ClassName メソッドは、VBScript の TypeName() 関数を使用するのと同様ですが、このメソッドは Softimage でサポートしている任意の言語でも使用できます。
// JScript example : display the class name of an object var oObj = ActiveProject.ActiveScene.Root.AddGeometry("Sphere", "NurbsSurface"); LogMessage( "Object typename = " + Application.ClassName(oObj) );
' 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 プロパティは、現在のオブジェクトの親オブジェクト(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
オブジェクトの親とは、Softimage 階層においてそのオブジェクトの 1 つ上位にあるノードです。 オブジェクトは親を 1 つしか持てませんが、その親も親を持つことができ、Explorer ツリーでは以降同様に続きます。 たとえば、このイメージでは、「cube3」が「sphere1」の親で、「Scene_Root」が「cube3」の親です。
サブコンポーネント(ポイント、セグメント、およびファセット)の場合、その親としてみなされるのは、親となるジオメトリ、またはそのサブコンポーネントの親となるオブジェクトのどちらかです。
オブジェクトのオーナーは、Softimage 階層内でそのオブジェクトを使用する他のノードのいずれか 1 つです。 オブジェクトの親がそのオブジェクトのオーナーである場合も多くあります。 たとえば、上のイメージで「cube3」は、「sphere1」の親およびオーナーの両方を兼ねます。たとえば、上側のイメージで「cube3」は「sphere1」の親およびオーナーの両方を兼ねます。また、「sphere1」がデフォルト レーヤとデフォルト バックグラウンド オブジェクトのパーティションのメンバであるため、ProjectLayersLayer_Default と ProjectPassesDefault_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
' 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