Datenproxy mit Freihandanalyse

Wie in der Übersicht über die Freihandanalyse erwähnt, verwaltet die Freihandanalysetechnologie intern ein strukturbasiertes Dokumentmodell, das Analyseergebnisse und -beziehungen enthält. Wenn Ihre Anwendung bereits über einen anderen Dokumentspeicher verfügt, müssen Sie die Freihandanalysefeatures verwenden, die zum Proxy von Daten zwischen unterschiedlichen Dokumentmodellen entwickelt wurden.

Arten von Datenproxy

Die Datenproxyfeatures ermöglichen Ihrer Anwendung Folgendes:

  • Integrieren Sie Analyseergebnisdaten wieder in ein vorhandenes Dokumentmodell.
  • Kommunizieren Sie frühere Ergebnisse (oder den Zustand) wieder an den InkAnalyzer.
  • Kommunizieren Sie den Nicht-Freihandzustand in den InkAnalyzer.
  • Kommunizieren Sie nur den Mindestdatensatz (sowohl den vorherigen als auch den Nicht-Freihandzustand), der zum Abschließen des Analysevorgangs erforderlich ist.
  • Aktualisieren Sie einfach das interne Anwendungsdokumentmodell mit Analyseergebnissen.

Es gibt zwei grundlegende Ansätze für den Freihandanalysedatenproxy. Die Unterschiede liegen in den Details darüber, wann und wie die Synchronisierung zwischen den Dokumentmodellen erfolgt. Der erste Ansatz, die synchrone Aktualisierung, erfordert die Änderung des Freihandanalysedokumentmodells, da Änderungen im Anwendungsdokument auftreten. Der zweite Ansatz, die bedarfsgesteuerte Aktualisierung, erfordert, dass nur die daten, die von Änderungen am Anwendungsdokumentmodell betroffen sind, an den InkAnalyzer übergeben werden. Das heißt, nur die Daten für die Teile des Freihandanalysedokumentmodells, die sich im selben Bereich wie Änderungen am Anwendungsdokument befinden, müssen bei Bedarf an den InkAnalyzer übergeben werden.

Synchrones Update

Der synchrone Updateansatz erfordert die Änderung (Erstellung und Löschung) von Knoten in der Auflistung von ContextNode-Objekten des InkAnalyzer-Objekts, wie sie im Anwendungsdokument auftreten. Beispielsweise wird jedes Mal, wenn der Anwendung ein Textwort hinzugefügt wird, im InkAnalyzer ein entsprechender Kontextknoten im TextWord-Format erstellt. Wenn sich die Position des Textworts auf der Seite ändert, wird gleichzeitig die Position des entsprechenden ContextNodes aktualisiert. Diese Methode ist im Hinblick auf die Berechnung von Ressourcen weniger effizient als die on-demand-Methode, da jede Dokumentänderung eine Aktualisierung des InkAnalyzers erfordert, auch wenn sich die Änderung nicht auf die zu analysierende Freihandeingabe auswirkt.

Das folgende Beispiel soll zeigen, wie synchrones Update funktioniert. Stellen Sie sich eine Anwendung vor, die über ein vorhandenes Dokumentmodell verfügt. Wenn der Endbenutzer eine Änderung am Dokument vornimmt, z. B. neuen Text hinzufügen, wird die Änderung wie folgt verarbeitet:

  1. Der Endbenutzer erstellt die neuen Daten.
  2. Die Anwendung bestimmt, wie die Daten verarbeitet werden, speichert sie und rendert sie.
  3. Aus praktischen Gründen erfolgen die folgenden Schritte gleichzeitig.
    1. Die Anwendung platziert die Daten in ihrem Dokumentmodell.
    2. Die Anwendung erstellt einen InkAnalyzer und aktualisiert ihn. Dadurch wird gleichzeitig sichergestellt, dass der InkAnalyzer immer über die neuesten Informationen verfügt.
    3. Die Anwendung ruft BackgroundAnalyze auf dem InkAnalyzer auf, um mit der Analyse zu beginnen.
  4. Eine Reihe von Ereignissen wird ausgelöst, wenn die Änderung Freihand enthält und der InkAnalyzer neue Ergebnisse ermittelt. Ein Ereignis wird für jede Änderung ausgelöst, die an der Auflistung von ContextNode-Objekten im InkAnalyzer vorgenommen wird. Zu diesen Ereignissen gehören ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeleting und ContextNodeReparenting. Die Anwendung verarbeitet diese Ereignisse, um die Ergebnisse des Analysevorgangs nach Bedarf wieder in das Dokumentmodell zu überstellen.
  5. Die Anwendung aktualisiert das Layout des Dokuments und ruft die neuen Daten aus dem Dokumentmodell ab.
  6. Die neuen Daten werden an den Endbenutzer zurück gerendert.

On-Demand-Update

Der On-Demand-Ansatz erfordert nur, dass die Daten für die ContextNode-Objekte übergeben werden, die sich in den zu analysierenden Bereichen befinden. Die erforderlichen ContextNode-Objekte werden unmittelbar nach dem Aufrufen des Analysevorgangs und erneut kurz vor dem Abgleich der Ergebnisse aus dem Dokumentmodell der Anwendung extrahiert. Obwohl die Implementierung komplizierter ist als synchrone Updates, führt dieser Ansatz zu besseren Leistungsergebnissen.

Übersicht über die Freihandanalyse

InkAnalyzer-Klasse (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode