コンポーネント上のユーザ データ テンプレートにアクセスする

 
 
 

ユーザ データ テンプレートも、バイナリ ユーザ データマップを使用しますが、組込みの機能やインタラクティブなツールも提供します。 プラグイン開発者は、ユーザ データ テンプレート(空のパラメータ セットのようなもの)を作成し、マップに割り当てることができるデータのタイプを指定します。

次に、開発者はこのテンプレートとユーザ データ マップを関連付けます(この処理にはスクリプトを使用することもできます)。 このテンプレートによって、ユーザはユーザ インタフェースからマップ内のユーザ データを簡単に表示、設定、編集できます。

注:

テンプレートの作成と特定のユーザ データ マップへの関連付けが完了し、ユーザが値の関連付けを開始した後は、パラメータを追加したり、削除したりしないでください。

このため、ユーザ データ テンプレートを読み取り専用と考える必要があります。

VBScript の例: ユーザ データ テンプレートの作成

  1. このプロシージャの最初の部分では、テンプレートを作成します。これはカスタム パラメータ セットを作成する場合と同様です。

    ' Create a grid 
    Set oRoot = ActiveSceneRoot
    Set oGrid = oRoot.AddGeometry( "Grid", "MeshSurface" )
    
    ' Create a custom parameter set
    aCls = Array( 27,28,35,36 )
    Set oCluster = oGrid.ActivePrimitive.Geometry.AddCluster( siPolygonCluster,, _
    						aCls )
    Set oParamSet = oCluster.AddProperty( "Custom_parameter_list")
    
    oParamSet.AddParameter "Juiciness_Factor", siFloat,,,,,, 25, 0, 50
    oParamSet.AddParameter "Special_Instructions", siString
    oParamSet.AddParameter "Toggle_Effect", siBool,,,,,, True
    
    注:

    テンプレートは、スクリプトとユーザ インタフェースのどちらを使用しても作成です。 ユーザ インタフェースを使用したカスタム パラメータ セットの作成手順については、「アニメーション」を参照してください。

    このスクリプトの結果は、以下のようなテンプレートになります。

  2. 次の手順では、スクリプトを使用してユーザ データ マップを作成し、作成したマップに新しいテンプレートを関連付けます。

    ' Attach a user data map to a cluster on the grid
    Set oUDMap = oCluster.AddProperty( "UserDataMap" )
    
    ' Associate the template to the new user data map
    Set oUDMap.Template = oParamSet
    
  3. この関連付けが完了したら、ユーザにパラメータ ダイアログ ボックスを介した操作機能を提供できます。

    ' Change some values on selected clusters
    Set oSubComp = oGrid.ActivePrimitive.Geometry.CreateSubComponent( _
    		siPolygonCluster, aCls )
    SIInspectUserData oUDMap, oSubComp
    

    Script Editor のヒストリ ログに、以下のメッセージが記録されます。

    'SIInspectUserData "grid1.polymsh.cls.Polygon.User_Data_Map", "grid1.poly[27,28,35,36]"
    
    注:

    SIInspectUserData はスクリプト コマンドなので、このコマンドをコンパイル プラグインで使用する場合は、XSIApplication.ExecuteScriptCommand メソッドを使用する必要があります。現時点では、これに相当する機能はオブジェクト モデルにはありません。

  4. これらの値に対する変更が更新されていることを確認するには、ユーザ データ マップが選択されている間に OMView ツール([Netview][Tools][Info OM])を実行します。

    または、UserDataMap.ItemValue プロパティを使用すれば、ユーザ データ マップに格納された値に関する情報にアクセスできます。詳細については、「VBScript の例: 特定のエレメント上のユーザ データの取得」を参照してください。

VBScript の例: 特定のエレメント上のユーザ データの取得

  1. VBScript の例: ユーザ データ テンプレートの作成」の下のステップに従って、テンプレート化されたユーザ データを作成および修正します。

    Call printInfo( oUDMap )
    
    function printInfo( in_oUDMap )
    
  2. UserDataMap.Template プロパティを使用して、テンプレートを取得します。

    Set oTemplate = in_oUDMap.Template
    
  3. UserDataMap.Item プロパティを使用して、各クラスタ エレメント上のユーザ データを UserDataItem オブジェクトとして取得します。

    ヒント:

    ユーザデータマップ全体が、多くの未使用のエレメントを持つクラスタに関連付けられている可能性があるため、アイテムごとにテストして、データが含まれているかどうかを確認する必要があります。

    	For iCounter = 0 to in_oUDMap.Count - 1
    		LogMessage "========================================================="
    		LogMessage "Information for Point #" & (iCounter + 1)
    		LogMessage "---------------------------------------------------------"
    		If (Not oUDMap.IsEmpty(iCounter)) Then
    			Set oUDItem = in_oUDMap.Item(iCounter)
    			oTemplate.BinaryData = oUDItem.Value
    
    注:

    UserDataItem オブジェクトの使用は、UserDataMap.ItemValue プロパティの使用に相当します。UserDataMap.ItemValue プロパティを使用する例については、「VBScript の例: UserDataMap.ItemValue を使った特定エレメントに関するユーザ データの設定」を参照してください。

  4. テンプレート内のパラメータごとに処理を繰り返し、その値を取得します(ユーザ データの各部分はユーザ データ マップのテンプレート パラメータとしてアクセスできます)。

    	
    			For Each oParam in oTemplate.Parameters
    				If oParam.Value = "" Then
    					LogMessage oParam.ScriptName & ": (no data)"
    				Else
    					LogMessage oParam.ScriptName & ": " & oParam.Value
    				End If
    			Next
    		End If
    	Next
    
    	LogMessage "========================================================="
    end function
    

    Script Editor のヒストリ ログに、以下のメッセージが記録されます。

    'INFO : "========================================================="
    'INFO : "Information for Point #1"
    'INFO : "---------------------------------------------------------"
    'INFO : "Juiciness_Factor: 25"
    'INFO : "Special_Instructions: (no data)"
    'INFO : "Toggle_Effect: True"
    'INFO : "========================================================="
    'INFO : "Information for Point #2"
    'INFO : "---------------------------------------------------------"
    'INFO : "Juiciness_Factor: 25"
    'INFO : "Special_Instructions: (no data)"
    'INFO : "Toggle_Effect: True"
    'INFO : "========================================================="
    'INFO : "Information for Point #3"
    'INFO : "---------------------------------------------------------"
    'INFO : "Juiciness_Factor: 25"
    'INFO : "Special_Instructions: (no data)"
    'INFO : "Toggle_Effect: True"
    'INFO : "========================================================="
    'INFO : "Information for Point #4"
    'INFO : "---------------------------------------------------------"
    'INFO : "Juiciness_Factor: 25"
    'INFO : "Special_Instructions: (no data)"
    'INFO : "Toggle_Effect: True"
    'INFO : "========================================================="
    
ヒント:

表示される各クラスタ エレメントの情報(ユーザ データ アイテム)が同じであることに注意してください。 これは、クラスタ内のすべてのサブコンポーネント上のユーザ データが検査されているためです。

	Set oSubComp = oGrid.ActivePrimitive.Geometry.CreateSubComponent( _
			siPolygonCluster, aCls )
	SIInspectUserData oUDMap, oSubComp

個々のエレメント上のデータを変更したい場合は、各クラスタ エレメントの UserDataMap.ItemValue プロパティ(「VBScript の例: UserDataMap.ItemValue を使った特定エレメントに関するユーザ データの設定」を参照)を使用するか、クラスタの 1 つのコンポーネントから派生した SubComponent 上の SIInspectUserData コマンドを使用できます。

	Set oSubComp = oGrid.ActivePrimitive.Geometry.CreateSubComponent( _
			siPolygonCluster, array(27) )
	SIInspectUserData oUDMap, oSubComp

VBScript の例: UserDataMap.ItemValue を使った特定エレメントに関するユーザ データの設定

  1. VBScript の例: ユーザ データ テンプレートの作成」の下のステップに従って、テンプレート化されたユーザ データを作成および修正します。

    ' Change the values on some individual points
    Call setValues( oUDMap, 0, 12, "Generic", False )
    Call setValues( oUDMap, 1, 7, "Low", False )
    Call setValues( oUDMap, 2, 23, "Severus", True )
    
  2. UserDataMap オブジェクトの Template プロパティを使用すれば、テンプレート データの各パラメータにアクセスできます。

    sub setValues( in_objUDM, in_intID, in_strPar1, in_strPar2, in_strPar3 )
    	' Assign the specified values to the individual parameters of the template
    	in_objUDM.Template.Parameters("Juiciness_Factor").Value = in_strPar1
    	in_objUDM.Template.Parameters("Special_Instructions").Value = in_strPar2
    	in_objUDM.Template.Parameters("Toggle_Effect").Value = in_strPar3
    
  3. ユーザデータマップに割り当てられたデータテンプレートを更新した場合でも、その更新を反映させるには、それらの値をユーザデータマップに戻して保存する必要があります。データを特定のポイントに保存するには、適合するUserDataMap.ItemValue プロパティを使用します。

    ' Assign the template values back to the user data map
    in_objUDM.ItemValue(in_intID) = in_objUDM.Template.BinaryData
    end sub
    
    注:

    UserDataMap.ItemValue プロパティの使用は、UserDataItem オブジェクトの使用と同等です。UserDataItem オブジェクトを使用する例については、「VBScript の例: 特定のエレメント上のユーザ データの取得」を参照してください。