Mixed Reality を使用してオブジェクトが空間に収まるかどうかをテストする
測定カメラ コントロールを使用して、サイズが分かっているオブジェクトが特定の空間に収まるかどうかを判断できます。 この記事では、それを行うためのキャンバス アプリを作成します。
ヒント
Mixed Reality (MR) コントロールは、フラット テクスチャ サーフェスの明るい環境で最適に動作します。 LIDAR 対応デバイスでは、トラッキングが優れています。
最小寸法の入力フィールドをキャンバス アプリに追加する
最初に、空白のキャンバス アプリを作成します。 次に、ユーザーがテストする最小寸法 (つまり、目的のオブジェクトを収容する最小空間) を入力する方法を追加します。
挿入 タブを選択します。画面に 3 つの テキス トラベル コントロールを挿入して配置します。
ラベルの Text プロパティをそれぞれ 最小の幅、最小の奥行き、最小の高さ に変更します。
挿入 タブを選択します。3 つの テキスト入力 コントロールを挿入し、3 つのラベルの右側に配置します。
テキスト入力コントロールの名前をそれぞれ minWidth、minDepth、minHeight に変更します。
3 つの テキスト入力コントロールをすべて選択します。 グループの Format プロパティを 数値 に変更し、Default プロパティを 1.0 に設定します。
測定カメラ コントロールを追加してバインドする
次に、測定カメラ を追加して、ユーザーが 3 次元空間を計測できるようにします。 後で使用するために、測定値をデータ テーブルにバインドします。
挿入 タブを選択して、メディア を展開します。
測定カメラ を選択して、コントロールをアプリ画面に配置します。 画面の下部付近にコントロールをドラッグします。
コントロールのプロパティを次のように変更します:
プロパティ名 値 場所 Unit of measurement フィートまたはメートル プロパティ タブで選択する Measurement type 体積 プロパティ タブで選択する Box draw オン プロパティ タブで選択する 品目 Table({label:"Test Volume"}) 詳細 タブに入力する ItemsLabels "label" 詳細 タブに入力する OnMixedRealitySelect Set(testVolume, LookUp(MeasureInMR1.Measurements, Label = "Test Volume")); 詳細 タブに入力する
測定カメラ コントロールの Items、ItemsLabels、OnMixedRealitySelect のプロパティを完了すると、次の例のようになります:
Items の式では、"Test Volume" という名前のデータ テーブルに測定された空間の寸法を取り込みます。 OnMixedRealitySelect の式では、"testVolume"という名前の変数を"Test Volume"テーブルに取り込まれた値に設定します。
結果を表示する
最後に、テキスト ラベルを追加して、取得した測定値とテストの結果 (つまり、オブジェクトが測定された空間に収まるかどうか) を表示します。
挿入 タブを選択します。画面に 4 つの テキス トラベル コントロールを挿入して配置します。
ラベル コントロールの Text プロパティを次のように変更します。 (ヒント: 各数式をコピーして、数式バーまたは 詳細 プロパティ タブのいずれか好きな方に貼り付けます。)
最初のラベル:
If(IsBlankOrError(testVolume), "No Measurement captured", If(testVolume.Height >= Value(minHeight.Text) && ((testVolume.BoundingWidth >= Value(minWidth.Text) && testVolume.BoundingDepth >= Value(minDepth.Text)) || (testVolume.BoundingWidth >= Value(minDepth.Text) && testVolume.BoundingDepth >= Value(minWidth.Text))), "Fit Test Succeeded", "Fit Test Failed"))
この数式は、目的のオブジェクトを収容するために必要な最小寸法に基づいて、テストが成功したか失敗したかに応じてラベル テキストを設定します。 測定値が取り込まれなかったか、エラーが発生したためにテストが実行されなかった場合、ラベル テキストはそのことを反映します。
2 番目のラベル:
Concatenate("Bounding Width: ", Text(testVolume.BoundingWidth))
この数式は、ラベル テキストを "Bounding Width:" に設定し、その後に測定された空間の幅寸法を設定します。
3 番目のラベル:
Concatenate("Bounding Depth: ", Text(testVolume.BoundingDepth))
この数式は、ラベル テキストを "Bounding Depth: " に設定し、その後に測定された空間の奥行き寸法を設定します。
4 番目のラベル:
Concatenate("Bounding Height: ", Text(testVolume.Height))
この数式は、ラベル テキストを "Bounding Height: " に設定し、その後に測定された空間の高さ寸法を設定します。
アプリ画面は次のようになります:
アプリをテストする
プレビュー ボタンを選択して、アプリをプレビュー モードで実行します。 計測カメラ を選択して、ラベルにデータを入力します。 ラベル バインディングが機能していることを確認するには、テキスト入力フィールドに新しい値を入力します。
Bounding Width と Bounding Depth の値は、テストの実行時にスワップできます。
アプリを 保存して公開 します。 Mixed Reality 対応デバイスで開いて、指定した寸法のオブジェクトが取り込まれた測定値の範囲内に収まるかどうかをテストします。
データ ソースのフィルター処理
作成したアプリは、アプリの実行時にユーザーが指定した 1 セットの寸法をテストします。 ただし、式を Filter 述語として適用することで、任意のデータ ソースに対してテストするように拡張できます。
たとえば、アプリに、Width、Depth、Height (各製品の寸法に対応) の 3 列を含む Products という名前の Dataverse テーブルへの参照が含まれているとします。 測定された体積内に収まる測定値のみ表示するようにコレクションをフィルターするには、次の式を適用できます。
If(IsBlankOrError(testVolume), Products,
Filter(Products, testVolume.Height >= Height &&
((testVolume.BoundingWidth >= Width && testVolume.BoundingDepth >= Depth) ||
(testVolume.BoundingWidth >= Depth && testVolume.BoundingDepth >= Width))))
参照
注意
ドキュメントの言語設定についてお聞かせください。 簡単な調査を行います。 (この調査は英語です)
この調査には約 7 分かかります。 個人データは収集されません (プライバシー ステートメント)。