Dados de tinta

Depois que a tinta é coletada, os aplicativos podem gerenciar, manipular e/ou transferir esses dados para outras mídias. As ações de seleção, cópia, movimentação, salvamento, exibição e alteração da tinta ocorrem no objeto Ink e seus membros contidos, como a coleção Strokes e objetos Stroke .

Observação

Usando Real-Time Stylus, os aplicativos podem optar por manter dados em seu próprio formato (como salvar traços).

 

Tinta, Traços e Pacotes

Um objeto Ink é o tipo de dados fundamental que gerencia, manipula e armazena a entrada coletada do objeto InkCollector . Um objeto Ink contém um ou mais objetos Stroke e métodos e propriedades comuns para gerenciar e manipular esses traços. Um traço é definido como o conjunto de dados capturados em uma única sequência de pen down, pen-move e pen-up. Os dados de traço contêm uma coleção de pacotes. Um pacote é o conjunto de dados que o dispositivo tablet envia em cada ponto de exemplo. Esses dados contêm informações como coordenadas, pressão da caneta, ângulo da caneta e qualquer outra coisa que o hardware possa transmitir. A propriedade PacketDescription do objeto Stroke descreve os pacotes gerados por um Tablet .

Traços

Você pode obter uma instantâneo dos traços em um objeto Ink usando a propriedade Strokes do objeto Ink. A propriedade Strokes é uma coleção de referências aos traços no objeto Ink no momento em que a propriedade Strokes é lida. Se os traços forem adicionados ou excluídos do objeto Ink , uma coleção Strokes obtida anteriormente não será atualizada. Além disso, a propriedade Strokes é um valor e, como qualquer valor, sai do escopo, a menos que seja atribuída a uma variável.

Para manter uma propriedade Strokes sincronizada com um objeto Ink , encapsule-a em um manipulador de eventos para os eventos StrokesAdded e StrokesRemoved na coleção Strokes . O manipulador deve obter uma nova cópia da propriedade Strokes quando qualquer um dos eventos for acionado. Tenha cuidado para não adicionar o manipulador de eventos a uma coleção Strokes que está fora do escopo antes que o evento seja acionado.

Observe neste exemplo que theAddedStrokesIDs é atualizado com uma nova cópia da propriedade strokes no StrokesAdded_Event manipulador.

public void StrokesAdded_Event(object sender, StrokesEventArgs e)
{
    int [] theAddedStrokesIDs = e.StrokeIds;
    theListBox.Items.Clear();
    foreach (int i in theAddedStrokesIDs)
    {
        theListBox.Items.Add("Added Stroke ID: " + i.ToString());
    }
}

Propriedade PacketDescription

A propriedade PacketDescription do objeto Ink define o conjunto de informações em cada pacote que o aplicativo obtém de um dispositivo Tablet PC. As informações normalmente incluem coordenadas, mas podem incluir informações muito mais detalhadas (dependendo das funcionalidades do digitalizador de Tablet PC), como pressão de caneta ou ângulo de caneta. Definindo descrições de pacotes no objeto InkCollector ou InkOverlay antes de qualquer tinta ser coletada (usando a propriedade DesiredPacketDescription), você tem controle total sobre qual das propriedades de dispositivos tablet pc você deseja receber.

Propriedades estendidas

As propriedades estendidas fornecem um mecanismo para anexar dados definidos pelo aplicativo ao Ink e a outros objetos. Para obter mais informações sobre propriedades estendidas, consulte a coleção ExtendedProperties .

Renderização de tinta

O objeto Renderizador é responsável por renderizar o Ink. Dado um contexto de tablet apropriado, o objeto Renderer pode mapear coordenadas de espaço à tinta para pixels, aplicar transformações de exibição e exibir tinta em telas e impressoras. Os métodos Draw e DrawStroke são os principais métodos para renderizar tinta. Para obter mais informações sobre como exibir tinta em uma janela, consulte o objeto Renderer .

Cúspides

Um traço normalmente começa quando a caneta é baixada para a superfície de desenho e termina quando a caneta é levantada. Dentro de um traço, os picos, ângulos e mudanças radicais de direção são chamados de cuspes. Os pontos de extremidade de um traço também são considerados cuspes. Por exemplo, a letra maiúscula "L" tem três cuspes, um no meio e outro em cada extremidade.

À medida que um traço é inserido, ele normalmente é suavizado e renderizado usando uma curva de Bézier (ou polilinha). Curvas de bézier podem transformar bordas em loops pequenos. Por exemplo, o pico da letra cursiva "i" pode ser suavizado para se parecer com o cursivo "e". Para evitar isso, os renderizadores da Microsoft têm uma fase "pré-Bezier" que lida com os limites de maneira diferente.

Os cusps também podem ser usados para subdividir objetos Stroke em unidades apagáveis. Por exemplo, selecionar o lado vertical de um "L" maiúsculo pode indicar apagar apenas esse lado. A parte do traço a ser apagado seria a parte entre dois cuspes.