Flow de l’événement de proxy de données
Cette rubrique présente les détails de l’événement lors de l’utilisation des fonctionnalités du proxy d’analyse des données d’encre.
vue d’ensemble des Flow d’événements de Proxy de données
Dans l’utilisation du proxy de données de InkAnalyzer, il est supposé que l’application intégrant le InkAnalyzer possède déjà un modèle de document existant auquel il souhaite effectuer un proxy des résultats de l’analyse. Il est également supposé que l’application aura des résultats de toutes les opérations d’analyse précédentes qu’elle souhaiterait créer sur stockées dans son modèle de document. Il peut également y avoir des contextes non manuscrits qui peuvent être ajoutés au InkAnalyzer sous la forme d’un ContextNode ImageNode ou TextWordNode pour être éventuellement annotés avec de l’encre.
La clé du système de proxy de données est que l’application marque le ContextNode comme étant « partiellement rempli » à l’aide de PartiallyPopulated. Lorsque cet indicateur a la valeur true, InkAnalyzer suppose que trois choses sur ce ContextNode:
- L’emplacement du ContextNode est correct.
- Le type de ContextNode est correct.
- Toutes les autres informations sur ce ContextNode sont stockées ailleurs.
Sur la base de ces trois règles, si et quand le InkAnalyzer a besoin d’informations supplémentaires sur un ContextNode , il déclenchera l’événement PopulateContextNode et référencera le ContextNode en question. Cela donne à l’application la possibilité de définir toutes les informations connues sur ce ContextNode avant que le InkAnalyzer ne les examine plus en détail. Après la gestion d’un événement PopulateContextNode , le ContextNode en question doit avoir une propriété Location valide, le nombre correct de sous-nœuds définis s’il s’agit d’un conteneur ContextNode ou avoir les traits corrects définis à l’aide de SetStrokes, s’il s’agit d’une feuille d’entrée manuscrite ContextNode. Si vous ne définissez pas correctement cet emplacement et les informations sur le sous-nœud ou le trait, une exception InvalidOperation se produira. Les sous-nœuds d’un conteneur ContextNode peuvent eux-mêmes être définis comme partiellement remplis, auquel cas davantage d’événements PopulateContextNode sont déclenchés si le InkAnalyzer détermine qu’ils seront nécessaires pour l’opération d’analyse en cours.
Les tableaux ci-dessous décrivent le moment où l’événement PopulateContextNode est déclenché tout au long de l’utilisation de InkAnalyzer.
Une fois que le InkAnalyzer a calculé des résultats, il revient à l’application pour mettre à jour les résultats. Le premier événement déclenché est l’événement InkAnalyzerStateChanging . Cet événement signifie simplement que l’application que l’état de l’arborescence de l’objet InkAnalyzer va changer. Cela offre aux applications la possibilité de définir l’indicateur PartiallyPopulated sur true sur tout ContextNodes dont l’État est stocké ailleurs. InkAnalyzer déclenchera ensuite une série d’événements PopulateContextNode pour déterminre l’état actuel des données. Une fois determiend, une opération de réconciliation est commise pour déterminer les résultats de l’arrière-plan qui peuvent toujours être appliqués.
Pour appliquer des résultats à InkAnalyzer , une série d’événements de modification d’arborescence sont déclenchés. Les événements de modification d’arborescence décrivent, pas à pas, toutes les modifications nécessaires pour mettre à jour les résultats. Ces événements sont destinés à être gérés dans sucession sans interuption ou à annuler. Si l’opération d’analyse est annulée (par le biais de la méthode Abort ) pendant le traitement des événements de modification de l’arborescence, l’état du InkAnalyzer n’est pas valide et le document entier peut nécessiter une réanalyse.
Les tableaux ci-dessous décrivent le moment où les événements de modification d’arborescence sont déclenchés tout au long de l’utilisation de InkAnalyzer. Les tables font référence aux horodateurs présentés ci-après.

Ajout d’un trait
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T1, T5 et T9 |
[À l’intérieur de l’appel à l' ] [ événement d’exploration d’arborescence AddStroke ()] |
Événement PopulateContextNode déclenché |
Il peut y avoir n événements PopulateContextNode déclenchés en fonction du nombre d’événements ContextNodes non classifiés avec une valeur PartiallyPopulated définie sur true. |
| T1, T5 et T9 |
[Événement de modification d’arborescence] |
Événement ContextNodeCreated déclenché |
Un seul événement ContextNodeCreated est déclenché suite à l’appel de la méthode AddStroke . Tous les traits sont ajoutés au même ContextNodenon classifié. |
Suppression d’un trait
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T2, T6 et T10 |
[À l’intérieur de l’appel à l' ] [ événement d’exploration d’arborescence RemoveStroke ()] |
PopulateContextNode Événement déclenché |
Il peut y avoir un certain nombre d’événements PopulateContextNode déclenchés en fonction du nombre de ContextNodes liés aux traits en cours de suppression, avec la valeur PartiallyPopulated true. |
| T2, T6 et T10 |
[Événement de modification d’arborescence] |
ContextNodeDeleting Événement déclenché |
Il peut y avoir un nombre quelconque d’événements ContextNodeDeleting déclenchés, en fonction du contenu de l’encre en cours de suppression et de la structure d’analyse actuelle. |
Appel de la méthode BackgroundAnalyze
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T3 |
[À l’intérieur de l’appel à l' ] [ événement d’exploration d’arborescence BackgroundAnalyze ()] |
PopulateContextNode Événement déclenché |
Il peut y avoir n événements PopulateContextNode déclenchés, selon le nombre de ContextNodes dans l’arborescence ayant la valeur PartiallyPopulated true (un événement par ContextNode nécessaire dans l’opération d’analyse actuelle). |
Après le retour de l’appel à BackgroundAnalyze ()
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T3 à T7 |
[Événements déclenchés par le thread BG] |
Événement d’activité déclenché |
Plusieurs événements d’activité sont déclenchés pendant la période d’analyse en arrière-plan. |
Quand les IntermediateResults sont prêts
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T7 à T8 |
[Événements déclenchés par le thread BG, signifiant le début de la première opération de rapprochement] |
InkAnalyzerStateChanging Événement déclenché |
Un seul événement InkAnalyzerStateChanging déclenché. Cet événement est déclenché avant l’inspection de l’état du InkAnalyzer, ce qui donne à l’application la possibilité de définir la valeur PartiallyPopulated sur tous les nœuds ou d’effectuer tout verrouillage de document local nécessaire. |
| T7 à T8 |
[Événement d’exploration d’arborescence] |
PopulateContextNode Événement déclenché |
Il peut y avoir n événements PopulateContextNode déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeCreated Événement déclenché |
Il peut y avoir n événements ContextNodeCreated déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeDeleting Événement déclenché |
Il peut y avoir n événements ContextNodeDeleting déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeMovingToPosition |
Il peut y avoir n événements ContextNodeMovingToPosition déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeReparenting |
Il peut y avoir n événements ContextNodeReparenting déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
StrokeReparented |
Il peut y avoir n événements StrokeReparented déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeLinkAdding |
Il peut y avoir n événements ContextNodeLinkAdding déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodeLinkDeleting |
Il peut y avoir n événements ContextNodeLinkDeleting déclenchés, en fonction du contenu de l’encre. |
| T7 à T8 |
[Événement de modification d’arborescence] |
ContextNodePropertiesUpdated Événement déclenché |
Il peut y avoir n événements ContextNodePropertiesUpdated déclenchés, en fonction du contenu de l’encre. Les ContextNodePropertiesUpdated sont planifiés de générées une fois que tous les autres événements de modification ContextNode ont été déclenchés pendant cette période de rapprochement . |
| T7 à T8 |
[L’événement désigne la fin de la première opération de rapprochement] |
IntermediateResults Événement déclenché |
Un seul événement IntermediateResults est déclenché par opération d’analyse. |
Après la gestion de IntermediateResults
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T8 à T11 |
[Événements déclenchés par le thread BG] |
Activité Événement déclenché |
Plusieurs événements d' activité sont déclenchés pendant la période d’analyse en arrière-plan. |
Quand les résultats finaux sont prêts
| Horodatage | Type d’événement ou objectif | Événement déclenché | Commentaire |
|---|---|---|---|
| T11 à T12 |
[Événements déclenchés par le thread BG, signifiant le début de la deuxième opération de rapprochement] |
InkAnalyzerStateChanging Événement déclenché |
Un seul événement InkAnalyzerStateChanging déclenché. Cet événement est déclenché avant l’inspection de l’état du InkAnalyzer, ce qui donne à l’application la possibilité de définir la valeur PartiallyPopulated sur tous les nœuds ou d’effectuer tout verrouillage de document local nécessaire. |
| T11 à T12 |
[Événement d’exploration d’arborescence] |
PopulateContextNode Événement déclenché |
Il peut y avoir un nombre quelconque d’événements PopulateContextNode déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeCreated Événement déclenché |
Il peut y avoir un nombre quelconque d’événements ContextNodeCreated déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeDeleting Événement déclenché |
Il peut y avoir un nombre quelconque d’événements ContextNodeDeleting déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeMovingToPosition |
Il peut y avoir un nombre quelconque d’événements ContextNodeMovingToPosition déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeReparenting |
Il peut y avoir un nombre quelconque d’événements ContextNodeReparenting déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
StrokeReparented |
Il peut y avoir un nombre quelconque d’événements StrokeReparented déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeLinkAdding |
Il peut y avoir un nombre quelconque d’événements ContextNodeLinkAdding déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodeLinkDeleting |
Il peut y avoir un nombre quelconque d’événements ContextNodeLinkDeleting déclenchés, en fonction du contenu de l’encre. |
| T11 à T12 |
[Événement de modification d’arborescence] |
ContextNodePropertiesUpdated Événement déclenché |
Il peut y avoir un nombre quelconque d’événements ContextNodePropertiesUpdated déclenchés, en fonction du contenu de l’encre. Les ContextNodePropertiesUpdated sont planifiés de générées une fois que tous les autres événements de modification ContextNode ont été déclenchés pendant cette période de rapprochement . |
| T11 à T12 |
[L’événement désigne la fin de la deuxième opération de rapprochement] |
Résultats Événement déclenché |
Un seul événement results est déclenché par opération d’analyse. |