Serwer proxy danych z analizą pisma oddyskowego
Jak wspomniano w Omówienie analizy pisma odręcznego, technologia analizy pisma odręcznego wewnętrznie utrzymuje model dokumentów oparty na drzewie w celu przechowywania wyników analizy i relacji. Jeśli aplikacja ma już ustalony magazyn dokumentów, który jest inny, należy użyć funkcji analizy pisma oddyskowego przeznaczonego do obsługi danych serwera proxy między różnymi modelami dokumentów.
Typy serwera proxy danych
Funkcje serwera proxy danych umożliwiają aplikacji:
- Integrowanie danych wyników analizy z istniejącym modelem dokumentów.
- Przekaż poprzednie wyniki (lub stan) z powrotem do InkAnalyzer.
- Przekaż stan braku pisma odręcznego do InkAnalyzer.
- Przekazywanie tylko minimalnego zestawu danych (zarówno stanu poprzedniego, jak i ink) potrzebnego do ukończenia operacji analizy.
- Łatwe aktualizowanie wewnętrznego modelu dokumentu aplikacji przy użyciu wyników analizy.
Istnieją dwa podstawowe podejścia do serwera proxy danych analizy pisma odkowego. Różnice określają, kiedy i jak odbywa się synchronizacja między modelami dokumentów. Pierwsze podejście, aktualizacja synchroniczna, wymaga modyfikacji modelu dokumentu analizy pisma odręcznego w miarę wprowadzania zmian w dokumencie aplikacji. Drugie podejście, aktualizacja na żądanie, wymaga tylko danych, na które mają wpływ zmiany modelu dokumentów aplikacji, które mają zostać przekazane do InkAnalyzer. Oznacza to, że tylko dane dla części modelu dokumentu Analiza pisma odręcznego, które znajdują się w tym samym obszarze co modyfikacje dokumentu aplikacji, muszą zostać przekazane do InkAnalyzer, ponieważ ich potrzebuje.
Aktualizacja synchroniczna
Podejście do aktualizacji synchronicznej wymaga modyfikacji (tworzenia i usuwania) węzłów w InkAnalyzer kolekcji obiektów ContextNode podczas ich występowania w dokumencie aplikacji. Na przykład za każdym razem, gdy wyraz tekstowy jest dodawany do aplikacji, odpowiedni TextWord stylizowany ContextNode jest tworzony w InkAnalyzer. Jeśli lokalizacja wyrazu tekstowego na stronie ulegnie zmianie, lokalizacja odpowiadającego ContextNode zostanie zaktualizowana w tym samym czasie. Ta metoda jest mniej wydajna pod względem zasobów obliczeniowych niż metoda na żądanie, ponieważ każda zmiana dokumentu obejmuje aktualizację InkAnalyzer, nawet jeśli zmiana nie ma wpływu na analizowany atrament.
W poniższym przykładzie pokazano, jak działa aktualizacja synchroniczna. Wyobraź sobie aplikację, która ma istniejący model dokumentów. Gdy użytkownik końcowy wprowadza zmianę w dokumencie, na przykład dodając nowy tekst, zmiana jest przetwarzana w następujący sposób:
- Użytkownik końcowy tworzy nowe dane.
- Aplikacja określa, jak przetwarzać dane, przechowywać je i renderować.
- W praktycznych celach należy wykonać następujące czynności jednocześnie.
- Aplikacja umieszcza dane w modelu dokumentów.
- Aplikacja tworzy InkAnalyzer i aktualizuje ją. Wykonanie tej czynności zapewnia jednocześnie, że InkAnalyzer zawsze zawiera najnowsze informacje.
- Aplikacja wywołuje BackgroundAnalyze w InkAnalyzer, aby rozpocząć analizę.
- Zostanie wyzwolona seria zdarzeń, jeśli zmiana obejmuje atrament, a InkAnalyzer określa nowe wyniki. Jedno zdarzenie jest wyzwalane dla każdej zmiany wprowadzonej w kolekcji obiektówContextNodew InkAnalyzer. Te zdarzenia obejmują ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeletingi ContextNodeReparenting. Aplikacja obsługuje te zdarzenia do serwera proxy wyników operacji analizy z powrotem do modelu dokumentu zgodnie z potrzebami.
- Aplikacja aktualizuje układ dokumentu, ściągając nowe dane z modelu dokumentu.
- Nowe dane są renderowane z powrotem do użytkownika końcowego.
Aktualizacja na żądanie
Podejście na żądanie wymaga przekazania danych tylko dla tych obiektów ContextNode, które znajdują się w obszarach, które są analizowane. Wymagane obiekty ContextNode są wyodrębniane z modelu dokumentów aplikacji tuż po wywołaniu operacji analizy i ponownie tuż przed uzgodnieniem wyników. Chociaż bardziej skomplikowane do zaimplementowania niż aktualizacje synchroniczne, takie podejście daje lepsze wyniki wydajności.
Tematy pokrewne
-
klasyInkAnalyzer (C++)