@thibezer/ui-components-kit 2.0.0 → 2.2.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 +78 -0
- package/README.md +760 -739
- package/dist/botao.cjs +1 -1
- package/dist/botao.js +1 -1
- package/dist/camadas.cjs +175 -142
- package/dist/camadas.js +1335 -1054
- package/dist/canvas.cjs +99 -140
- package/dist/canvas.js +5552 -1283
- package/dist/components/ui-barra-ferramentas/tipos.d.ts +2 -2
- package/dist/components/ui-barra-ferramentas/ui-paleta-ferramentas.d.ts +2 -2
- package/dist/components/ui-camadas/camadas-adapters.d.ts +45 -0
- package/dist/components/ui-camadas/camadas-arvore-renderer.d.ts +9 -0
- package/dist/components/ui-camadas/camadas-drag-drop.d.ts +4 -0
- package/dist/components/ui-camadas/camadas-metricas.d.ts +8 -1
- package/dist/components/ui-camadas/camadas-persistencia.d.ts +5 -0
- package/dist/components/ui-camadas/camadas-rodape.d.ts +5 -0
- package/dist/components/ui-camadas/index.d.ts +1 -0
- package/dist/components/ui-camadas/tipos.d.ts +8 -0
- package/dist/components/ui-camadas/ui-camadas.d.ts +11 -0
- package/dist/components/ui-canvas-cad/cad-estilos-externos.d.ts +16 -0
- package/dist/components/ui-canvas-cad/cad-eventos-canvas.d.ts +4 -0
- package/dist/components/ui-canvas-cad/cad-feicoes.d.ts +262 -0
- package/dist/components/ui-canvas-cad/cad-ferramentas-barra.d.ts +15 -0
- package/dist/components/ui-canvas-cad/cad-snap.d.ts +32 -0
- package/dist/components/ui-canvas-cad/cad-toolbar-painel.d.ts +1 -0
- package/dist/components/ui-canvas-cad/ui-canvas-cad.d.ts +143 -0
- package/dist/components/ui-lista-flutuante/lista-flutuante-posicionamento.d.ts +2 -0
- package/dist/components/ui-lista-flutuante/ui-lista-flutuante.d.ts +1 -0
- package/dist/components/ui-seletor-mapa-base/ui-seletor-mapa-base.d.ts +3 -0
- package/dist/components/ui-tabela/tabela-atributos-sync.d.ts +3 -0
- package/dist/components/ui-tabela/tabela-localizador.d.ts +8 -1
- package/dist/components/ui-tabela/tabela-orquestrador-dados.d.ts +4 -0
- package/dist/components/ui-tabela/tabela-selecao.d.ts +19 -9
- package/dist/components/ui-tabela/tipos.d.ts +6 -0
- package/dist/components/ui-tabela/ui-tabela.d.ts +41 -2
- package/dist/components/ui-tabela-propriedades/avaliador-expressao.d.ts +0 -5
- package/dist/components/ui-tabela-propriedades/propriedades-dom-utils.d.ts +17 -1
- package/dist/components/ui-tabela-propriedades/propriedades-flutuante.d.ts +2 -0
- package/dist/components/ui-tabela-propriedades/propriedades-gerenciador-valores.d.ts +10 -1
- package/dist/components/ui-tabela-propriedades/propriedades-render-arvore.d.ts +3 -1
- package/dist/components/ui-tabela-propriedades/ui-tabela-propriedades.d.ts +5 -1
- package/dist/core/alvo-digitavel.d.ts +1 -0
- package/dist/core/index.d.ts +1 -0
- package/dist/core/svg-seguro.d.ts +10 -0
- package/dist/core.cjs +1 -1
- package/dist/core.js +12 -10
- package/dist/custom-elements.json +16586 -12150
- package/dist/data.cjs +1 -1
- package/dist/data.js +51 -46
- package/dist/forms.cjs +1 -1
- package/dist/forms.js +1 -1
- package/dist/gerencigeo-canvas/canvas_interacao.d.ts +18 -0
- package/dist/gerencigeo-canvas/curva_leaflet.d.ts +21 -0
- package/dist/gerencigeo-canvas/feature_adapters.d.ts +35 -0
- package/dist/gerencigeo-canvas/feature_algoritmos.d.ts +45 -0
- package/dist/gerencigeo-canvas/feature_amostra.d.ts +4 -0
- package/dist/gerencigeo-canvas/feature_caixa.d.ts +19 -0
- package/dist/gerencigeo-canvas/feature_cluster.d.ts +61 -0
- package/dist/gerencigeo-canvas/feature_cursores.d.ts +17 -0
- package/dist/gerencigeo-canvas/feature_curvas.d.ts +43 -0
- package/dist/gerencigeo-canvas/feature_desenho.d.ts +55 -0
- package/dist/gerencigeo-canvas/feature_desenho_controle.d.ts +91 -0
- package/dist/gerencigeo-canvas/feature_edicao_ops.d.ts +46 -0
- package/dist/gerencigeo-canvas/feature_editor_vertices.d.ts +80 -0
- package/dist/gerencigeo-canvas/feature_formas.d.ts +7 -0
- package/dist/gerencigeo-canvas/feature_hud.d.ts +23 -0
- package/dist/gerencigeo-canvas/feature_indice.d.ts +36 -0
- package/dist/gerencigeo-canvas/feature_metricas.d.ts +16 -0
- package/dist/gerencigeo-canvas/feature_popup.d.ts +31 -0
- package/dist/gerencigeo-canvas/feature_selecao.d.ts +38 -0
- package/dist/gerencigeo-canvas/feature_simplificacao.d.ts +15 -0
- package/dist/gerencigeo-canvas/feature_snap.d.ts +25 -0
- package/dist/gerencigeo-canvas/feature_types.d.ts +101 -0
- package/dist/gerencigeo-canvas/feature_versoes.d.ts +19 -0
- package/dist/gerencigeo-canvas/index.d.ts +21 -0
- package/dist/gerencigeo-canvas/layer_hit_test.d.ts +30 -0
- package/dist/gerencigeo-canvas/layer_manager.d.ts +11 -3
- package/dist/gerencigeo-canvas/layer_pane_ops.d.ts +9 -0
- package/dist/gerencigeo-canvas/mapa_controller.d.ts +1 -0
- package/dist/gerencigeo-canvas/mapa_pontos_shapes.d.ts +24 -5
- package/dist/gerencigeo-canvas/renderers/feicoes_renderer.d.ts +89 -0
- package/dist/gerencigeo-canvas/renderers/vector_points_renderer.d.ts +1 -0
- package/dist/gerencigeo-canvas/renderers/vector_polygons_renderer.d.ts +2 -2
- package/dist/gerencigeo-canvas/types.d.ts +12 -0
- package/dist/gerencigeo-canvas/utils.d.ts +4 -2
- package/dist/index.cjs +1 -1
- package/dist/index.js +132 -121
- package/dist/leaflet-DcO7uRC-.cjs +1 -0
- package/dist/{leaflet-DkaFZYc5.js → leaflet-PPDKB6Dd.js} +37 -37
- package/dist/mapa.cjs +1 -1
- package/dist/mapa.js +1 -1
- package/dist/register.cjs +1 -1
- package/dist/register.js +4 -4
- package/dist/seletor-mapa-base.cjs +13 -13
- package/dist/seletor-mapa-base.js +101 -51
- package/dist/svg-seguro-BsbNQqpd.js +50 -0
- package/dist/svg-seguro-C76iLlAZ.cjs +1 -0
- package/dist/tabela.cjs +1 -1
- package/dist/tabela.js +41 -36
- package/dist/tipos-elementos.d.ts +26 -7
- package/dist/tipos-vue.d.ts +24 -7
- package/dist/tools.cjs +1 -1
- package/dist/tools.js +1 -1
- package/dist/ui-botao-BOOnP8ds.cjs +12 -0
- package/dist/ui-botao-DfqSivHl.js +165 -0
- package/dist/{ui-paleta-ferramentas-BIytXQLh.js → ui-paleta-ferramentas-CEZYcN4J.js} +18 -27
- package/dist/{ui-paleta-ferramentas-DqLY51qa.cjs → ui-paleta-ferramentas-Dbj1kBS9.cjs} +6 -6
- package/dist/{ui-switch-DWLgVVnT.js → ui-switch-BcOqOkiV.js} +124 -96
- package/dist/ui-switch-D7iPKDj-.cjs +53 -0
- package/dist/ui-tabela-propriedades-BBr5sqki.cjs +145 -0
- package/dist/{ui-tabela-propriedades-BNcE6VLX.js → ui-tabela-propriedades-Boy7I5yW.js} +1304 -1072
- package/package.json +169 -169
- package/dist/leaflet-Cw6tqYFh.cjs +0 -1
- package/dist/ui-switch-yZIn3IW0.cjs +0 -53
- package/dist/ui-tabela-propriedades-D3pyQvyy.cjs +0 -145
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { Feicao, LatLonPar } from './feature_types';
|
|
3
|
+
import { QualAlca } from './feature_edicao_ops';
|
|
4
|
+
import { ResultadoSnap } from './feature_snap';
|
|
5
|
+
export declare const ID_HUD_EDICAO = "cm-vertex-edit-hud";
|
|
6
|
+
export interface DependenciasEditor {
|
|
7
|
+
map: L.Map;
|
|
8
|
+
/** Snap para a posição do cursor, ignorando o vértice em arrasto. Já considera se o snap está ligado. */
|
|
9
|
+
buscarSnap: (coord: LatLonPar, excluir: {
|
|
10
|
+
feicaoId: string;
|
|
11
|
+
camadaId: string;
|
|
12
|
+
vertice?: number;
|
|
13
|
+
}) => ResultadoSnap | null;
|
|
14
|
+
snapLigado: () => boolean;
|
|
15
|
+
alternarSnap: () => void;
|
|
16
|
+
/** Mostra a geometria nova no mapa sem gravar (durante o arrasto). */
|
|
17
|
+
previsualizar: (f: Feicao) => void;
|
|
18
|
+
/** Fim de cada gesto (soltar alça, inserir, excluir): grava a feição. */
|
|
19
|
+
aoGesto: (f: Feicao) => void;
|
|
20
|
+
/** A edição terminou (Concluir, Esc, ou chamada de `parar`). */
|
|
21
|
+
aoEncerrar: (f: Feicao) => void;
|
|
22
|
+
}
|
|
23
|
+
export declare class EditorVertices {
|
|
24
|
+
private dep;
|
|
25
|
+
private feicaoAtual;
|
|
26
|
+
private pts;
|
|
27
|
+
private alcas;
|
|
28
|
+
private fantasmas;
|
|
29
|
+
/** Alças de Bézier (só em feição com curva): marcador + haste até o nó. */
|
|
30
|
+
private alcasBezier;
|
|
31
|
+
private marcadorSnap;
|
|
32
|
+
private hud;
|
|
33
|
+
private grupo;
|
|
34
|
+
constructor(dep: DependenciasEditor);
|
|
35
|
+
get ativo(): boolean;
|
|
36
|
+
get feicao(): Feicao | null;
|
|
37
|
+
iniciar(f: Feicao): void;
|
|
38
|
+
/** Encerra a edição (idempotente). */
|
|
39
|
+
parar(): void;
|
|
40
|
+
/** A feição foi alterada por fora (API): refaz as alças com a geometria nova. */
|
|
41
|
+
sincronizar(f: Feicao): void;
|
|
42
|
+
/** Atualiza o texto "Snap" do HUD quando o snap é ligado/desligado. */
|
|
43
|
+
atualizarSnapNoHud(): void;
|
|
44
|
+
private geometriaAtual;
|
|
45
|
+
private feicaoComPontos;
|
|
46
|
+
private reconstruir;
|
|
47
|
+
private icone;
|
|
48
|
+
private criarAlca;
|
|
49
|
+
private criarAlcasBezier;
|
|
50
|
+
/** Cria os marcadores das alças do nó que ainda não têm (ex.: a oposta que nasceu ao arrastar com simetria). */
|
|
51
|
+
private completarAlcasDoNo;
|
|
52
|
+
/** Reposiciona marcadores e hastes de todas as alças conforme a geometria atual. */
|
|
53
|
+
private sincronizarAlcasBezier;
|
|
54
|
+
private aoArrastarAlca;
|
|
55
|
+
private alternarSuave;
|
|
56
|
+
private criarFantasma;
|
|
57
|
+
private aoArrastar;
|
|
58
|
+
/** Durante o arrasto de um nó, as alças dele acompanham (a geometria só é gravada no fim do gesto). */
|
|
59
|
+
private atualizarAlcasDoNo;
|
|
60
|
+
private inserir;
|
|
61
|
+
private confirmar;
|
|
62
|
+
private excluir;
|
|
63
|
+
/** Atalho para testes/API: mesma operação do botão direito. */
|
|
64
|
+
excluirVertice(indice: number): boolean;
|
|
65
|
+
inserirVerticeApos(indice: number): void;
|
|
66
|
+
private mostrarSnap;
|
|
67
|
+
private esconderSnap;
|
|
68
|
+
private montarHud;
|
|
69
|
+
private atualizarHud;
|
|
70
|
+
/** Para os testes: posição atual dos vértices. */
|
|
71
|
+
vertices(): LatLonPar[];
|
|
72
|
+
/** Para os testes: quantas alças de Bézier estão na tela. */
|
|
73
|
+
get totalAlcasBezier(): number;
|
|
74
|
+
/** Para os testes/API: arrasta uma alça do nó `indice` até `coord` (`independente` = Shift). */
|
|
75
|
+
arrastarAlcaPara(indice: number, qual: QualAlca, coord: LatLonPar, independente?: boolean): void;
|
|
76
|
+
/** Para os testes/API: mesma operação do duplo clique no nó. */
|
|
77
|
+
alternarSuavidadeDoNo(indice: number): void;
|
|
78
|
+
/** Para os testes: move um vértice como se a alça tivesse sido arrastada até `coord`. */
|
|
79
|
+
arrastarPara(indice: number, coord: LatLonPar): void;
|
|
80
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { LatLonPar } from './feature_types';
|
|
2
|
+
/** Elipse inscrita na caixa definida pelo centro e pelo canto; vazia se os dois raios são zero. */
|
|
3
|
+
export declare function gerarElipse(centro: LatLonPar, borda: LatLonPar): LatLonPar[] | null;
|
|
4
|
+
/** Polígono regular (padrão: hexágono) com um vértice em `borda`. */
|
|
5
|
+
export declare function gerarPoligonoRegular(centro: LatLonPar, borda: LatLonPar, lados?: number): LatLonPar[] | null;
|
|
6
|
+
/** Estrela (padrão: 5 pontas); `borda` define o raio externo e a rotação. */
|
|
7
|
+
export declare function gerarEstrela(centro: LatLonPar, borda: LatLonPar, pontas?: number): LatLonPar[] | null;
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export interface MargensHud {
|
|
2
|
+
topo: number;
|
|
3
|
+
base: number;
|
|
4
|
+
esquerda: number;
|
|
5
|
+
direita: number;
|
|
6
|
+
}
|
|
7
|
+
export declare const MARGEM_HUD_PADRAO: MargensHud;
|
|
8
|
+
/** Folga mínima entre o HUD e as bordas da área visível (px). */
|
|
9
|
+
export declare const FOLGA_HUD = 16;
|
|
10
|
+
/** Parte da largura do mapa que o HUD pode ocupar, no máximo. */
|
|
11
|
+
export declare const FRACAO_LARGURA_HUD = 0.92;
|
|
12
|
+
export declare const PROPRIEDADES_HUD: Record<keyof MargensHud, string>;
|
|
13
|
+
/** Posicionamento comum aos dois HUDs. Equivale a `posicaoHud`. */
|
|
14
|
+
export declare const CSS_POSICAO_HUD: string;
|
|
15
|
+
/** Mesma conta do CSS, em número: serve de referência para os testes e para quem posiciona algo junto do HUD. */
|
|
16
|
+
export declare function posicaoHud(largura: number, altura: number, margens?: Partial<MargensHud>): {
|
|
17
|
+
centroX: number;
|
|
18
|
+
base: number;
|
|
19
|
+
larguraMax: number;
|
|
20
|
+
alturaMax: number;
|
|
21
|
+
};
|
|
22
|
+
/** Grava (ou, para chaves ausentes/inválidas, remove) as margens no conteiner do mapa. */
|
|
23
|
+
export declare function aplicarMargensHud(conteiner: HTMLElement, margens: Partial<MargensHud>): void;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { Feicao } from './feature_types';
|
|
2
|
+
/** Envelope em graus: [oeste, sul, leste, norte] (x = lon, y = lat). */
|
|
3
|
+
export interface CaixaGeo {
|
|
4
|
+
minLon: number;
|
|
5
|
+
minLat: number;
|
|
6
|
+
maxLon: number;
|
|
7
|
+
maxLat: number;
|
|
8
|
+
}
|
|
9
|
+
export interface ItemIndice extends CaixaGeo {
|
|
10
|
+
id: string;
|
|
11
|
+
}
|
|
12
|
+
export declare function caixaDaFeicao(f: Feicao): CaixaGeo;
|
|
13
|
+
export declare function caixasSeTocam(a: CaixaGeo, b: CaixaGeo): boolean;
|
|
14
|
+
export declare class IndiceEspacial {
|
|
15
|
+
private raiz;
|
|
16
|
+
/** Itens vivos: a fonte da verdade (a árvore pode conter itens já removidos/atualizados). */
|
|
17
|
+
private itens;
|
|
18
|
+
/** Itens que entraram ou mudaram depois da última montagem. */
|
|
19
|
+
private delta;
|
|
20
|
+
/** Ids que estão na árvore mas foram removidos ou substituídos. */
|
|
21
|
+
private obsoletos;
|
|
22
|
+
get tamanho(): number;
|
|
23
|
+
construir(feicoes: Feicao[]): void;
|
|
24
|
+
inserir(f: Feicao): void;
|
|
25
|
+
/** Insere ou substitui; feição `excluida` sai do índice. */
|
|
26
|
+
atualizar(f: Feicao): void;
|
|
27
|
+
remover(id: string): void;
|
|
28
|
+
limpar(): void;
|
|
29
|
+
/** Ids das feições cujo envelope toca `caixa`. */
|
|
30
|
+
consultar(caixa: CaixaGeo): string[];
|
|
31
|
+
intersecta(caixa: CaixaGeo): boolean;
|
|
32
|
+
/** Envelope da feição indexada, se houver. */
|
|
33
|
+
caixaDe(id: string): CaixaGeo | undefined;
|
|
34
|
+
private compactarSeNecessario;
|
|
35
|
+
private remontar;
|
|
36
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { Feicao, GeometriaFeicao, LatLonPar } from './feature_types';
|
|
2
|
+
export declare function distanciaMetros(a: LatLonPar, b: LatLonPar): number;
|
|
3
|
+
export declare function comprimentoMetros(pts: LatLonPar[], fechado?: boolean): number;
|
|
4
|
+
/** Área (m²) do polígono, descontando os furos. */
|
|
5
|
+
export declare function areaMetros2(aneis: LatLonPar[][]): number;
|
|
6
|
+
export declare function formatarArea(m2: number): string;
|
|
7
|
+
export declare function formatarExtensao(m: number): string;
|
|
8
|
+
export declare function areaDaGeometria(g: GeometriaFeicao): number | null;
|
|
9
|
+
export declare function extensaoDaGeometria(g: GeometriaFeicao): number | null;
|
|
10
|
+
/**
|
|
11
|
+
* Texto do rótulo permanente. `campo` pode ser `area`, `extensao`, `id` ou qualquer chave de
|
|
12
|
+
* `propriedades` (name, category, description...). Sem campo: nome, senão id.
|
|
13
|
+
*/
|
|
14
|
+
export declare function textoRotulo(f: Feicao, campo?: string): string;
|
|
15
|
+
/** Envelope [[sul, oeste], [norte, leste]] da geometria. */
|
|
16
|
+
export declare function limitesDaGeometria(g: GeometriaFeicao): [LatLonPar, LatLonPar];
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CanvasLayerDef } from './types';
|
|
3
|
+
import { Feicao, LatLonPar } from './feature_types';
|
|
4
|
+
export type AcaoFeicao = 'inspecionar' | 'zoom' | 'vertices' | 'copiar';
|
|
5
|
+
export interface MargensPopup {
|
|
6
|
+
topo: number;
|
|
7
|
+
base: number;
|
|
8
|
+
esquerda: number;
|
|
9
|
+
direita: number;
|
|
10
|
+
}
|
|
11
|
+
export declare function coordenadaDeReferencia(f: Feicao): LatLonPar;
|
|
12
|
+
export interface DependenciasPopup {
|
|
13
|
+
obterMapa: () => L.Map | null;
|
|
14
|
+
obterCamada: (camadaId: string) => CanvasLayerDef | undefined;
|
|
15
|
+
aoAcao: (acao: AcaoFeicao, feicao: Feicao) => void;
|
|
16
|
+
}
|
|
17
|
+
export declare class FeicaoPopup {
|
|
18
|
+
private dep;
|
|
19
|
+
private popup;
|
|
20
|
+
private feicaoAtual;
|
|
21
|
+
private margens;
|
|
22
|
+
constructor(dep: DependenciasPopup);
|
|
23
|
+
/** Afasta o auto-pan de barras, tabelas e painéis laterais sobrepostos ao mapa. */
|
|
24
|
+
definirMargens(m: Partial<MargensPopup>): void;
|
|
25
|
+
get aberto(): Feicao | null;
|
|
26
|
+
abrir(f: Feicao): void;
|
|
27
|
+
/** Reconstrói o conteúdo se a feição aberta mudou (estilo, propriedades, geometria). */
|
|
28
|
+
atualizar(f: Feicao): void;
|
|
29
|
+
fechar(): void;
|
|
30
|
+
private montar;
|
|
31
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Feicao } from './feature_types';
|
|
2
|
+
export interface RefFeicao {
|
|
3
|
+
camadaId: string;
|
|
4
|
+
id: string;
|
|
5
|
+
}
|
|
6
|
+
interface Dependencias {
|
|
7
|
+
obterFeicao: (ref: RefFeicao) => Feicao | undefined;
|
|
8
|
+
/** Aplica o visual: `ids` são todas as feições selecionadas daquela camada (vazio = nenhuma). */
|
|
9
|
+
aplicarVisual: (camadaId: string, ids: Set<string>) => void;
|
|
10
|
+
aoSelecionar: (feicoes: Feicao[]) => void;
|
|
11
|
+
aoSelecionarUma: (feicao: Feicao | null) => void;
|
|
12
|
+
/** Feição escondida (ex.: prévia oculta) deixa de poder ficar selecionada. */
|
|
13
|
+
visivel?: (feicao: Feicao) => boolean;
|
|
14
|
+
/** Feição que nunca pode ser selecionada (ex.: oculta), nem por referência explícita. */
|
|
15
|
+
selecionavel?: (feicao: Feicao) => boolean;
|
|
16
|
+
}
|
|
17
|
+
export declare class SelecaoFeicoes {
|
|
18
|
+
private dep;
|
|
19
|
+
private itens;
|
|
20
|
+
constructor(dep: Dependencias);
|
|
21
|
+
get quantidade(): number;
|
|
22
|
+
contem(ref: RefFeicao): boolean;
|
|
23
|
+
obter(): Feicao[];
|
|
24
|
+
/** Seleciona as feições; sem `aditivo`, substitui a seleção atual. */
|
|
25
|
+
selecionar(refs: RefFeicao[], aditivo?: boolean): void;
|
|
26
|
+
/** Alterna uma feição na seleção (Ctrl/Shift+clique). */
|
|
27
|
+
alternar(ref: RefFeicao): void;
|
|
28
|
+
/** Alterna várias de uma vez (caixa de seleção com Ctrl). */
|
|
29
|
+
alternarVarias(refs: RefFeicao[]): void;
|
|
30
|
+
/** A feição existe e pode ser selecionada? */
|
|
31
|
+
private alcancavel;
|
|
32
|
+
limpar(): void;
|
|
33
|
+
/** Descarta da seleção o que deixou de existir (removida, excluída, camada sumiu). */
|
|
34
|
+
reconciliar(): void;
|
|
35
|
+
private assinatura;
|
|
36
|
+
private finalizar;
|
|
37
|
+
}
|
|
38
|
+
export {};
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { GeometriaFeicao, LatLonPar } from './feature_types';
|
|
2
|
+
/** A partir deste zoom a geometria é desenhada completa. */
|
|
3
|
+
export declare const ZOOM_SEM_SIMPLIFICACAO = 12;
|
|
4
|
+
/** Geometrias com menos vértices que isto não valem o custo. */
|
|
5
|
+
export declare const MIN_VERTICES_SIMPLIFICAR = 40;
|
|
6
|
+
/** Tolerância em graus para o zoom; 0 = sem simplificar. */
|
|
7
|
+
export declare function toleranciaPorZoom(zoom: number): number;
|
|
8
|
+
/** Douglas-Peucker iterativo (sem recursão: linhas com centenas de milhares de vértices). */
|
|
9
|
+
export declare function simplificarLinha(pts: LatLonPar[], tolerancia: number): LatLonPar[];
|
|
10
|
+
/** Anel aberto: mantém pelo menos 3 vértices (senão volta o original). */
|
|
11
|
+
export declare function simplificarAnel(anel: LatLonPar[], tolerancia: number): LatLonPar[];
|
|
12
|
+
/** Curvas não se simplificam: os vértices de apoio só medem, o desenho é calculado a partir dos nós. */
|
|
13
|
+
export declare function vertices(g: GeometriaFeicao): number;
|
|
14
|
+
/** Geometria para desenho no zoom dado; devolve a própria `g` quando não há o que simplificar. */
|
|
15
|
+
export declare function simplificarGeometria(g: GeometriaFeicao, zoom: number): GeometriaFeicao;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { Feicao, LatLonPar } from './feature_types';
|
|
2
|
+
import { PontoPx, Projetor } from './feature_caixa';
|
|
3
|
+
export type TipoSnap = 'vertice' | 'meio' | 'aresta';
|
|
4
|
+
export interface ResultadoSnap {
|
|
5
|
+
tipo: TipoSnap;
|
|
6
|
+
coordenada: LatLonPar;
|
|
7
|
+
feicaoId: string;
|
|
8
|
+
camadaId: string;
|
|
9
|
+
/** Distância (px) entre o cursor e o ponto de snap. */
|
|
10
|
+
distanciaPx: number;
|
|
11
|
+
}
|
|
12
|
+
export interface OpcoesSnap {
|
|
13
|
+
toleranciaPx?: number;
|
|
14
|
+
vertice?: boolean;
|
|
15
|
+
meio?: boolean;
|
|
16
|
+
aresta?: boolean;
|
|
17
|
+
}
|
|
18
|
+
export interface ExcluirSnap {
|
|
19
|
+
feicaoId: string;
|
|
20
|
+
camadaId?: string;
|
|
21
|
+
/** Vértice em arrasto: ele e os segmentos que o tocam não atraem. */
|
|
22
|
+
vertice?: number;
|
|
23
|
+
}
|
|
24
|
+
export declare const TOLERANCIA_SNAP_PX = 10;
|
|
25
|
+
export declare function buscarSnap(cursor: PontoPx, candidatas: Feicao[], projetar: Projetor, opcoes?: OpcoesSnap, excluir?: ExcluirSnap): ResultadoSnap | null;
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
export type TipoFeicao = 'Point' | 'LineString' | 'Polygon' | 'Circle' | 'Text';
|
|
2
|
+
export type StatusGeometria = 'oficial' | 'previa';
|
|
3
|
+
/** [lat, lon] */
|
|
4
|
+
export type LatLonPar = [number, number];
|
|
5
|
+
/**
|
|
6
|
+
* Nó de uma curva de Bézier cúbica; `entrada`/`saida` são as alças em coordenadas absolutas (sem alça = canto).
|
|
7
|
+
* Na linha e no polígono, `curva` é a fonte do desenho e `coordenadas`/`aneis` guardam os vértices amostrados
|
|
8
|
+
* sobre ela, que alimentam métricas, snap e seleção. Veja `feature_curvas.ts`.
|
|
9
|
+
*/
|
|
10
|
+
export interface NoCurva {
|
|
11
|
+
ponto: LatLonPar;
|
|
12
|
+
entrada?: LatLonPar;
|
|
13
|
+
saida?: LatLonPar;
|
|
14
|
+
}
|
|
15
|
+
export type GeometriaFeicao = {
|
|
16
|
+
tipo: 'Point';
|
|
17
|
+
coordenada: LatLonPar;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Linha. Multiparte (MultiLineString): `partes` traz todas (2 ou mais) e `coordenadas` repete a primeira, de modo que
|
|
21
|
+
* quem só conhece `coordenadas` continua vendo uma linha válida. Use `partesDaLinha` para ler sempre todas as partes.
|
|
22
|
+
*/
|
|
23
|
+
| {
|
|
24
|
+
tipo: 'LineString';
|
|
25
|
+
coordenadas: LatLonPar[];
|
|
26
|
+
partes?: LatLonPar[][];
|
|
27
|
+
curva?: NoCurva[];
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* O primeiro anel é o externo; os demais são furos. Anéis ficam abertos (sem repetir o primeiro vértice).
|
|
31
|
+
* `curva` (só com um anel) descreve o contorno como Bézier fechada; `aneis[0]` guarda os vértices de apoio.
|
|
32
|
+
*/
|
|
33
|
+
| {
|
|
34
|
+
tipo: 'Polygon';
|
|
35
|
+
aneis: LatLonPar[][];
|
|
36
|
+
curva?: NoCurva[];
|
|
37
|
+
} | {
|
|
38
|
+
tipo: 'Circle';
|
|
39
|
+
centro: LatLonPar;
|
|
40
|
+
raioMetros: number;
|
|
41
|
+
} | {
|
|
42
|
+
tipo: 'Text';
|
|
43
|
+
coordenada: LatLonPar;
|
|
44
|
+
texto: string;
|
|
45
|
+
};
|
|
46
|
+
export type GeometriaLinha = Extract<GeometriaFeicao, {
|
|
47
|
+
tipo: 'LineString';
|
|
48
|
+
}>;
|
|
49
|
+
/** Todas as partes da linha (uma só quando é simples). */
|
|
50
|
+
export declare function partesDaLinha(g: GeometriaLinha): LatLonPar[][];
|
|
51
|
+
export declare function ehMultilinha(g: GeometriaFeicao): boolean;
|
|
52
|
+
/** Monta a linha a partir das partes já válidas: uma parte vira linha simples; duas ou mais, multiparte. */
|
|
53
|
+
export declare function criarLinha(partes: LatLonPar[][]): GeometriaLinha;
|
|
54
|
+
export interface EstiloFeicao {
|
|
55
|
+
corPreenchimento?: string;
|
|
56
|
+
opacidadePreenchimento?: number;
|
|
57
|
+
corTraco?: string;
|
|
58
|
+
espessuraTraco?: number;
|
|
59
|
+
dashArray?: string;
|
|
60
|
+
icone?: string;
|
|
61
|
+
tamanhoIcone?: number;
|
|
62
|
+
rotacaoIcone?: number;
|
|
63
|
+
mostrarRotulo?: boolean;
|
|
64
|
+
campoRotulo?: string;
|
|
65
|
+
/** Texto: contorno claro/escuro em volta para legibilidade sobre o satélite. */
|
|
66
|
+
halo?: boolean;
|
|
67
|
+
/** Texto: tamanho da fonte em px. */
|
|
68
|
+
tamanhoFonte?: number;
|
|
69
|
+
/** Texto: cor do fundo do selo (etiqueta). Com ela, o selo substitui o `halo`. Só hex, rgb/hsl ou nome de cor. */
|
|
70
|
+
corFundo?: string;
|
|
71
|
+
/** Texto: cor da borda do selo (1 px). */
|
|
72
|
+
corBorda?: string;
|
|
73
|
+
/** Texto: opacidade do fundo do selo, de 0 a 1 (padrão 0,85); a borda e o texto ficam opacos. */
|
|
74
|
+
opacidadeFundo?: number;
|
|
75
|
+
/** Texto: raio dos cantos do selo em px (padrão 4). */
|
|
76
|
+
raioBorda?: number;
|
|
77
|
+
/** Ponto sem ícone: cor do contorno, separada do preenchimento (`corPreenchimento`) e de `corTraco`. */
|
|
78
|
+
corContorno?: string;
|
|
79
|
+
/** Ponto sem ícone: espessura do contorno em px (0 = sem contorno). */
|
|
80
|
+
espessuraContorno?: number;
|
|
81
|
+
}
|
|
82
|
+
export interface Feicao {
|
|
83
|
+
id: string;
|
|
84
|
+
camadaId: string;
|
|
85
|
+
geometria: GeometriaFeicao;
|
|
86
|
+
estilo?: EstiloFeicao;
|
|
87
|
+
propriedades: Record<string, unknown>;
|
|
88
|
+
bloqueada?: boolean;
|
|
89
|
+
/** Oficial ou prévia; ver `feature_versoes.ts` (também lido de `propriedades.status`/`tipo_geometria`). */
|
|
90
|
+
status?: StatusGeometria;
|
|
91
|
+
/** Agrupa a geometria oficial e as prévias da mesma coisa. Sem isto, a feição é a própria entidade. */
|
|
92
|
+
entidadeId?: string;
|
|
93
|
+
/** Foi removida: some de tudo (desenho, seleção, snap, versões) e encerra edição/popup. */
|
|
94
|
+
excluida?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Oculta, mas existe: não é desenhada nem selecionada (clique, caixa, laço, hit-test, hover) e não atrai snap,
|
|
97
|
+
* não entra em `ajustarTudo`; segue nos dados (`obterFeicoes`, atualizações), não encerra edição e conta na
|
|
98
|
+
* regra oficial × prévia como qualquer outra.
|
|
99
|
+
*/
|
|
100
|
+
oculta?: boolean;
|
|
101
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Feicao, StatusGeometria } from './feature_types';
|
|
2
|
+
/** Status da feição: o campo `status`; senão `propriedades.status` ou `propriedades.tipo_geometria`; senão oficial. */
|
|
3
|
+
export declare function statusDe(f: Feicao): StatusGeometria;
|
|
4
|
+
/** Identificador da entidade a que a geometria pertence. */
|
|
5
|
+
export declare function entidadeDe(f: Feicao): string;
|
|
6
|
+
export declare class RegraVersoes {
|
|
7
|
+
/** Mostra as prévias de todas as entidades. */
|
|
8
|
+
global: boolean;
|
|
9
|
+
private individuais;
|
|
10
|
+
alternarIndividual(camadaId: string, entidade: string): boolean;
|
|
11
|
+
definirIndividual(camadaId: string, entidade: string, ativa: boolean): void;
|
|
12
|
+
individualAtiva(camadaId: string, entidade: string): boolean;
|
|
13
|
+
/** Entidades da camada que têm geometria oficial. */
|
|
14
|
+
static oficiais(feicoes: Iterable<Feicao>): Set<string>;
|
|
15
|
+
/** A feição aparece? `comOficial` = entidades da camada com geometria oficial (ver `oficiais`). */
|
|
16
|
+
visivel(f: Feicao, comOficial: Set<string>): boolean;
|
|
17
|
+
/** A prévia está sendo mostrada por pedido (global ou individual), e não só por falta de oficial? */
|
|
18
|
+
previaSolicitada(f: Feicao): boolean;
|
|
19
|
+
}
|
|
@@ -9,9 +9,30 @@ export * from './renderers/vector_lines_renderer';
|
|
|
9
9
|
export * from './renderers/vector_points_renderer';
|
|
10
10
|
export * from './renderers/vector_polygons_renderer';
|
|
11
11
|
export * from './renderers/grid_renderer';
|
|
12
|
+
export * from './renderers/feicoes_renderer';
|
|
13
|
+
export * from './feature_metricas';
|
|
14
|
+
export * from './layer_hit_test';
|
|
15
|
+
export * from './feature_caixa';
|
|
16
|
+
export * from './feature_selecao';
|
|
17
|
+
export * from './feature_popup';
|
|
18
|
+
export * from './feature_indice';
|
|
19
|
+
export * from './feature_simplificacao';
|
|
20
|
+
export * from './feature_cluster';
|
|
21
|
+
export * from './feature_edicao_ops';
|
|
22
|
+
export * from './feature_snap';
|
|
23
|
+
export * from './feature_editor_vertices';
|
|
24
|
+
export * from './feature_algoritmos';
|
|
25
|
+
export * from './feature_desenho';
|
|
26
|
+
export * from './feature_desenho_controle';
|
|
27
|
+
export * from './feature_amostra';
|
|
28
|
+
export * from './feature_versoes';
|
|
29
|
+
export * from './feature_cursores';
|
|
30
|
+
export * from './feature_hud';
|
|
12
31
|
export * from './layer_manager';
|
|
13
32
|
export * from './mapa_core';
|
|
14
33
|
export * from './mapa_linhas';
|
|
15
34
|
export * from './mapa_marcadores';
|
|
16
35
|
export * from './canvas_interacao';
|
|
17
36
|
export * from './mapa_controller';
|
|
37
|
+
export * from './feature_types';
|
|
38
|
+
export * from './feature_adapters';
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { CanvasLayerDef } from './types';
|
|
3
|
+
import { TipoGeometriaPane } from './layer_pane_ops';
|
|
4
|
+
/** Tolerância (px) somada à espessura do traço. */
|
|
5
|
+
export declare const TOLERANCIA_LINHA_PX = 6;
|
|
6
|
+
export declare const TOLERANCIA_PONTO_PX = 4;
|
|
7
|
+
/** Desliga o pointer-events dos canvases de pane (markers DOM e popups não são afetados). */
|
|
8
|
+
export declare function garantirCanvasSemEventos(container: HTMLElement): void;
|
|
9
|
+
/** Feição candidata sob o cursor, já ordenada por prioridade. */
|
|
10
|
+
export interface CandidatoHit {
|
|
11
|
+
camada: CanvasLayerDef;
|
|
12
|
+
tipo: TipoGeometriaPane;
|
|
13
|
+
alvo: L.Layer;
|
|
14
|
+
/** Distância (px) ao traço/centro; 0 quando o ponto cai dentro de uma área. */
|
|
15
|
+
distancia: number;
|
|
16
|
+
/** Área do envelope em px²; só usada para desempatar áreas. */
|
|
17
|
+
area: number;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Todas as feições sob o ponto, na ordem em que um clique deve escolhê-las
|
|
21
|
+
* (a primeira é a que o clique simples seleciona). Serve também para hover, menu de contexto e conta-gotas.
|
|
22
|
+
*/
|
|
23
|
+
export declare function consultarFeicoesNoPonto(map: L.Map, camadas: CanvasLayerDef[], ponto: L.Point): CandidatoHit[];
|
|
24
|
+
/**
|
|
25
|
+
* Resolve o clique entre todas as camadas, da mais alta para a mais baixa.
|
|
26
|
+
* Dispara o evento só na feição vencedora e devolve `true` se houve acerto.
|
|
27
|
+
*/
|
|
28
|
+
export declare function resolverCliqueCentral(map: L.Map, camadas: CanvasLayerDef[], e: MouseEvent): boolean;
|
|
29
|
+
/** Feição do topo sob o evento (sem alternar): hover, menu de contexto, conta-gotas. */
|
|
30
|
+
export declare function feicaoNoTopo(map: L.Map, camadas: CanvasLayerDef[], e: MouseEvent): CandidatoHit | null;
|
|
@@ -1,17 +1,25 @@
|
|
|
1
1
|
import { default as L } from 'leaflet';
|
|
2
2
|
import { CanvasLayerDef, CanvasLayerState, CanvasRenderContext, CanvasGraphicScale } from './types';
|
|
3
|
-
|
|
4
|
-
export { DEFAULT_LAYERS };
|
|
3
|
+
export declare const DEFAULT_LAYERS: CanvasLayerDef[];
|
|
5
4
|
export declare class CanvasLayerManager {
|
|
6
5
|
private layers;
|
|
7
6
|
private layerInstances;
|
|
8
7
|
private map;
|
|
9
8
|
private context;
|
|
10
9
|
private listeners;
|
|
10
|
+
private renderPendente;
|
|
11
11
|
constructor(initialLayers?: CanvasLayerDef[]);
|
|
12
|
+
/**
|
|
13
|
+
* Remove as camadas que o kit traz de fábrica (satélite, SIGEF, homologados, perímetro, vizinhos, vértices, grade).
|
|
14
|
+
* Só vale antes de o mapa ser anexado: depois disso as instâncias já existem. Camadas criadas pelo consumidor ficam.
|
|
15
|
+
*/
|
|
16
|
+
descartarCamadasPadrao(): void;
|
|
12
17
|
attachMap(map: L.Map, context: CanvasRenderContext): void;
|
|
13
18
|
ensurePanes(): void;
|
|
14
|
-
renderAllLayers(): void;
|
|
19
|
+
renderAllLayers(apenasDependentesDoContexto?: boolean): void;
|
|
20
|
+
/** Executa agora o render agendado por updateContext/setGraphicScale, se houver. */
|
|
21
|
+
flushRender(): void;
|
|
22
|
+
private agendarRender;
|
|
15
23
|
setLayerVisibility(id: string, visivel: boolean): void;
|
|
16
24
|
setLayerOpacity(id: string, opacidade: number): void;
|
|
17
25
|
setLayerZIndex(id: string, zIndex: number): void;
|
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { default as L } from 'leaflet';
|
|
2
2
|
import { CanvasLayerDef } from './types';
|
|
3
3
|
export declare function nomePane(layerId: string): string;
|
|
4
|
+
/**
|
|
5
|
+
* Tipos de geometria de uma camada, do fundo para o topo. Cada um vira um sub-pane aninhado no
|
|
6
|
+
* pane da camada, para polígonos não cobrirem linhas/pontos da mesma camada.
|
|
7
|
+
*/
|
|
8
|
+
export type TipoGeometriaPane = 'poligono' | 'linha' | 'ponto' | 'texto';
|
|
9
|
+
export declare const ORDEM_GEOMETRIA: TipoGeometriaPane[];
|
|
10
|
+
export declare function nomeSubPane(layerId: string, tipo: TipoGeometriaPane): string;
|
|
11
|
+
/** Garante (e devolve o nome de) o sub-pane de um tipo de geometria dentro do pane da camada. */
|
|
12
|
+
export declare function garantirSubPane(map: L.Map, layerId: string, tipo: TipoGeometriaPane): string;
|
|
4
13
|
export declare function garantirPanes(map: L.Map, layers: CanvasLayerDef[]): void;
|
|
5
14
|
export declare function aplicarVisibilidadePane(map: L.Map, layer: CanvasLayerDef): void;
|
|
6
15
|
export declare function aplicarOpacidadePane(map: L.Map, layer: CanvasLayerDef): void;
|
|
@@ -40,6 +40,7 @@ export declare class GerenciGeoMapaController {
|
|
|
40
40
|
importState(state: CanvasLayerState[]): void;
|
|
41
41
|
selectPonto(pId: string | number, zoomLevel?: number): void;
|
|
42
42
|
atualizarDestaqueMarcadores(): void;
|
|
43
|
+
selectSegmento(segmentoId: string | number | null): void;
|
|
43
44
|
fitBounds(pontos?: Ponto[], padding?: [number, number], incluirVizinhos?: boolean): void;
|
|
44
45
|
getMarkers(): L.Marker[];
|
|
45
46
|
getVizinhosMarkers(): L.Marker[];
|
|
@@ -1,8 +1,27 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* Helper para renderizar
|
|
3
|
-
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
2
|
+
* Helper para renderizar marcadores (SVG inline, sem dependência de Tailwind) no Leaflet.
|
|
3
|
+
*
|
|
4
|
+
* Princípios visuais:
|
|
5
|
+
* - Formas nítidas: preenchimento levemente translúcido + contorno escuro fino + aro claro interno,
|
|
6
|
+
* legíveis tanto sobre satélite quanto sobre fundo escuro. Traços com `non-scaling-stroke`
|
|
7
|
+
* (espessura constante em px, independente do tamanho do marcador).
|
|
8
|
+
* - Sem blur/glow: `drop-shadow` e `box-shadow` borrados eram caros em alta densidade e passavam
|
|
9
|
+
* aparência "esfumaçada". O destaque de seleção, como no CAD, escurece o símbolo (cor da camada
|
|
10
|
+
* misturada com preto) e o recorta com contorno claro, sem anéis ao redor.
|
|
11
|
+
* - Alta densidade: modo `compacta` reduz contorno e opacidade, de modo que sobreposições
|
|
12
|
+
* fiquem legíveis (a cor "acumula") em vez de virar uma mancha de contornos escuros.
|
|
6
13
|
*/
|
|
14
|
+
export type DensidadeMarcador = 'normal' | 'compacta';
|
|
15
|
+
export interface OpcoesPontoShape {
|
|
16
|
+
densidade?: DensidadeMarcador;
|
|
17
|
+
}
|
|
18
|
+
/** Acima deste total de pontos na camada, os marcadores passam a usar o modo compacto. */
|
|
19
|
+
export declare const LIMIAR_DENSIDADE_ALTA = 300;
|
|
20
|
+
export declare function modoDensidade(total: number): DensidadeMarcador;
|
|
21
|
+
/**
|
|
22
|
+
* Fator de escala (0.6–1) aplicado ao tamanho dos marcadores em camadas densas.
|
|
23
|
+
* Diminui com o nº de pontos (log) e com o afastamento do zoom, onde os pontos mais se sobrepõem.
|
|
24
|
+
*/
|
|
25
|
+
export declare function fatorDensidade(total: number, zoom: number): number;
|
|
7
26
|
export declare function extrairCorPonto(bgClassOuCor: string): string;
|
|
8
|
-
export declare function getPointShapeHtml(shapeStyle: string, size: number, bgClass: string, extraClasses?: string, id?: string, selecionado?: boolean): string;
|
|
27
|
+
export declare function getPointShapeHtml(shapeStyle: string, size: number, bgClass: string, extraClasses?: string, id?: string, selecionado?: boolean, opcoes?: OpcoesPontoShape): string;
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
import { default as L } from 'leaflet';
|
|
2
|
+
import { ILayerRenderer } from '../layer_renderer_factory';
|
|
3
|
+
import { CanvasLayerDef, CanvasRenderContext } from '../types';
|
|
4
|
+
import { Feicao } from '../feature_types';
|
|
5
|
+
import { CaixaGeo } from '../feature_indice';
|
|
6
|
+
export declare const ICONES_FEICAO: Record<string, string>;
|
|
7
|
+
/** Cores vão para atributos style; só passam formatos conhecidos (hex, rgb/hsl, nome). */
|
|
8
|
+
export declare function corSegura(cor: string | undefined, padrao: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Mudança incremental enviada pelo gerenciador junto com os dados (`dados.delta`). Só vale se `base` for a lista que
|
|
11
|
+
* este renderizador sincronizou por último; senão a camada é reconciliada por inteiro.
|
|
12
|
+
*/
|
|
13
|
+
export interface DeltaFeicoes {
|
|
14
|
+
base: Feicao[];
|
|
15
|
+
/** Feições novas ou trocadas (as `excluida` saem da camada). */
|
|
16
|
+
mudadas: Feicao[];
|
|
17
|
+
removidas: string[];
|
|
18
|
+
}
|
|
19
|
+
type Grupo = L.LayerGroup;
|
|
20
|
+
export declare const COR_SELECAO = "#38bdf8";
|
|
21
|
+
/** Até aqui mantém tudo carregado (sem pop-in); acima, só o que está perto da tela. */
|
|
22
|
+
export declare const LIMITE_CULLING = 300;
|
|
23
|
+
export declare class FeicoesLayerRenderer implements ILayerRenderer {
|
|
24
|
+
private estados;
|
|
25
|
+
/** Por definição de camada (uma por componente), para a seleção sobreviver à recriação do grupo. */
|
|
26
|
+
private selecionadas;
|
|
27
|
+
private tokenLote;
|
|
28
|
+
render(layerDef: CanvasLayerDef, map: L.Map, context: CanvasRenderContext): L.LayerGroup;
|
|
29
|
+
update(layerDef: CanvasLayerDef, layerInstance: L.LayerGroup, changes: Partial<CanvasLayerDef>, context: CanvasRenderContext, map: L.Map): void;
|
|
30
|
+
destroy(layerInstance: L.LayerGroup, map: L.Map): void;
|
|
31
|
+
/** A regra de versões mudou (prévias ligadas/desligadas): recalcula o que aparece. */
|
|
32
|
+
reavaliarVersoes(group: Grupo): void;
|
|
33
|
+
/** A feição aparece segundo a regra de oficial × prévia? */
|
|
34
|
+
feicaoVisivel(group: Grupo, f: Feicao): boolean;
|
|
35
|
+
/** Feições da camada cujo envelope toca `caixa` (para snap e consultas espaciais). */
|
|
36
|
+
consultarProximas(group: Grupo, caixa: CaixaGeo): Feicao[];
|
|
37
|
+
/** Mostra uma geometria provisória (durante um arrasto) sem tocar nos dados nem no índice. */
|
|
38
|
+
previsualizar(group: Grupo, f: Feicao): void;
|
|
39
|
+
/** Para testes e diagnóstico: quantas feições estão materializadas e quantos clusters desenhados. */
|
|
40
|
+
estatisticas(group: Grupo): {
|
|
41
|
+
total: number;
|
|
42
|
+
materializadas: number;
|
|
43
|
+
clusters: number;
|
|
44
|
+
} | null;
|
|
45
|
+
private feicoesDe;
|
|
46
|
+
private obterEstado;
|
|
47
|
+
private sincronizar;
|
|
48
|
+
private recontarOficiais;
|
|
49
|
+
/** Aplica só a diferença. Devolve `false` se o delta não parte da lista sincronizada (então o caminho completo roda). */
|
|
50
|
+
private aplicarDelta;
|
|
51
|
+
/** Há geometria grande demais para o zoom atual? Só então vale redesenhar ao mudar de zoom. */
|
|
52
|
+
private ressimplificar;
|
|
53
|
+
private paraDesenho;
|
|
54
|
+
/** Vai para a tela? Não oculta e visível pela regra oficial × prévia. */
|
|
55
|
+
private desenhavel;
|
|
56
|
+
private estaCarregado;
|
|
57
|
+
private caixaDe;
|
|
58
|
+
/** Cria a camada Leaflet da feição ou remenda a que existe (e só se algo mudou). */
|
|
59
|
+
private materializar;
|
|
60
|
+
private tirarEntrada;
|
|
61
|
+
private colocarCluster;
|
|
62
|
+
private tirarCluster;
|
|
63
|
+
/** O agrupador do zoom atual (reconstruído se os dados-base ou o zoom mudaram) ou `null` se não há agrupamento. */
|
|
64
|
+
private agrupadorAtivo;
|
|
65
|
+
/** Calcula o que deve estar desenhado e ajusta as camadas Leaflet (cria, remenda, remove). */
|
|
66
|
+
private reconciliar;
|
|
67
|
+
/**
|
|
68
|
+
* Reconcilia só o que o delta tocou (o custo não depende do tamanho da camada). Cai no reconcile completo quando
|
|
69
|
+
* o estado de conjunto muda: regra oficial × prévia, entrada/saída do corte por viewport ou do agrupamento.
|
|
70
|
+
*/
|
|
71
|
+
private reconciliarParcial;
|
|
72
|
+
private criarMarcadorCluster;
|
|
73
|
+
/**
|
|
74
|
+
* Marca como selecionadas as feições `ids` deste grupo (as demais voltam ao estilo normal).
|
|
75
|
+
* Só as que mudaram são tocadas; mudanças grandes são aplicadas em blocos, as visíveis primeiro.
|
|
76
|
+
* Pontos selecionados saem dos clusters; ao desmarcar, voltam a ser agrupados.
|
|
77
|
+
*/
|
|
78
|
+
aplicarSelecao(group: Grupo, ids: Set<string>): void;
|
|
79
|
+
private formaDe;
|
|
80
|
+
private paneDe;
|
|
81
|
+
private estiloVetor;
|
|
82
|
+
private criar;
|
|
83
|
+
private remendar;
|
|
84
|
+
private iconeSvg;
|
|
85
|
+
private iconeTexto;
|
|
86
|
+
private aplicarRotulo;
|
|
87
|
+
private ligarEventos;
|
|
88
|
+
}
|
|
89
|
+
export {};
|
|
@@ -4,6 +4,7 @@ import { CanvasLayerDef, CanvasRenderContext } from '../types';
|
|
|
4
4
|
export declare class VectorPointsLayerRenderer implements ILayerRenderer {
|
|
5
5
|
private zoomListenerMap;
|
|
6
6
|
render(layerDef: CanvasLayerDef, map: L.Map, context: CanvasRenderContext): L.LayerGroup;
|
|
7
|
+
private criarIcone;
|
|
7
8
|
private calculateSize;
|
|
8
9
|
private rebuildPoints;
|
|
9
10
|
update(layerDef: CanvasLayerDef, layerInstance: L.LayerGroup, changes: Partial<CanvasLayerDef>, context: CanvasRenderContext, map: L.Map): void;
|