Proxy de Dados com Análise de Tinta

Conforme mencionado na Visão geral da Análise de Tinta, a tecnologia de análise de tinta mantém internamente um modelo de documento baseado em árvore para conter resultados e relações de análise. Se o aplicativo já tiver um repositório de documentos estabelecido que seja diferente, você precisará usar os recursos de análise de tinta projetados para proxy de dados entre modelos de documento diferentes.

Tipos de proxy de dados

Os recursos de proxy de dados permitem que seu aplicativo:

  • Integre os dados de resultados da análise de volta a um modelo de documento existente.
  • Comunique os resultados anteriores (ou estado) de volta ao InkAnalyzer.
  • Comunique o estado não à tinta no InkAnalyzer.
  • Comunique apenas o conjunto mínimo de dados (estado anterior e não à tinta) necessário para concluir a operação de análise.
  • Atualize facilmente o modelo de documento do aplicativo interno com os resultados da análise.

Há duas abordagens básicas para o proxy de dados de análise de tinta. As diferenças estão nos detalhes de quando e como ocorre a sincronização entre os modelos de documento. A primeira abordagem, atualização síncrona, requer a modificação do modelo de documento de análise de tinta à medida que ocorrem alterações no documento do aplicativo. A segunda abordagem, a atualização sob demanda, requer que apenas os dados afetados pelas alterações no modelo de documento do aplicativo sejam passados para o InkAnalyzer. Ou seja, somente os dados das partes do modelo de documento de Análise de Tinta que estão na mesma área que as modificações no documento do aplicativo precisam ser passados para o InkAnalyzer , pois eles precisam.

Atualização síncrona

A abordagem de atualização síncrona requer a modificação (criação e exclusão) de nós na coleção de objetos ContextNode do objeto InkAnalyzer conforme eles ocorrem no documento do aplicativo. Por exemplo, sempre que uma palavra de texto é adicionada ao aplicativo, um ContextNode com estilo TextWord correspondente é criado no InkAnalyzer. Se o local da palavra de texto na página for alterado, o local do ContextNode correspondente será atualizado ao mesmo tempo. Esse método é menos eficiente em termos de recursos de computação do que o método sob demanda porque cada alteração de documento envolve uma atualização para o InkAnalyzer, mesmo que a alteração não afete a tinta que está sendo analisada.

O exemplo a seguir destina-se a mostrar como funciona a atualização síncrona. Imagine um aplicativo que tenha um modelo de documento existente. Quando o usuário final faz uma alteração no documento, como adicionar um novo texto, a alteração é processada da seguinte maneira:

  1. O usuário final cria os novos dados.
  2. O aplicativo determina como processar os dados, armazená-los e renderizá-los.
  3. Para fins práticos, as etapas a seguir ocorrem simultaneamente.
    1. O aplicativo coloca os dados em seu modelo de documento.
    2. O aplicativo cria um InkAnalyzer e o atualiza. Fazer isso simultaneamente garante que o InkAnalyzer sempre tenha as informações mais recentes.
    3. O aplicativo chama BackgroundAnalyze no InkAnalyzer para iniciar a análise.
  4. Uma série de eventos será disparada se a alteração envolver tinta e o InkAnalyzer determinar novos resultados. Um evento é acionado para cada alteração feita na coleção de objetos ContextNode no InkAnalyzer. Esses eventos incluem ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeleting e ContextNodeReparenting. O aplicativo manipula esses eventos para fazer proxy dos resultados da operação de análise de volta para o modelo de documento conforme apropriado.
  5. O aplicativo atualiza o layout do documento, extraindo os novos dados do modelo de documento.
  6. Os novos dados são renderizados de volta para o usuário final.

Atualização sob demanda

A abordagem sob demanda requer apenas que os dados sejam passados para os objetos ContextNode que estão nas áreas que estão sendo analisadas. Os objetos ContextNode necessários são extraídos do modelo de documento do aplicativo logo após a invocação da operação de análise e novamente pouco antes de reconciliar os resultados. Embora seja mais complicado implementar do que as atualizações síncronas, essa abordagem gera melhores resultados de desempenho.

Visão geral da análise de tinta

Classe InkAnalyzer (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode