@thibezer/ui-components-kit 2.8.1 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +65 -0
- package/README.md +3 -3
- package/dist/canvas.cjs +70 -70
- package/dist/canvas.js +3125 -2473
- package/dist/components/ui-barra-ferramentas/ferramentas-comum.d.ts +24 -1
- package/dist/components/ui-barra-ferramentas/paleta-atalhos.d.ts +10 -3
- package/dist/components/ui-barra-ferramentas/ribbon-render.d.ts +10 -2
- package/dist/components/ui-barra-ferramentas/ribbon-teclado.d.ts +10 -3
- package/dist/components/ui-barra-ferramentas/tipos.d.ts +31 -0
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +12 -0
- package/dist/components/ui-barra-ferramentas/ui-ribbon.d.ts +16 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +15 -0
- package/dist/core.cjs +1 -1
- package/dist/core.js +1 -1
- package/dist/custom-elements.json +8934 -8415
- package/dist/data.cjs +1 -1
- package/dist/data.js +1 -1
- package/dist/gerencigeo-canvas/curva_leaflet.d.ts +2 -2
- package/dist/gerencigeo-canvas/feature_curvas.d.ts +3 -1
- package/dist/gerencigeo-canvas/feature_lod.d.ts +38 -0
- package/dist/gerencigeo-canvas/feature_metricas.d.ts +9 -0
- package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +16 -8
- package/dist/gerencigeo-canvas/index.d.ts +7 -0
- package/dist/gerencigeo-canvas/layer_hit_test.d.ts +22 -0
- package/dist/gerencigeo-canvas/layer_manager.d.ts +5 -0
- package/dist/gerencigeo-canvas/motor/dados-camada.d.ts +39 -0
- package/dist/gerencigeo-canvas/motor/estilo.d.ts +28 -0
- package/dist/gerencigeo-canvas/motor/geometria-px.d.ts +27 -0
- package/dist/gerencigeo-canvas/motor/index.d.ts +5 -0
- package/dist/gerencigeo-canvas/motor/motor-formas.d.ts +107 -0
- package/dist/gerencigeo-canvas/motor/tipos.d.ts +100 -0
- package/dist/gerencigeo-canvas/renderers/canvas_formas_leaflet.d.ts +87 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_canvas_renderer.d.ts +58 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_despachante.d.ts +31 -0
- package/dist/gerencigeo-canvas/renderers/feicoes_renderer.d.ts +48 -9
- package/dist/gerencigeo-canvas/renderers/marcadores_feicoes.d.ts +11 -0
- package/dist/gerencigeo-canvas/renderers/marcas_lod_layer.d.ts +19 -0
- package/dist/gerencigeo-canvas/renderers/renderizador_feicoes_tipos.d.ts +44 -0
- package/dist/gerencigeo-canvas/renderers/renderizador_formas.d.ts +95 -0
- package/dist/gerencigeo-canvas/renderers/selecao_visual.d.ts +6 -0
- package/dist/gerencigeo-canvas/types.d.ts +2 -0
- package/dist/index.cjs +1 -1
- package/dist/index.js +3 -3
- package/dist/motor-BB6tB6U-.cjs +1 -0
- package/dist/motor-CFI84lM2.js +1301 -0
- package/dist/motor.cjs +1 -0
- package/dist/motor.d.ts +7 -0
- package/dist/motor.js +52 -0
- package/dist/register.cjs +1 -1
- package/dist/register.js +3 -3
- package/dist/svg-seguro-ChVJ2L2z.js +74 -0
- package/dist/svg-seguro-J2RM1Ssf.cjs +1 -0
- package/dist/tabela.cjs +1 -1
- package/dist/tabela.js +1 -1
- package/dist/tipos-elementos.d.ts +13 -0
- package/dist/tipos-vue.d.ts +8 -0
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/{ui-linha-C6HBnsaw.cjs → ui-linha-BYAX4W6x.cjs} +5 -5
- package/dist/{ui-linha-nCDh2wPm.js → ui-linha-aqLlaYi7.js} +57 -51
- package/dist/ui-paleta-ferramentas-BXXrI1Y7.js +1233 -0
- package/dist/ui-paleta-ferramentas-CsPMTY0G.cjs +21 -0
- package/dist/{ui-tabela-propriedades-DzZlyNZ_.cjs → ui-tabela-propriedades-CjK2gG14.cjs} +1 -1
- package/dist/{ui-tabela-propriedades-D9Echt2X.js → ui-tabela-propriedades-DoL4SE0r.js} +1 -1
- package/package.json +6 -1
- package/dist/svg-seguro-BsbNQqpd.js +0 -50
- package/dist/svg-seguro-C76iLlAZ.cjs +0 -1
- package/dist/ui-paleta-ferramentas-Ksh6gMW3.js +0 -890
- package/dist/ui-paleta-ferramentas-bDLPbiGA.cjs +0 -21
package/dist/data.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const r=require("./ui-tabela-propriedades-
|
|
1
|
+
"use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});;/* empty css */const r=require("./ui-tabela-propriedades-CjK2gG14.cjs"),a=require("./ui-badge-SIR81R9l.cjs");exports.GerenciadorValoresPropriedades=r.GerenciadorValoresPropriedades;exports.TabelaOrquestradorDados=r.TabelaOrquestradorDados;exports.TabelaRemotaController=r.TabelaRemotaController;exports.TabelaSelecaoController=r.TabelaSelecaoController;exports.UITabela=r.UITabela;exports.UITabelaPropriedades=r.UITabelaPropriedades;exports.abrirPopoverRedimensionamento=r.abrirPopoverRedimensionamento;exports.alternarCategoria=r.alternarCategoria;exports.alternarDirecaoOrdenacao=r.alternarDirecaoOrdenacao;exports.alternarPosicionamentoFlutuante=r.alternarPosicionamentoFlutuante;exports.aplicarOrdenacaoTabela=r.aplicarOrdenacaoTabela;exports.atualizarCampoVisual=r.atualizarCampoVisual;exports.avaliarExpressaoMatematica=r.avaliarExpressaoMatematica;exports.buscarLinhaPropriedade=r.buscarLinhaPropriedade;exports.colapsarTodasCategorias=r.colapsarTodasCategorias;exports.conectarArrastoFlutuante=r.conectarArrastoFlutuante;exports.conectarPainelControles=r.conectarPainelControles;exports.criarControladorSplitter=r.criarControladorSplitter;exports.criarEditorAcao=r.criarEditorAcao;exports.criarEditorBooleano=r.criarEditorBooleano;exports.criarEditorCorCad=r.criarEditorCorCad;exports.criarEditorCorSwatch=r.criarEditorCorSwatch;exports.criarEditorLinetype=r.criarEditorLinetype;exports.criarEditorLineweight=r.criarEditorLineweight;exports.criarEditorNumero=r.criarEditorNumero;exports.criarEditorReadonly=r.criarEditorReadonly;exports.criarEditorSelecao=r.criarEditorSelecao;exports.criarEditorTexto=r.criarEditorTexto;exports.criarEditorValor=r.criarEditorValor;exports.criarLinhaPropriedade=r.criarLinhaPropriedade;exports.executarOrquestracaoCorpo=r.executarOrquestracaoCorpo;exports.executarOrquestracaoHeader=r.executarOrquestracaoHeader;exports.executarRedimensionamentoColuna=r.executarRedimensionamentoColuna;exports.executarRedimensionamentoTeclado=r.executarRedimensionamentoTeclado;exports.exibirPromptPopoverRedimensionamento=r.exibirPromptPopoverRedimensionamento;exports.expandirTodasCategorias=r.expandirTodasCategorias;exports.focarProximoEditor=r.focarProximoEditor;exports.formatWidth=r.formatWidth;exports.getAlignmentClass=r.getAlignmentClass;exports.getRowHeight=r.getRowHeight;exports.getTextAlign=r.getTextAlign;exports.inicializarScrollVirtualizacao=r.inicializarScrollVirtualizacao;exports.iniciarRedimensionamentoColuna=r.iniciarRedimensionamentoColuna;exports.interpretarIndice=r.interpretarIndice;exports.limitarLarguraColuna=r.limitarLarguraColuna;exports.localizarIndiceItem=r.localizarIndiceItem;exports.montarEstruturaDOM=r.montarEstruturaDOM;exports.normalizarTexto=r.normalizarTexto;exports.orquestrarEstruturaInicial=r.orquestrarEstruturaInicial;exports.proximaDensidade=r.proximaDensidade;exports.redimensionarColunaPorDelta=r.redimensionarColunaPorDelta;exports.registrarAtualizadorEditor=r.registrarAtualizadorEditor;exports.renderizarCategoriasETree=r.renderizarCategoriasETree;exports.renderizarCorpoTabela=r.renderizarCorpoTabela;exports.renderizarHeaderTabela=r.renderizarHeaderTabela;exports.renderizarSeletorTipos=r.renderizarSeletorTipos;exports.sincronizarAtributosTabela=r.sincronizarAtributosTabela;exports.sincronizarPainelControles=r.sincronizarPainelControles;exports.sincronizarSelect=r.sincronizarSelect;exports.tratarMudancaAtributoTabela=r.tratarMudancaAtributoTabela;exports.valoresIguais=r.valoresIguais;exports.UIBadge=a.UIBadge;exports.UIChip=a.UIChip;exports.UIKpi=a.UIKpi;exports.UIMetrica=a.UIMetrica;exports.UIStat=a.UIStat;exports.UITag=a.UITag;
|
package/dist/data.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/* empty css */
|
|
2
|
-
import { G as o, T as i, a as s, b as t, U as n, c as l, d, e as c, f as u, g as m, h as p, i as C, j as T, k as E, l as b, m as g, n as x, o as z, p as I, q as P, r as U, s as R, t as S, u as h, v as A, w as O, x as D, y as L, z as f, A as q, B as v, C as M, D as V, E as w, F as H, H as y, I as B, J as F, K as G, L as K, M as N, N as W, O as j, P as k, Q as J, R as Q, S as X, V as Y, W as Z, X as _, Y as $, Z as aa, _ as ra, $ as ea, a0 as oa, a1 as ia, a2 as sa, a3 as ta, a4 as na, a5 as la, a6 as da } from "./ui-tabela-propriedades-
|
|
2
|
+
import { G as o, T as i, a as s, b as t, U as n, c as l, d, e as c, f as u, g as m, h as p, i as C, j as T, k as E, l as b, m as g, n as x, o as z, p as I, q as P, r as U, s as R, t as S, u as h, v as A, w as O, x as D, y as L, z as f, A as q, B as v, C as M, D as V, E as w, F as H, H as y, I as B, J as F, K as G, L as K, M as N, N as W, O as j, P as k, Q as J, R as Q, S as X, V as Y, W as Z, X as _, Y as $, Z as aa, _ as ra, $ as ea, a0 as oa, a1 as ia, a2 as sa, a3 as ta, a4 as na, a5 as la, a6 as da } from "./ui-tabela-propriedades-DoL4SE0r.js";
|
|
3
3
|
import { U as ua, a as ma, b as pa, c as Ca, d as Ta, e as Ea } from "./ui-badge-BWhoGgo9.js";
|
|
4
4
|
export {
|
|
5
5
|
o as GerenciadorValoresPropriedades,
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { default as L } from 'leaflet';
|
|
2
|
+
import { nosDaGeometria } from './feature_curvas';
|
|
2
3
|
import { GeometriaFeicao, NoCurva } from './feature_types';
|
|
3
4
|
/** Linha cujo traçado é a curva `nos`. */
|
|
4
5
|
export declare class LinhaCurva extends L.Polyline {
|
|
@@ -13,8 +14,7 @@ export declare class PoligonoCurvo extends L.Polygon {
|
|
|
13
14
|
definirCurva(nos: NoCurva[] | null): void;
|
|
14
15
|
protected _updatePath(): void;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
export declare function nosDaGeometria(g: GeometriaFeicao): NoCurva[] | null;
|
|
17
|
+
export { nosDaGeometria };
|
|
18
18
|
/** Cria a camada Leaflet de uma linha/polígono com `curva`, ou `null` se a geometria não é curva. */
|
|
19
19
|
export declare function criarCamadaCurva(g: GeometriaFeicao, opcoes: L.PolylineOptions): LinhaCurva | PoligonoCurvo | null;
|
|
20
20
|
/** Atualiza uma camada criada por `criarCamadaCurva` (curva primeiro, depois os vértices, que redesenham). */
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { LatLonPar, NoCurva } from './feature_types';
|
|
1
|
+
import { GeometriaFeicao, LatLonPar, NoCurva } from './feature_types';
|
|
2
2
|
export type { NoCurva };
|
|
3
3
|
/** Subdivisões por segmento ao gerar os vértices de apoio (métricas, snap, seleção). */
|
|
4
4
|
export declare const PASSOS_CURVA = 24;
|
|
@@ -41,3 +41,5 @@ export declare function caminhoSvg(nos: readonly NoCurva[], fechada: boolean, pr
|
|
|
41
41
|
export declare function normalizarNos(bruto: unknown, minimo?: number): NoCurva[] | null;
|
|
42
42
|
/** Cópia dos nós com todos os pontos deslocados (usado ao mover/copiar a feição). */
|
|
43
43
|
export declare function moverNos(nos: readonly NoCurva[], mover: (p: LatLonPar) => LatLonPar): NoCurva[];
|
|
44
|
+
/** A geometria deve ser desenhada como curva? Linha simples ou polígono de um anel, com `curva`. */
|
|
45
|
+
export declare function nosDaGeometria(g: GeometriaFeicao): NoCurva[] | null;
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { CaixaGeo } from './feature_indice';
|
|
2
|
+
/** Abaixo desta diagonal (px) a feição é desenhada como marca. */
|
|
3
|
+
export declare const LIMITE_MARCA_PX = 3;
|
|
4
|
+
/** Opacidade da marca (preenchimentos de 0,2 sumiriam em 1–2 px). */
|
|
5
|
+
export declare const OPACIDADE_MARCA = 0.75;
|
|
6
|
+
export interface PontoMundo {
|
|
7
|
+
x: number;
|
|
8
|
+
y: number;
|
|
9
|
+
}
|
|
10
|
+
/** Web Mercator (EPSG:3857, tiles de 256 px) em pixels do mundo no zoom. Não lança: entradas inválidas dão NaN. */
|
|
11
|
+
export declare function projetarMercator(lat: number, lon: number, zoom: number): PontoMundo;
|
|
12
|
+
/** Diagonal da caixa em pixels no zoom; NaN se a caixa ou o zoom forem inválidos. */
|
|
13
|
+
export declare function diagonalPx(c: CaixaGeo, zoom: number): number;
|
|
14
|
+
/** Vira marca? Caixa ausente ou inválida nunca vira (a feição segue o caminho normal). */
|
|
15
|
+
export declare function ehMarca(c: CaixaGeo | undefined, zoom: number, limite?: number): boolean;
|
|
16
|
+
/** Lado da marca em px: 1 para diagonais minúsculas, 2 para as demais. */
|
|
17
|
+
export declare function ladoMarca(diagonal: number): 1 | 2;
|
|
18
|
+
export interface MarcaLOD {
|
|
19
|
+
id: string;
|
|
20
|
+
lat: number;
|
|
21
|
+
lon: number;
|
|
22
|
+
cor: string;
|
|
23
|
+
lado: 1 | 2;
|
|
24
|
+
/** Quem gerou a marca (identidade da feição): o renderizador só a refaz quando a feição troca. */
|
|
25
|
+
fonte: unknown;
|
|
26
|
+
}
|
|
27
|
+
/** Parte do Canvas 2D que a pintura usa (permite testar com um contexto falso). */
|
|
28
|
+
export interface ContextoMarcas {
|
|
29
|
+
fillStyle: string | CanvasGradient | CanvasPattern;
|
|
30
|
+
globalAlpha: number;
|
|
31
|
+
fillRect(x: number, y: number, w: number, h: number): void;
|
|
32
|
+
}
|
|
33
|
+
export declare function agruparMarcasPorCor(marcas: Iterable<MarcaLOD>): Map<string, MarcaLOD[]>;
|
|
34
|
+
/**
|
|
35
|
+
* Pinta as marcas em lote por cor (um `fillStyle` por grupo). `origemX/origemY` são os pixels do mundo, no zoom,
|
|
36
|
+
* do canto superior esquerdo do canvas. Devolve quantas marcas caíram dentro do canvas.
|
|
37
|
+
*/
|
|
38
|
+
export declare function pintarMarcas(ctx: ContextoMarcas, marcas: Iterable<MarcaLOD>, zoom: number, origemX: number, origemY: number, largura: number, altura: number): number;
|
|
@@ -1,4 +1,13 @@
|
|
|
1
1
|
import { Feicao, GeometriaFeicao, LatLonPar } from './feature_types';
|
|
2
|
+
/** Metros por grau de latitude e de longitude na latitude dada (escala local do elipsoide). */
|
|
3
|
+
export declare function metrosPorGrau(latGraus: number): {
|
|
4
|
+
lat: number;
|
|
5
|
+
lng: number;
|
|
6
|
+
};
|
|
7
|
+
/**
|
|
8
|
+
* Distância em metros no elipsoide. Até ~11 km (0,1°) usa a escala local do elipsoide (M e N na
|
|
9
|
+
* latitude média, erro < 2e-7); acima disso, Vincenty. Rápida o bastante para laços de arraste/encaixe.
|
|
10
|
+
*/
|
|
2
11
|
export declare function distanciaMetros(a: LatLonPar, b: LatLonPar): number;
|
|
3
12
|
export declare function comprimentoMetros(pts: LatLonPar[], fechado?: boolean): number;
|
|
4
13
|
/** Área (m²) do polígono, descontando os furos. */
|
|
@@ -1,14 +1,22 @@
|
|
|
1
1
|
import { GeometriaFeicao, LatLonPar } from './feature_types';
|
|
2
|
-
/** A partir deste zoom a geometria é desenhada completa. */
|
|
3
|
-
export declare const ZOOM_SEM_SIMPLIFICACAO =
|
|
4
|
-
/**
|
|
5
|
-
export declare const MIN_VERTICES_SIMPLIFICAR =
|
|
6
|
-
/** Tolerância em graus para o zoom; 0 = sem simplificar. */
|
|
2
|
+
/** A partir deste zoom a geometria é desenhada completa (a tolerância de 1,2 px já é menor que 1,5 m). */
|
|
3
|
+
export declare const ZOOM_SEM_SIMPLIFICACAO = 17;
|
|
4
|
+
/** Só se simplifica feição com MAIS de 8 vértices; abaixo disso o ganho não paga a alocação. */
|
|
5
|
+
export declare const MIN_VERTICES_SIMPLIFICAR = 9;
|
|
6
|
+
/** Tolerância em graus de LONGITUDE para o zoom (1 px = 360 / (256·2^z) graus); 0 = sem simplificar ou zoom inválido. */
|
|
7
7
|
export declare function toleranciaPorZoom(zoom: number): number;
|
|
8
|
-
/**
|
|
9
|
-
|
|
8
|
+
/**
|
|
9
|
+
* Em Web Mercator 1 px de latitude vale cos(lat) grau de latitude por grau de longitude: sem este fator a tolerância
|
|
10
|
+
* vertical em graus ficaria 1/cos(lat) vezes maior que a pretendida (2× a 60°). Latitude inválida → 1.
|
|
11
|
+
*/
|
|
12
|
+
export declare function escalaLatitude(lat: number): number;
|
|
13
|
+
/**
|
|
14
|
+
* Douglas-Peucker iterativo (sem recursão: linhas com centenas de milhares de vértices). `escalaLat` multiplica as
|
|
15
|
+
* diferenças de latitude antes de medir (ver `escalaLatitude`); 1 mede em graus puros.
|
|
16
|
+
*/
|
|
17
|
+
export declare function simplificarLinha(pts: LatLonPar[], tolerancia: number, escalaLat?: number): LatLonPar[];
|
|
10
18
|
/** Anel aberto: mantém pelo menos 3 vértices (senão volta o original). */
|
|
11
|
-
export declare function simplificarAnel(anel: LatLonPar[], tolerancia: number): LatLonPar[];
|
|
19
|
+
export declare function simplificarAnel(anel: LatLonPar[], tolerancia: number, escalaLat?: number): LatLonPar[];
|
|
12
20
|
/** Curvas não se simplificam: os vértices de apoio só medem, o desenho é calculado a partir dos nós. */
|
|
13
21
|
export declare function vertices(g: GeometriaFeicao): number;
|
|
14
22
|
/** Geometria para desenho no zoom dado; devolve a própria `g` quando não há o que simplificar. */
|
|
@@ -10,6 +10,13 @@ export * from './renderers/vector_points_renderer';
|
|
|
10
10
|
export * from './renderers/vector_polygons_renderer';
|
|
11
11
|
export * from './renderers/grid_renderer';
|
|
12
12
|
export * from './renderers/feicoes_renderer';
|
|
13
|
+
export * from './renderers/feicoes_canvas_renderer';
|
|
14
|
+
export * from './renderers/feicoes_despachante';
|
|
15
|
+
export * from './renderers/renderizador_feicoes_tipos';
|
|
16
|
+
export * from './renderers/renderizador_formas';
|
|
17
|
+
export * from './renderers/canvas_formas_leaflet';
|
|
18
|
+
export * from './feature_lod';
|
|
19
|
+
export * from './motor';
|
|
13
20
|
export * from './feature_metricas';
|
|
14
21
|
export * from './layer_hit_test';
|
|
15
22
|
export * from './feature_caixa';
|
|
@@ -15,7 +15,29 @@ export interface CandidatoHit {
|
|
|
15
15
|
distancia: number;
|
|
16
16
|
/** Área do envelope em px²; só usada para desempatar áreas. */
|
|
17
17
|
area: number;
|
|
18
|
+
/** Só nas feições vindas de uma `FonteHit` (marcas de LOD, que não são objetos Leaflet): a feição e a chave dela. */
|
|
19
|
+
feicao?: unknown;
|
|
20
|
+
chave?: string;
|
|
18
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Candidatos que não são objetos Leaflet (as marcas de LOD do renderizador de feições). A camada registra a fonte e o
|
|
24
|
+
* clique central as inclui no mesmo empilhamento (prioridade, camada do topo, menor área, alternância de cliques).
|
|
25
|
+
* O evento `click` é disparado em `alvo`, com a feição em `feicaoHit`.
|
|
26
|
+
*/
|
|
27
|
+
export interface FonteHit {
|
|
28
|
+
alvo: L.Layer;
|
|
29
|
+
/** Feições sob `ponto` (ponto de camada do mapa), da melhor para a pior. Não pode lançar. */
|
|
30
|
+
consultar(ponto: L.Point): Array<{
|
|
31
|
+
feicao: unknown;
|
|
32
|
+
chave: string;
|
|
33
|
+
tipo: TipoGeometriaPane;
|
|
34
|
+
distancia: number;
|
|
35
|
+
area: number;
|
|
36
|
+
}>;
|
|
37
|
+
}
|
|
38
|
+
export declare function registrarFonteHit(map: L.Map, camadaId: string, fonte: FonteHit): void;
|
|
39
|
+
/** Remove a fonte da camada (só se ainda for `fonte`, para uma camada recriada não perder a nova). */
|
|
40
|
+
export declare function removerFonteHit(map: L.Map, camadaId: string, fonte: FonteHit): void;
|
|
19
41
|
/**
|
|
20
42
|
* Todas as feições sob o ponto, na ordem em que um clique deve escolhê-las
|
|
21
43
|
* (a primeira é a que o clique simples seleciona). Serve também para hover, menu de contexto e conta-gotas.
|
|
@@ -17,6 +17,11 @@ export declare class CanvasLayerManager {
|
|
|
17
17
|
attachMap(map: L.Map, context: CanvasRenderContext): void;
|
|
18
18
|
ensurePanes(): void;
|
|
19
19
|
renderAllLayers(apenasDependentesDoContexto?: boolean): void;
|
|
20
|
+
/**
|
|
21
|
+
* Destrói e recria as instâncias das camadas visíveis de um tipo (ex.: troca do renderizador das camadas de
|
|
22
|
+
* feições). Os dados, a seleção e as definições ficam: só o desenho é refeito, as demais camadas não são tocadas.
|
|
23
|
+
*/
|
|
24
|
+
recriarCamadasDoTipo(tipo: string): void;
|
|
20
25
|
/** Executa agora o render agendado por updateContext/setGraphicScale, se houver. */
|
|
21
26
|
flushRender(): void;
|
|
22
27
|
private agendarRender;
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Feicao } from '../feature_types';
|
|
2
|
+
import { IndiceEspacial } from '../feature_indice';
|
|
3
|
+
import { DeltaMotor, RegraVisivel } from './tipos';
|
|
4
|
+
export interface ResultadoMudanca {
|
|
5
|
+
mudadas: string[];
|
|
6
|
+
removidas: string[];
|
|
7
|
+
/** O conjunto de entidades com oficial mudou (com prévias na camada): a visibilidade de outras feições pode mudar. */
|
|
8
|
+
oficiaisMudou: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare class DadosCamada {
|
|
11
|
+
readonly loja: Map<string, Feicao>;
|
|
12
|
+
readonly indice: IndiceEspacial;
|
|
13
|
+
/** Muda a cada alteração dos dados (invalida cache de geometria por feição). */
|
|
14
|
+
revisao: number;
|
|
15
|
+
/** Muda quando o agrupamento e a contagem de pontos precisam ser refeitos do zero. */
|
|
16
|
+
revisaoBase: number;
|
|
17
|
+
listaSincronizada: Feicao[] | null;
|
|
18
|
+
/** Entidades com geometria oficial, e quantas oficiais cada uma tem. */
|
|
19
|
+
oficiais: Set<string>;
|
|
20
|
+
private contOficiais;
|
|
21
|
+
/** Entidade -> quantas prévias (entidade com oficial E prévia forma um par: sempre em detalhe completo). */
|
|
22
|
+
contPrevias: Map<string, number>;
|
|
23
|
+
nPrevias: number;
|
|
24
|
+
readonly selecionadas: Set<string>;
|
|
25
|
+
regra: RegraVisivel | null;
|
|
26
|
+
/** Revisão por feição (id → número crescente): chave do cache de geometria projetada. */
|
|
27
|
+
private revisaoDe;
|
|
28
|
+
private contador;
|
|
29
|
+
revisaoDaFeicao(id: string): number;
|
|
30
|
+
/** Aparece segundo a regra (não oculta e visível por versão)? */
|
|
31
|
+
desenhavel(f: Feicao): boolean;
|
|
32
|
+
/** Visível pela regra de versões (ignora `oculta`: o hit-test e a seleção seguem regras próprias). */
|
|
33
|
+
visivelPorVersao(f: Feicao): boolean;
|
|
34
|
+
/** Troca total: diferencia contra a loja, mantém o índice e a contabilidade de versões. */
|
|
35
|
+
sincronizar(lista: Feicao[]): ResultadoMudanca;
|
|
36
|
+
private recontarOficiais;
|
|
37
|
+
/** Aplica só a diferença. Devolve `null` se o delta não parte da lista sincronizada (então use `sincronizar`). */
|
|
38
|
+
aplicarDelta(lista: Feicao[], delta: DeltaMotor): ResultadoMudanca | null;
|
|
39
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { Feicao } from '../feature_types';
|
|
2
|
+
import { LayerStyleDef } from '../types';
|
|
3
|
+
export declare const COR_PADRAO = "#38bdf8";
|
|
4
|
+
export declare const COR_SELECAO = "#38bdf8";
|
|
5
|
+
/** Cores vão para atributos style/canvas; só passam formatos conhecidos (hex, rgb/hsl, nome). */
|
|
6
|
+
export declare function corSegura(cor: string | undefined, padrao: string): string;
|
|
7
|
+
export interface EstiloVetor {
|
|
8
|
+
/** Cor do traço (contorno). */
|
|
9
|
+
cor: string;
|
|
10
|
+
/** Desenha o traço? (`espessuraContorno: 0` em ponto o desliga). */
|
|
11
|
+
traco: boolean;
|
|
12
|
+
peso: number;
|
|
13
|
+
/** `dashArray` do Leaflet/SVG ("6 4"), ou `undefined` para linha contínua. */
|
|
14
|
+
dash: string | undefined;
|
|
15
|
+
preencher: boolean;
|
|
16
|
+
corPreenchimento: string;
|
|
17
|
+
opacidadePreenchimento: number;
|
|
18
|
+
}
|
|
19
|
+
/** Estilo de uma feição vetorial (polígono, círculo, linha ou ponto sem ícone). */
|
|
20
|
+
export declare function estiloVetorDe(f: Feicao, camada: LayerStyleDef, selecionada?: boolean): EstiloVetor;
|
|
21
|
+
/** Raio, em px, do círculo de um ponto sem ícone. */
|
|
22
|
+
export declare function raioPontoPx(f: Feicao, camada: LayerStyleDef): number;
|
|
23
|
+
/** Interna estilos iguais: o renderizador agrupa por identidade do objeto (um fill/stroke por estilo). */
|
|
24
|
+
export declare class InternadorEstilos {
|
|
25
|
+
private porChave;
|
|
26
|
+
interno(e: EstiloVetor): EstiloVetor;
|
|
27
|
+
limpar(): void;
|
|
28
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import { LatLonPar } from '../feature_types';
|
|
2
|
+
/** Pixels de mundo da latitude/longitude no zoom, gravados em `saida[i]` (x) e `saida[i + 1]` (y). Não lança. */
|
|
3
|
+
export declare function projetarEm(saida: Float64Array, i: number, lat: number, lon: number, escala: number): void;
|
|
4
|
+
export declare const escalaDoZoom: (zoom: number) => number;
|
|
5
|
+
/** Inverso de `projetarEm`: pixels de mundo no zoom → [lat, lon]. */
|
|
6
|
+
export declare function latLonDoMundo(x: number, y: number, zoom: number): LatLonPar;
|
|
7
|
+
/** Projeta uma lista de [lat, lon]. */
|
|
8
|
+
export declare function projetarVertices(coords: ReadonlyArray<LatLonPar>, zoom: number): Float64Array;
|
|
9
|
+
export declare function projetarCentro(lat: number, lon: number, zoom: number): Float64Array;
|
|
10
|
+
/** Metros por pixel na latitude e no zoom. */
|
|
11
|
+
export declare function metrosPorPixel(lat: number, zoom: number): number;
|
|
12
|
+
/** Raio, em pixels, de um círculo de `raioMetros` com centro na latitude (raio por zoom e latitude). */
|
|
13
|
+
export declare function raioCirculoPx(lat: number, raioMetros: number, zoom: number): number;
|
|
14
|
+
export interface CaixaMundoPx {
|
|
15
|
+
minX: number;
|
|
16
|
+
minY: number;
|
|
17
|
+
maxX: number;
|
|
18
|
+
maxY: number;
|
|
19
|
+
}
|
|
20
|
+
/** Envelope em px de vários arrays planos; `null` se não houver nenhum vértice finito. */
|
|
21
|
+
export declare function caixaPx(partes: ReadonlyArray<Float64Array>): CaixaMundoPx | null;
|
|
22
|
+
/**
|
|
23
|
+
* Douglas-Peucker iterativo em pixels (tolerância em px, sem cos(lat): as coordenadas já são de tela). `fechado`
|
|
24
|
+
* trata o anel como fechado (o corte não depende de onde ele "começa") e nunca devolve menos de 3 vértices (senão
|
|
25
|
+
* volta o original). Tolerância inválida (≤ 0, NaN) devolve a própria entrada.
|
|
26
|
+
*/
|
|
27
|
+
export declare function simplificarPx(pts: Float64Array, tolerancia: number, fechado: boolean): Float64Array;
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { Feicao, LatLonPar } from '../feature_types';
|
|
2
|
+
import { CaixaGeo } from '../feature_indice';
|
|
3
|
+
import { CamadaDesenho, DefCamadaMotor, DeltaMotor, EstatisticasCamada, ListaDesenho, RegraVisivel, Vista } from './tipos';
|
|
4
|
+
/** Que parte da lista o chamador quer: o que se pinta no canvas, os marcadores DOM, ou tudo. */
|
|
5
|
+
export type ParteLista = 'tudo' | 'canvas' | 'dom';
|
|
6
|
+
export declare class MotorFormas {
|
|
7
|
+
private camadas;
|
|
8
|
+
private regra;
|
|
9
|
+
/** Cria a camada ou atualiza a definição (estilo, zIndex, opacidade, visibilidade). */
|
|
10
|
+
definirCamada(def: DefCamadaMotor): void;
|
|
11
|
+
removerCamada(camadaId: string): void;
|
|
12
|
+
temCamada(camadaId: string): boolean;
|
|
13
|
+
definirRegra(regra: RegraVisivel | null): void;
|
|
14
|
+
/** A regra de versões mudou (prévias ligadas/desligadas): o conjunto desenhado e o agrupamento precisam ser refeitos. */
|
|
15
|
+
reavaliarVersoes(camadaId: string): void;
|
|
16
|
+
/** Troca total dos dados da camada (diferencia contra o que já existe). */
|
|
17
|
+
definirFeicoes(camadaId: string, lista: Feicao[]): void;
|
|
18
|
+
/**
|
|
19
|
+
* Mudança incremental: só vale se `delta.base` for a lista sincronizada por último; senão a camada é refeita
|
|
20
|
+
* por inteiro a partir de `lista`.
|
|
21
|
+
*/
|
|
22
|
+
aplicarDelta(camadaId: string, lista: Feicao[], delta: DeltaMotor): void;
|
|
23
|
+
private pontoVisivel;
|
|
24
|
+
private aposMudanca;
|
|
25
|
+
/** O agrupador do zoom atual acompanha os pontos que mudaram (células afetadas, sem reagrupar a camada). */
|
|
26
|
+
private manterAgrupador;
|
|
27
|
+
/** Define a seleção da camada. Devolve quem entrou e quem saiu (só o que mudou). */
|
|
28
|
+
selecionar(camadaId: string, ids: Iterable<string>): {
|
|
29
|
+
entrou: string[];
|
|
30
|
+
saiu: string[];
|
|
31
|
+
};
|
|
32
|
+
selecionadas(camadaId: string): ReadonlySet<string>;
|
|
33
|
+
/** Geometria provisória (arrasto de vértice): o canvas base deixa de desenhar a feição e a sobreposição a mostra. */
|
|
34
|
+
previsualizar(camadaId: string, f: Feicao): void;
|
|
35
|
+
temPrevia(camadaId: string, id: string): boolean;
|
|
36
|
+
/** Realce temporário (hover): as feições entram na sobreposição com `destaque: true`. */
|
|
37
|
+
destacar(camadaId: string, ids: Iterable<string>): void;
|
|
38
|
+
feicao(camadaId: string, id: string): Feicao | undefined;
|
|
39
|
+
caixaDe(camadaId: string, id: string): CaixaGeo | undefined;
|
|
40
|
+
/** Feições cujo envelope toca `caixa`, sem as ocultas (snap, hit-test, seleção por caixa). Não passa pelo LOD. */
|
|
41
|
+
consultarCaixa(camadaId: string, caixa: CaixaGeo): Feicao[];
|
|
42
|
+
feicaoVisivel(camadaId: string, f: Feicao): boolean;
|
|
43
|
+
estatisticas(camadaId: string): EstatisticasCamada | null;
|
|
44
|
+
/** Entidades da camada com prévia e com oficial (pares em detalhe completo): para testes e diagnóstico. */
|
|
45
|
+
ehPar(camadaId: string, f: Feicao): boolean;
|
|
46
|
+
/**
|
|
47
|
+
* O que desenhar nesta vista, camada a camada, na ordem de empilhamento (a última fica por cima).
|
|
48
|
+
* `parte`: `'canvas'` só o que se pinta no canvas (marcas, formas, pontos sem ícone), `'dom'` só marcadores DOM e
|
|
49
|
+
* curvas (clusters, ícones, textos, rótulos), `'tudo'` (padrão) os dois. O pan incremental pede o canvas só das faixas
|
|
50
|
+
* expostas e o DOM da vista inteira (poucos itens, sem projetar nem simplificar formas).
|
|
51
|
+
*/
|
|
52
|
+
listaDesenho(vista: Vista, opcoes?: {
|
|
53
|
+
camadas?: string[];
|
|
54
|
+
parte?: ParteLista;
|
|
55
|
+
}): ListaDesenho;
|
|
56
|
+
private origemDe;
|
|
57
|
+
private camadaVazia;
|
|
58
|
+
private prepararZoom;
|
|
59
|
+
private estiloDe;
|
|
60
|
+
private emPar;
|
|
61
|
+
/**
|
|
62
|
+
* Vira marca? Sempre em detalhe completo: com rótulo e em par oficial × prévia; ponto e texto nunca. A seleção NÃO
|
|
63
|
+
* entra aqui: o canvas base não depende dela (a sobreposição desenha a selecionada em detalhe completo por cima).
|
|
64
|
+
*/
|
|
65
|
+
private comoMarca;
|
|
66
|
+
/** Geometria projetada e simplificada em px, em cache por (feição, revisão, zoom). `null` se não há o que desenhar. */
|
|
67
|
+
private geometriaProjetada;
|
|
68
|
+
private construirGeometria;
|
|
69
|
+
/** Marca de LOD: centro do envelope, lado de 1–2 px, cor do preenchimento/contorno. */
|
|
70
|
+
private marcaDe;
|
|
71
|
+
/**
|
|
72
|
+
* Item da marca, em cache junto com a geometria por (feição, zoom). Com 100 mil marcas na tela, montar o item e internar
|
|
73
|
+
* o estilo a cada vista custava a maior parte da lista; no pan agora só se confere se algo mudou, sem alocar.
|
|
74
|
+
*/
|
|
75
|
+
private itemMarca;
|
|
76
|
+
private estiloMarca;
|
|
77
|
+
private agrupadorAtivo;
|
|
78
|
+
private itemBase;
|
|
79
|
+
/**
|
|
80
|
+
* A caixa da vista com uma folga de poucos px: o traço de uma feição com o envelope logo fora da vista ainda entra nela
|
|
81
|
+
* (o índice é por envelope). Sem isto, o pan incremental e o quadro completo divergem na borda do canvas.
|
|
82
|
+
*/
|
|
83
|
+
private caixaComFolga;
|
|
84
|
+
private listarCamada;
|
|
85
|
+
/**
|
|
86
|
+
* Clusters da vista (marcadores DOM). Selecionado nunca entra em cluster; o cluster só aparece com o centro dentro da
|
|
87
|
+
* vista e com 2 ou mais restantes. Os pontos individuais que a seleção solta (o selecionado e o único restante de uma
|
|
88
|
+
* célula) são da sobreposição: o canvas base não depende da seleção.
|
|
89
|
+
*/
|
|
90
|
+
private listarClusters;
|
|
91
|
+
/** O ponto está dentro de um cluster neste zoom (não é desenhado nem clicável individualmente)? */
|
|
92
|
+
pontoAgrupado(camadaId: string, id: string): boolean;
|
|
93
|
+
/** O ponto de uma célula de cluster aparece solto: está selecionado ou é o único restante não selecionado? */
|
|
94
|
+
private soltoDoCluster;
|
|
95
|
+
/** Membros (id e coordenada) da célula de cluster: o clique no cluster enquadra o grupo. */
|
|
96
|
+
membrosDoCluster(camadaId: string, chave: string): Array<{
|
|
97
|
+
id: string;
|
|
98
|
+
coordenada: LatLonPar;
|
|
99
|
+
}>;
|
|
100
|
+
/**
|
|
101
|
+
* Itens da sobreposição: feições selecionadas, em edição ou destacadas, sempre em detalhe completo e com o estilo
|
|
102
|
+
* de seleção. Custo O(selecionadas): selecionar não repinta o canvas base.
|
|
103
|
+
*/
|
|
104
|
+
listaSobreposicao(camadaId: string, vista: Vista): CamadaDesenho | null;
|
|
105
|
+
/** A seleção da camada toca pontos sob agrupamento ativo? (então o conjunto de clusters muda e o base precisa refazer) */
|
|
106
|
+
selecaoAfetaAgrupamento(camadaId: string, ids: Iterable<string>): boolean;
|
|
107
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { CaixaGeo } from '../feature_indice';
|
|
2
|
+
import { PontoMundo } from '../feature_lod';
|
|
3
|
+
import { Feicao, LatLonPar } from '../feature_types';
|
|
4
|
+
import { LayerStyleDef } from '../types';
|
|
5
|
+
import { EstiloVetor } from './estilo';
|
|
6
|
+
export type { PontoMundo };
|
|
7
|
+
/**
|
|
8
|
+
* Janela que o motor desenha. `caixa` é o que cabe no canvas (geográfica); `origemPx` são os pixels de mundo, no
|
|
9
|
+
* zoom, do canto superior esquerdo do canvas: o pintor subtrai esse valor em dupla precisão (coordenadas de mundo em
|
|
10
|
+
* zoom alto não cabem em float32 do canvas). Sem `origemPx` ela é derivada de `caixa`.
|
|
11
|
+
*/
|
|
12
|
+
export interface Vista {
|
|
13
|
+
caixa: CaixaGeo;
|
|
14
|
+
zoom: number;
|
|
15
|
+
larguraPx: number;
|
|
16
|
+
alturaPx: number;
|
|
17
|
+
dpr: number;
|
|
18
|
+
origemPx?: PontoMundo;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Formas de desenho:
|
|
22
|
+
* - pintadas no canvas: `marca` (LOD), `poligono`, `circulo`, `linha`, `ponto` (sem ícone);
|
|
23
|
+
* - marcadores DOM (dependem de CSS e arraste, ficam no Leaflet): `icone`, `texto`, `cluster`, `rotulo`;
|
|
24
|
+
* - `curva` (linha/polígono Bézier): caminho Leaflet legado dentro do mesmo renderizador (pendência explícita).
|
|
25
|
+
*/
|
|
26
|
+
export type FormaDesenho = 'marca' | 'poligono' | 'circulo' | 'linha' | 'ponto' | 'icone' | 'texto' | 'cluster' | 'rotulo' | 'curva';
|
|
27
|
+
export interface ItemDesenho {
|
|
28
|
+
camadaId: string;
|
|
29
|
+
/** Id da feição; no cluster, a chave da célula; no rótulo, `rotulo:<id>`. */
|
|
30
|
+
id: string;
|
|
31
|
+
forma: FormaDesenho;
|
|
32
|
+
/**
|
|
33
|
+
* Pixels de MUNDO no zoom da vista (subtraia `origem` ao pintar). Poligono/linha: um array `[x0, y0, x1, y1, ...]`
|
|
34
|
+
* por anel/parte. Círculo, ponto e marca: um array `[x, y]` com o centro. Marcadores DOM e curva: vazio.
|
|
35
|
+
*/
|
|
36
|
+
geometriaEmPx: Float64Array[];
|
|
37
|
+
/** Círculo e ponto: raio em px (círculo em metros convertido por zoom e latitude). Marca: lado (1 ou 2). */
|
|
38
|
+
raioPx: number;
|
|
39
|
+
/** Estilo normal (sem seleção); o realce de seleção vem de `listaSelecao`. Interno: itens iguais compartilham o objeto. */
|
|
40
|
+
estilo: EstiloVetor;
|
|
41
|
+
/** A feição está selecionada? (marcadores DOM trocam de aparência; o canvas base não depende disto.) */
|
|
42
|
+
selecionada: boolean;
|
|
43
|
+
/** Realce temporário (hover/edição), pedido por `destacar`. */
|
|
44
|
+
destaque?: boolean;
|
|
45
|
+
/** Feição de origem (marcadores DOM, curva, clique). Ausente no cluster. */
|
|
46
|
+
feicao?: Feicao;
|
|
47
|
+
/** Icone, texto, rótulo e cluster: posição [lat, lon]. */
|
|
48
|
+
coordenada?: LatLonPar;
|
|
49
|
+
/** Cluster: quantos pontos há na célula e quantos aparecem no cluster (o resto está selecionado). */
|
|
50
|
+
total?: number;
|
|
51
|
+
restantes?: number;
|
|
52
|
+
/** Rótulo: texto a exibir. */
|
|
53
|
+
texto?: string;
|
|
54
|
+
}
|
|
55
|
+
export interface EstatisticasCamada {
|
|
56
|
+
/** Feições na camada. */
|
|
57
|
+
total: number;
|
|
58
|
+
/** Itens no canvas ou em marcadores DOM nesta vista (sem contar as marcas de LOD). */
|
|
59
|
+
desenhadas: number;
|
|
60
|
+
/** Feições pequenas pintadas como marca de 1–2 px. */
|
|
61
|
+
marcasLOD: number;
|
|
62
|
+
clusters: number;
|
|
63
|
+
/** Marcadores DOM pedidos (ícones, textos, clusters, rótulos). */
|
|
64
|
+
marcadoresDom: number;
|
|
65
|
+
/** Quantas vezes o LOD foi calculado (no pan puro não cresce). */
|
|
66
|
+
avaliacoesLOD: number;
|
|
67
|
+
}
|
|
68
|
+
export interface CamadaDesenho {
|
|
69
|
+
camadaId: string;
|
|
70
|
+
zIndex: number;
|
|
71
|
+
opacidade: number;
|
|
72
|
+
/** Pintar primeiro as marcas, depois polígonos/círculos, linhas e pontos; DOM e curvas vêm separados. */
|
|
73
|
+
itens: ItemDesenho[];
|
|
74
|
+
estatisticas: EstatisticasCamada;
|
|
75
|
+
}
|
|
76
|
+
/** Camadas visíveis, na ordem de empilhamento (zIndex crescente = a última fica por cima). */
|
|
77
|
+
export interface ListaDesenho {
|
|
78
|
+
vista: Vista;
|
|
79
|
+
/** Pixels de mundo do canto superior esquerdo do canvas (a `origemPx` da vista, já resolvida). */
|
|
80
|
+
origem: PontoMundo;
|
|
81
|
+
camadas: CamadaDesenho[];
|
|
82
|
+
}
|
|
83
|
+
export interface DefCamadaMotor {
|
|
84
|
+
id: string;
|
|
85
|
+
zIndex: number;
|
|
86
|
+
opacidade: number;
|
|
87
|
+
visivel: boolean;
|
|
88
|
+
interativo: boolean;
|
|
89
|
+
bloqueada?: boolean;
|
|
90
|
+
estilo: LayerStyleDef;
|
|
91
|
+
}
|
|
92
|
+
/** Regra de visibilidade por versão (oficial × prévia): `RegraVersoes.visivel` serve direto. */
|
|
93
|
+
export type RegraVisivel = (f: Feicao, comOficial: Set<string>) => boolean;
|
|
94
|
+
/** Mudança incremental (a mesma que o gerenciador manda ao renderizador Leaflet). */
|
|
95
|
+
export interface DeltaMotor {
|
|
96
|
+
/** A lista que o motor sincronizou por último; se não bater, o motor refaz a camada por inteiro. */
|
|
97
|
+
base: Feicao[];
|
|
98
|
+
mudadas: Feicao[];
|
|
99
|
+
removidas: string[];
|
|
100
|
+
}
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CaixaGeo } from '../feature_indice';
|
|
3
|
+
import { PontoMundo } from '../motor/tipos';
|
|
4
|
+
import { RegiaoPx } from './renderizador_formas';
|
|
5
|
+
/** Tudo que o renderizador precisa para pintar um quadro. */
|
|
6
|
+
export interface QuadroCanvas {
|
|
7
|
+
ctx: CanvasRenderingContext2D;
|
|
8
|
+
/** Multiplicador de retina do Leaflet (1 ou 2). */
|
|
9
|
+
dpr: number;
|
|
10
|
+
/** Tamanho do canvas em px CSS. */
|
|
11
|
+
larguraPx: number;
|
|
12
|
+
alturaPx: number;
|
|
13
|
+
/** Pixels de mundo, no zoom, do canto superior esquerdo do canvas. */
|
|
14
|
+
origemPx: PontoMundo;
|
|
15
|
+
/** O que cabe no canvas, em coordenadas geográficas. */
|
|
16
|
+
caixa: CaixaGeo;
|
|
17
|
+
zoom: number;
|
|
18
|
+
/**
|
|
19
|
+
* `null`: pintar o canvas inteiro. Lista: o bitmap já foi deslocado e só estas regiões (px CSS) estão vazias e
|
|
20
|
+
* precisam ser pintadas (vazia = nada novo ficou à mostra).
|
|
21
|
+
*/
|
|
22
|
+
regioes: RegiaoPx[] | null;
|
|
23
|
+
/**
|
|
24
|
+
* O bitmap está em branco antes desta pintura? Quem pinta pode então não tocar no canvas quando não há o que desenhar:
|
|
25
|
+
* qualquer chamada de desenho (até um `clearRect`) faz o navegador reenviar o canvas inteiro ao compositor.
|
|
26
|
+
*/
|
|
27
|
+
branco: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Devolve quantos itens de canvas a pintura deixou no bitmap (numa faixa do pan, quantos ACRESCENTOU), ou só se deixou
|
|
31
|
+
* algo (`true`/`void`: algo, quantidade desconhecida; `false`: nada).
|
|
32
|
+
*/
|
|
33
|
+
export type PintarQuadro = (quadro: QuadroCanvas) => number | boolean | void;
|
|
34
|
+
export interface OpcoesCanvasFormas extends L.RendererOptions {
|
|
35
|
+
/** Pan incremental: desloca o bitmap e pinta só as faixas expostas (padrão: não; a sobreposição repinta inteira). */
|
|
36
|
+
incremental?: boolean;
|
|
37
|
+
/** Pan incremental com até tantos itens no bitmap: repinta inteiro em vez de deslocar (padrão: `CanvasFormas.limiteRepintar`). */
|
|
38
|
+
limiteRepintar?: number;
|
|
39
|
+
}
|
|
40
|
+
/** Regiões que ficam vazias quando o conteúdo se desloca de (`dx`, `dy`) px: a faixa vertical inteira e a horizontal sem a quina. */
|
|
41
|
+
export declare function regioesExpostas(largura: number, altura: number, dx: number, dy: number): RegiaoPx[];
|
|
42
|
+
export declare class CanvasFormas extends L.Canvas {
|
|
43
|
+
/**
|
|
44
|
+
* Com poucos itens no bitmap, repintar a vista inteira custa menos que deslocá-lo: o deslocamento copia o bitmap
|
|
45
|
+
* todo (3072×1920 com dpr 2), seja qual for o conteúdo. Medido (sem GPU): ~180 itens por camada repintam 3× mais
|
|
46
|
+
* rápido; ~650 empatam; ~1 500 já perdem. Ajustável (benchmark); ver docs/desempenho-feicoes.md.
|
|
47
|
+
*/
|
|
48
|
+
static limiteRepintar: number;
|
|
49
|
+
private readonly aoPintar;
|
|
50
|
+
private readonly incremental;
|
|
51
|
+
private readonly limiteProprio;
|
|
52
|
+
/** Itens de canvas no bitmap (estimativa por cima entre repinturas completas: as faixas só somam). */
|
|
53
|
+
private itens;
|
|
54
|
+
/** O bitmap tem um quadro completo válido (deslocável)? Cai para falso ao redimensionar ou se a pintura falhar. */
|
|
55
|
+
private conteudoValido;
|
|
56
|
+
/**
|
|
57
|
+
* O bitmap está em branco? Canvas em branco não é deslocado no pan nem apagado de novo no `_update`: com várias
|
|
58
|
+
* camadas sem nada na vista (zoom alto, camada esparsa), o pan deixa de reenviar canvases vazios ao compositor.
|
|
59
|
+
*/
|
|
60
|
+
private branco;
|
|
61
|
+
/** Canto superior esquerdo do bitmap em pixels de MUNDO no último `_update`: o deslocamento do conteúdo se mede aqui. */
|
|
62
|
+
private mundoMin;
|
|
63
|
+
/** Regiões a pintar no próximo quadro (calculadas no `_update`); `null` = canvas inteiro. */
|
|
64
|
+
private regioesDaVez;
|
|
65
|
+
/** Quantas pinturas falharam (e a última causa): diagnóstico, já que a falha é engolida. */
|
|
66
|
+
falhas: number;
|
|
67
|
+
ultimoErro: unknown;
|
|
68
|
+
constructor(opcoes: OpcoesCanvasFormas, aoPintar: PintarQuadro);
|
|
69
|
+
private get limiteRepintar();
|
|
70
|
+
/**
|
|
71
|
+
* O primeiro `update` do canvas acontece antes de o Leaflet ouvi-lo (e o `onAdd` do L.Canvas ainda limpa o canvas):
|
|
72
|
+
* por isso o primeiro quadro é pintado aqui.
|
|
73
|
+
*/
|
|
74
|
+
onAdd(map: L.Map): this;
|
|
75
|
+
/**
|
|
76
|
+
* Reposiciona o canvas para a vista (moveend, zoomend, resize). Igual ao `L.Canvas._update`, exceto que o bitmap é
|
|
77
|
+
* preservado e deslocado quando só houve pan, em vez de ser sempre apagado pelo redimensionamento.
|
|
78
|
+
*/
|
|
79
|
+
protected _update(): void;
|
|
80
|
+
/** O Leaflet chama isto depois de cada `update` do canvas (moveend, zoomend, resize); aqui vai a pintura. */
|
|
81
|
+
protected _updatePaths(): void;
|
|
82
|
+
/** Repinta o canvas INTEIRO agora (dados, estilo ou seleção que afeta o conjunto mudaram). */
|
|
83
|
+
pintar(): void;
|
|
84
|
+
private pintarQuadro;
|
|
85
|
+
/** O quadro com a vista atual do canvas, ou `null` se o canvas ainda não foi posicionado. */
|
|
86
|
+
quadroAtual(regioes?: RegiaoPx[] | null): QuadroCanvas | null;
|
|
87
|
+
}
|