Proxy dati con analisi input penna

Come indicato in Panoramica analisi input penna, la tecnologia di analisi penna gestisce internamente un modello di documento basato su albero per contenere risultati e relazioni di analisi. Se l'applicazione ha già un archivio documenti stabilito diverso, sarà necessario usare le funzionalità di analisi dell'input penna progettate per proxyre i dati tra modelli di documento diversi.

Tipi di proxy dati

Le funzionalità del proxy dati consentono all'applicazione di:

  • Integrare i dati dei risultati dell'analisi in un modello di documento esistente.
  • Comunicare i risultati precedenti (o lo stato) in InkAnalyzer.
  • Comunicare lo stato non penna in InkAnalyzer.
  • Comunicare solo il set minimo di dati (sia precedente che non ink) necessario per completare l'operazione di analisi.
  • Aggiornare facilmente il modello di documento interno dell'applicazione con i risultati dell'analisi.

Esistono due approcci di base per il proxy dati di analisi input penna. Le differenze si trovano nei dettagli di quando e come si verifica la sincronizzazione tra i modelli di documento. Il primo approccio, l'aggiornamento sincrono, richiede la modifica del modello di documento di analisi dell'input penna quando si verificano modifiche nel documento dell'applicazione. Il secondo approccio, aggiornamento su richiesta, richiede solo i dati interessati dalle modifiche apportate al modello di documento dell'applicazione da passare a InkAnalyzer. Vale a dire, solo i dati per le parti del modello di documento Analisi input penna che si trovano nella stessa area delle modifiche al documento dell'applicazione devono essere passati a InkAnalyzer in base alle esigenze.

Aggiornamento sincrono

L'approccio di aggiornamento sincrono richiede la modifica (creazione ed eliminazione) dei nodi nell'insieme dell'oggetto InkAnalyzer degli oggetti ContextNode mentre si verificano nel documento dell'applicazione. Ad esempio, ogni volta che viene aggiunta una parola di testo all'applicazione, viene creato un oggetto ContextNode con stile TextWord corrispondente in InkAnalyzer. Se la posizione della parola di testo nella pagina viene modificata, la posizione del contesto corrispondente viene aggiornata contemporaneamente. Questo metodo è meno efficiente in termini di risorse di calcolo rispetto al metodo on demand perché ogni modifica del documento comporta un aggiornamento all'InkAnalyzer, anche se la modifica non influisce sull'input penna analizzato.

L'esempio seguente è destinato a illustrare il funzionamento dell'aggiornamento sincrono. Si supponga che un'applicazione con un modello di documento esistente. Quando l'utente finale apporta una modifica al documento, ad esempio l'aggiunta di nuovo testo, la modifica viene elaborata come segue:

  1. L'utente finale crea i nuovi dati.
  2. L'applicazione determina come elaborare i dati, archiviarli e eseguirne il rendering.
  3. A scopo pratico, i passaggi seguenti si svolgono simultaneamente.
    1. L'applicazione inserisce i dati nel modello di documento.
    2. L'applicazione crea un oggetto InkAnalyzer e lo aggiorna. Questa operazione garantisce contemporaneamente che InkAnalyzer abbia sempre le informazioni più recenti.
    3. L'applicazione chiama BackgroundAnalyze in InkAnalyzer per iniziare l'analisi.
  4. Una serie di eventi viene attivata se la modifica comporta l'input penna e InkAnalyzer determina nuovi risultati. Viene generato un evento per ogni modifica apportata all'insieme di oggetti ContextNode in InkAnalyzer. Questi eventi includono ContextNodeCreated, ContextNodeDeleting, ContextNodeMovingToPosition, ContextNodePropertiesUpdated, ContextNodeLinkAdding, ContextNodeLinkDeleting e ContextNodeReparenting. L'applicazione gestisce questi eventi per proxyre i risultati dell'operazione di analisi nel modello di documento in base alle esigenze.
  5. L'applicazione aggiorna il layout del documento, trascinando i nuovi dati dal modello di documento.
  6. I nuovi dati vengono restituiti all'utente finale.

Aggiornamento su richiesta

L'approccio su richiesta richiede solo il passaggio dei dati per gli oggetti ContextNode che si trovano nelle aree analizzate. Gli oggetti ContextNode necessari vengono estratti dal modello di documento dell'applicazione subito dopo che l'operazione di analisi viene richiamata e nuovamente prima di riconciliare i risultati. Sebbene più complicata da implementare rispetto agli aggiornamenti sincroni, questo approccio restituisce risultati migliori sulle prestazioni.

Panoramica dell'analisi dell'input penna

Classe InkAnalyzer (C++)

Microsoft.Ink.InkAnalyzer

Microsoft.Ink.ContextNode