@equinor/videx-map
Version:
Component for Pixi-overlay in Leaflet.
95 lines (94 loc) • 3.25 kB
TypeScript
import * as PIXI from 'pixi.js';
import Vector2 from '@equinor/videx-vector2';
import { pixiOverlayBase } from '../pixiOverlayInterfaces';
import { MeshData, MeshNormalData } from '../utils/Mesh';
import GeoJSONLabels from './labels';
import TriangleDictionary from '../utils/TriangleDictionary';
import { FeatureProps, FeatureStyle } from '.';
import { ResizeConfig, LabelResizeConfig } from '../ResizeConfigInterface';
type vec3 = [number, number, number];
interface FillUniform {
col1: vec3;
col2: vec3;
opacity: number;
hashed: boolean;
hashDisp: number;
hashWidth: number;
}
interface OutlineUniform {
color: vec3;
outlineWidth: number;
}
export interface FeatureMesh {
fill: {
mesh: PIXI.Mesh;
uniform: FillUniform;
};
outline: {
mesh: PIXI.Mesh;
uniform: OutlineUniform;
};
}
/** Interface for feature config. */
interface Config {
/** Initial scale of feature hash (Default: 1.0). */
initialHash?: number;
/** Minimum scale of feature hash (Default: 0.0). */
minHash?: number;
/** Maximum scale of feature hash (Default: Infinity). */
maxHash?: number;
/**Label font family, default Arial */
labelFontFamily?: string;
/**Label font size, default 64 */
labelFontSize?: number;
/**Label font weight, default 600 */
labelFontWeight?: string;
/**Label fill color, default 0x454545 */
labelColor?: string | number;
/**Label alignment, default Center */
labelAlign?: string;
/** Resize configuration for outline. */
outlineResize?: ResizeConfig;
/** Resize configuration for labels. */
labelResize?: LabelResizeConfig;
}
/** Container for GeoJSON Polygon features. */
export default class GeoJSONMultiPolygon {
/** Vertex shader for the fill. */
static vertexShaderFill: string;
/** Fragment shader for the fill. */
static fragmentShaderFill: string;
/** Vertex shader for the outlines. */
static vertexShaderOutline: string;
/** Fragment shader for the outlines. */
static fragmentShaderOutline: string;
/** Collection of features with meshes. */
features: FeatureMesh[];
/** Settings for how to render data. */
config: Config;
container: PIXI.Container;
pixiOverlay: pixiOverlayBase;
dict: TriangleDictionary<any>;
textStyle: PIXI.TextStyle;
labels: GeoJSONLabels;
currentZoom: number;
constructor(root: PIXI.Container, labelRoot: PIXI.Container, pixiOverlay: pixiOverlayBase, config?: Config);
add(feature: GeoJSON.Feature, props: (feature: object) => FeatureProps): void;
/**
* Draw each polygon in a polygon collection.
* @param polygons
*/
drawPolygons(container: PIXI.Container, meshData: MeshData, outlineData: MeshNormalData, featureStyle: FeatureStyle, zIndex: number): FeatureMesh;
drawLabels(): void;
/**
* Project a collection of polygons.
* @param points Points within polygons
* @returns Projected polygons
*/
projectPolygons(points: [number, number][]): Vector2[];
resize(zoom: number): void;
testPosition(pos: Vector2): number;
getOutlineRadius(zoom?: number): number;
getLabelSize(zoom?: number): number;
}
export {};