Pular para o conteúdo
Pivotick
Main Navigation Início
Primeiros passos
Configuração
Referência da API
GaleriaProjetosExperimente!

Português

English
简体中文
Français
Deutsch

Português

English
简体中文
Français
Deutsch

Aparência

Sidebar Navigation

Primeiros passos

Projetos que usam o Pivotick

Configuração

Funções de retorno

Camadas de arestas

Simplificar

Layout

Renderização

Simulação

Personalizar a interface

Barra lateral

Dica

Menu de contexto

Filtros

Legenda

Tabela de dados

Estilo da interface

Traduzir a interface

Plugins

API Pivotick

Pivôs e enriquecimento

Salvar resultados dos pivôs

Desfazer e histórico

Segurança

Documentação da API

Galeria

Fundamentos

Estilo dos nós

Estilo das arestas

Layouts

Eventos e funções de retorno

Personalização da interface

Edição e criação

Notas e anotações

Filtros, pesquisa e hierarquia

Controle por programação

Temas e desempenho

Pivôs e enriquecimento

Demonstrações completas

As etiquetas chegam conforme você aumenta o zoom ​

Um rótulo percorre o gráfico, portanto, quanto mais longe estiver a visualização, menor ela será pintada. Passado um ponto, não é mais texto, apenas uma textura cinza sobre o gráfico. render.minLabelFontSize é o tamanho, em pixels renderizados, abaixo do qual não é desenhado.

O gráfico abaixo abre sem nenhum de seus rótulos. Role para dentro e os nomes dos sites aparecem primeiro, depois os nomes dos hosts e os rótulos das bordas.

Coisas que vale a pena provocar:

  • Role lentamente. Os nomes dos sites chegam antes dos nomes dos hosts. O rótulo de um nó é derivado de seu tamanho, portanto, um site desenhado em 40 tem um rótulo de 18 unidades e um host desenhado em 10 tem o mínimo de 12. Um número para toda a tela, e a diferença que você deseja depende dos tamanhos já existentes.
  • Estacione o zoom no ponto em que um rótulo aparece e mova-o. Um rótulo que está sendo exibido é mantido até que seu tamanho renderizado caia para 85% do limite, para que a imagem se estabilize em vez de piscar. Cada etiqueta de tamanho único responde junto.
  • Selecione uma borda e role para trás. Ele mantém seu rótulo enquanto todos os outros vão, mantidos em um tamanho constante na tela, em vez de diminuir com o gráfico. Uma aresta não tem dica de ferramenta nem painel, então seu rótulo é a única coisa que responde por ela.
  • Role para um site e depois desloque para outro. Um rótulo é escolhido novamente para o que está na tela, então um site que você passou pelo zoom recebe seu nome quando você volta para ele, em vez de enquanto ele está fora de vista.

Desligando

minLabelFontSize: 0 desenha todos os rótulos em cada zoom, que é o que a biblioteca fazia antes de a opção existir.

js
const options = {
    render: {
        // The default. Below 9 rendered pixels a label is not drawn — and a node's label is
        // derived from its size, so the sites keep theirs to a lower zoom than the hosts.
        minLabelFontSize: 9,
        defaultNodeStyle: { shape: 'circle', textColor: '#ffffff' },
        defaultEdgeStyle: { strokeColor: '#cbd5e1', strokeWidth: 2 },
    },
    // Every node is pinned, so the layout is the one written above.
    simulation: { enabled: false },
}
js
/**
 * Seven sites — one in the middle, six around it — each with four hosts. Pinned wide enough
 * that the graph opens well under zoom 1, which is the point of the card, and dense enough in
 * the middle that scrolling in anywhere lands on something with a name.
 *
 * A site is drawn at size 40 and a host at 10, so their labels are 18 and 12 graph units: a
 * node's label is derived from its size, with a floor at 12.
 */
const SITES = [
    { id: 'core', name: 'Frankfurt', x: 0, y: 0, tone: '#2563eb' },
    { id: 'us', name: 'Ashburn', x: 1000, y: -560, tone: '#0891b2' },
    { id: 'sa', name: 'São Paulo', x: 1000, y: 560, tone: '#d97706' },
    { id: 'ap', name: 'Singapore', x: -1000, y: 560, tone: '#7c3aed' },
    { id: 'uk', name: 'London', x: -1000, y: -560, tone: '#059669' },
    { id: 'no', name: 'Oslo', x: 0, y: -900, tone: '#db2777' },
    { id: 'za', name: 'Cape Town', x: 0, y: 900, tone: '#65a30d' },
]

const HOSTS = [
    { name: 'edge', relation: 'routes to' },
    { name: 'cache', relation: 'caches for' },
    { name: 'api', relation: 'serves' },
    { name: 'db', relation: 'reads from' },
]

const nodes = []
const edges = []

for (const site of SITES) {
    nodes.push({
        id: site.id,
        fx: site.x,
        fy: site.y,
        style: { size: 40, color: site.tone, text: site.name, textVerticalShift: 1 },
    })
    HOSTS.forEach((host, index) => {
        const angle = (index / HOSTS.length) * Math.PI * 2 + Math.PI / 4
        const id = `${site.id}-${host.name}`
        nodes.push({
            id,
            fx: site.x + Math.cos(angle) * 250,
            fy: site.y + Math.sin(angle) * 230,
            style: { size: 10, color: '#94a3b8', text: `${host.name}.${site.id}`, textVerticalShift: 1 },
        })
        edges.push({ from: site.id, to: id, data: { label: host.relation } })
    })
}

// Every outer site peers with the middle one, so this is one network rather than seven.
for (const site of SITES.slice(1)) {
    edges.push({ from: 'core', to: site.id, data: { label: 'peers with' } })
}

const data = { nodes, edges }

Consulte Renderização → Etiquetas em tamanho legível para o contrato e Detalhe que segue o zoom para a metade do nó da mesma ideia.

Pager
Próxima páginaPrimeiros passos