ユーザ データ テンプレートも、バイナリ ユーザ データマップを使用しますが、組込みの機能やインタラクティブなツールも提供します。 プラグイン開発者は、ユーザ データ テンプレート(空のパラメータ セットのようなもの)を作成し、マップに割り当てることができるデータのタイプを指定します。
次に、開発者はこのテンプレートとユーザ データ マップを関連付けます(この処理にはスクリプトを使用することもできます)。 このテンプレートによって、ユーザはユーザ インタフェースからマップ内のユーザ データを簡単に表示、設定、編集できます。
このプロシージャの最初の部分では、テンプレートを作成します。これはカスタム パラメータ セットを作成する場合と同様です。
' 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
次の手順では、スクリプトを使用してユーザ データ マップを作成し、作成したマップに新しいテンプレートを関連付けます。
' 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
この関連付けが完了したら、ユーザにパラメータ ダイアログ ボックスを介した操作機能を提供できます。
' 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 メソッドを使用する必要があります。現時点では、これに相当する機能はオブジェクト モデルにはありません。
これらの値に対する変更が更新されていることを確認するには、ユーザ データ マップが選択されている間に OMView ツール([Netview][Tools][Info OM])を実行します。
または、UserDataMap.ItemValue プロパティを使用すれば、ユーザ データ マップに格納された値に関する情報にアクセスできます。詳細については、「VBScript の例: 特定のエレメント上のユーザ データの取得」を参照してください。
「VBScript の例: ユーザ データ テンプレートの作成」の下のステップに従って、テンプレート化されたユーザ データを作成および修正します。
Call printInfo( oUDMap ) function printInfo( in_oUDMap )
UserDataMap.Template プロパティを使用して、テンプレートを取得します。
Set oTemplate = in_oUDMap.Template
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 を使った特定エレメントに関するユーザ データの設定」を参照してください。
テンプレート内のパラメータごとに処理を繰り返し、その値を取得します(ユーザ データの各部分はユーザ データ マップのテンプレート パラメータとしてアクセスできます)。
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 の例: ユーザ データ テンプレートの作成」の下のステップに従って、テンプレート化されたユーザ データを作成および修正します。
' 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 )
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
ユーザデータマップに割り当てられたデータテンプレートを更新した場合でも、その更新を反映させるには、それらの値をユーザデータマップに戻して保存する必要があります。データを特定のポイントに保存するには、適合する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 の例: 特定のエレメント上のユーザ データの取得」を参照してください。