Visual検索の方法 前編
皆さんこんにちは、Emulate3Dの技術担当の大竹です。
Emulate3Dで対象のVisualに対して、Scriptを使用して何か操作する…
こんなことは日常茶飯事ですよね。
操作するためには、操作するVisualを見つける必要がありますが、
大量のVisualの中から探し出すのは大変です。
そこで、今回はEmulate3Dで利用頻度の高いVisual検索を前編・後編に分けてご紹介します。
目次
シーン上に置かれたVisualから検索
シーン上に置かれたVisualから検索する方法での特徴は、
Visual同士の親子関係を気にせず、全てのVisualから特定のVisualを検索出来る点です。
以下のモデルをサンプルとして、動作を確認します。
シーン上に置かれた全てのVisualから特定のVisualを検索する方法は、
大きく分けて以下の3種類があります。
●「名前」で1個のVisualを取得する方法
●「名前」で複数のVisualを取得する方法
●「タイプ」で複数のVisualを取得する方法
「名前」で1個のVisualを取得する方法
1つ目はVisualの「名前」で1個のVisualを取得する方法です。
一意で存在するVisualを取得したい時に便利です。
C#の場合
var target = document.FindVisual("TargetVisual");
var target = document.FindAnyVisual("TargetVisual");
var target = document.FindVisualByName("TargetVisual");
JScriptの場合
var target : Visual = doc.FindVisual("TargetVisual");
var target : Visual = doc.FindAnyVisual("TargetVisual");
var target : Visual = doc.FindVisualByName("TargetVisual");
各3つの処理では、検索したいVisual名を渡して一致するVisualを取得出来ます。
もし、シーン上に同じ名前のVisualが複数存在する場合は、どれか1個のみを取得します。
サンプルモデルの場合、名前が「TargetVisual」の以下の3個のVisualの中の1個が取得出来ます。
また、FindVisual関数とFindVisualByName関数を使用した場合は、
シーン上に複数同じ名前のVisualが存在する時、警告メッセージが出力されます。
「名前」で複数のVisualを取得する方法
2つ目はVisualの「名前」で複数Visualを取得する方法です。
親子関係も無視してVisual検索出来るため、同じ子供の名前を持つVisualに対して同様の処理を実行したい時に便利です。
C#の場合
var targets = document.FindVisualsByName("TargetVisual");
JScriptの場合
var targets : List<Visual> = doc.FindVisualsByName("TargetVisual");
FindVisualsByName関数では、指定した名前と一致するVisual全てを取得出来ます。
サンプルモデルの場合、名前が「TargetVisual」の以下の3個のVisualが取得出来ます。
「タイプ」で複数のVisualを取得する方法
3つ目はVisualの「タイプ」で複数Visualを取得する方法です。
同じTypeを持つVisualに対して、同様の処理を行う時に便利です。
C#の場合
var targets = document.FindType(typeof(SphereVisual));
JScriptの場合
var targets : List<Visual> = doc.FindType(Demo3D.Visuals.SphereVisual);
FindType関数では、指定したTypeと一致するVisualを全て取得できます。
サンプルモデルの場合、VisualのTypeが「SphereVisual」の以下の4個のVisualが取得出来ます。
シーン上にある全てのVisualから検索が可能なため、
全体で操作を行いたい場合に3つの検索方法を利用してはいかがでしょうか。
プロパティ紐づけでVisualを取得
プロパティ紐づけでVisualを取得する方法での特徴は、
Visual内のプロパティから参照するため、操作したいVisualの「名前」や「親子関係」が変わったとしても見つける事が出来る点です。
また、同様の名前が複数存在していたとしても、検索したいVisualのみを確実に取得出来ます。
プロパティ紐づけでVisualを取得する方法は、プロパティに検索するVisualを参照するのみです。
Visual参照に使用するプロパティは「VisualReference型」と「VisualList型」に関して紹介します。
以下のモデルをサンプルとして、VisualReference型の動作を確認します。
こちらのサンプルモデルでは、名前「Box」がシーン上に複数あり、
その中で赤いBoxVisualを検索したい場合、「シーン上に置かれたVisualから検索」をした場合、どのBoxが取得出来るか分かりません。
そこでVisualReference型「TargetBox」プロパティを付与し、赤いBoxVisualを参照します。
VisualReference型は、1個のVisualを参照することが出来ます。
これで、いつでも赤いBoxVisualを検索することが出来ます。
コードで取得する場合は、「TargetBox」プロパティの値を取得するだけです。
次に以下のモデルをサンプルとして、VisualList型の動作を確認します。
VisualReference型のサンプル同様、名前「Box」が複数存在しています。
今回は、その中で赤・橙・黄緑のBoxVisualを検索したい場合、
「シーン上に置かれたVisualから検索」をしても3個のBoxだけを取得することは難しいです。
そこでVisualList型「TargetBoxs」プロパティを付与し、赤・橙・黄緑のBoxVisualを参照します。
VisualList型は、複数のVisualを参照することが出来ます。
これで、いつでも赤・橙・黄緑のBoxVisualを検索することが出来ます。
コードで取得する場合は、「TargetBoxs」プロパティから、リストのindexを指定して値を取得するだけです。
まとめ
いかがでしたでしょうか。
今回は2つのVisual検索方法をご紹介しました。
後編では、「子供から検索」する方法をご紹介しますので、よろしければそちらもご一緒にご覧ください。
今回ご紹介した内容が、少しでも皆様のお役に立てれば幸いです。