次の方法で共有


インク分析を使用したデータ プロキシ

インク分析の概要で説明したように、インク分析テクノロジは、分析結果とリレーションシップを含むツリー ベースのドキュメント モデルを内部的に維持します。 アプリケーションに別の確立されたドキュメント ストアが既にある場合は、異なるドキュメント モデル間でデータをプロキシするように設計されたインク分析機能を使用する必要があります。

データ プロキシの種類

データ プロキシ機能を使用すると、アプリケーションで次の処理を行うことができます。

  • 分析結果データを既存のドキュメント モデルに統合します。
  • 以前の結果 (または状態) を InkAnalyzerに伝えます。
  • インク以外の状態を InkAnalyzerに通信します。
  • 分析操作を完了するために必要な最小限のデータ セット (前とインク以外の両方の状態) のみを通信します。
  • 分析結果を使用して、内部アプリケーション ドキュメント モデルを簡単に更新できます。

インク分析データ プロキシには、2 つの基本的な方法があります。 違いは、ドキュメント モデル間の同期がいつどのように行われるかの詳細にあります。 最初の方法である同期更新では、アプリケーション ドキュメントで変更が発生したときにインク分析ドキュメント モデルを変更する必要があります。 2 番目の方法であるオンデマンド更新では、アプリケーション ドキュメント モデルの変更の影響を受けるデータのみを、InkAnalyzerに渡す必要があります。 つまり、アプリケーション ドキュメントの変更と同じ領域にある Ink Analysis ドキュメント モデルの部分のデータのみを、必要に応じて InkAnalyzer に渡す必要があります。

同期更新

同期更新方法では、アプリケーション ドキュメントで発生する ContextNode オブジェクトの InkAnalyzer オブジェクトのコレクション内のノードを変更 (作成および削除) する必要があります。 たとえば、テキスト ワードがアプリケーションに追加されるたびに、対応する TextWord スタイル ContextNodeInkAnalyzerに作成されます。 ページ上のテキスト ワードの場所が変更されると、対応する ContextNode の場所が同時に更新されます。 この方法は、ドキュメントの変更ごとに、分析中のインクに影響を与えない場合でも、InkAnalyzerの更新が含まれるため、オンデマンド方式よりもリソースの計算の効率が低くなります。

次の例は、同期更新のしくみを示しています。 既存のドキュメント モデルを持つアプリケーションを想像してみてください。 新しいテキストの追加など、エンド ユーザーがドキュメントに変更を加えると、変更は次のように処理されます。

  1. エンド ユーザーが新しいデータを作成します。
  2. アプリケーションは、データの処理方法を決定し、データを格納してレンダリングします。
  3. 実用的な目的で、次の手順が同時に実行されます。
    1. アプリケーションは、データをドキュメント モデルに配置します。
    2. アプリケーションは、InkAnalyzer を作成して更新します。 これを同時に実行すると、InkAnalyzer に常に最新の情報が含まれていることが保証されます。
    3. アプリケーションは、InkAnalyzerBackgroundAnalyze を呼び出して分析を開始します。
  4. 一連のイベントは、変更にインクが含まれており、InkAnalyzer によって新しい結果が決定された場合に発生します。 InkAnalyzer内の ContextNode オブジェクトのコレクションに対して行われた変更ごとに、1 つのイベントが発生します。 これらのイベントには、ContextNodeCreatedContextNodeDeletingContextNodeMovingToPositionContextNodePropertiesUpdatedContextNodeLinkAddingContextNodeLinkDeleting、および ContextNodeReparentingが含まれます。 アプリケーションは、これらのイベントを処理して、必要に応じて分析操作の結果をドキュメント モデルにプロキシバックします。
  5. アプリケーションはドキュメントのレイアウトを更新し、ドキュメント モデルから新しいデータをプルします。
  6. 新しいデータがエンド ユーザーにレンダリングされます。

オンデマンド更新

オンデマンド アプローチでは、分析対象の領域にある ContextNodeオブジェクトに対してのみデータを渡す必要があります。 必要な ContextNode オブジェクトは、分析操作が呼び出された直後と、結果を調整する直前に、アプリケーションのドキュメント モデルから抽出されます。 同期更新よりも実装が複雑ですが、この方法ではパフォーマンスが向上します。

インク分析の概要

InkAnalyzer クラス (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode