@geogirafe/lib-geoportal
Version:
GeoGirafe is a flexible application to build online geoportals.
198 lines (197 loc) • 6.13 kB
TypeScript
import * as d3 from 'd3';
export type Marker = {
id: string;
label: string;
x: number;
y: number;
u: number;
v: number;
xm: number | null;
ym: number | null;
zm: number | null;
colour: string;
opacity: number;
feature: string;
group: string | null;
show: boolean;
update: boolean;
};
export type Measurement = {
id: string;
label: string;
x: number;
y: number;
u: number;
v: number;
from: string;
to: string;
distance: number;
slope: number;
text: string | null;
};
export interface CursorMoveEvent extends CustomEvent {
detail: {
rangeCoords: [number, number];
domainCoords: [number, number];
};
}
export interface ChangeDomainEvent extends CustomEvent {
detail: {
xDomain: [number, number];
yDomain: [number, number];
};
}
export interface ChangeMarkersEvent extends CustomEvent {
detail: {
markers: Marker[];
};
}
export interface ChangeMeasurementsEvent extends CustomEvent {
detail: {
measurements: Measurement[];
};
}
export declare class Scatterplot {
private readonly vertexShaderSource;
private readonly fragmentShaderSource;
boundingBox: {
xMin: number;
xMax: number;
yMin: number;
yMax: number;
};
pointSize: number;
groupID: string;
measure: boolean;
draw: boolean;
gridVisible: boolean;
backgroundColor: [number, number, number, number];
xGridColor: [number, number, number, number];
yGridColor: [number, number, number, number];
xDomain: [number, number];
yDomain: [number, number];
verticalExaggeration: number;
markers: Marker[];
measurements: Measurement[];
canvasScalingFactor: number;
cx0: number | null;
cy0: number | null;
x0: number;
y0: number;
annotationPadX: number;
annotationPadY: number;
annotationGapY: number;
parent: HTMLDivElement;
canvas: d3.Selection<HTMLCanvasElement, unknown, null, unknown>;
containerSVG: d3.Selection<SVGSVGElement, unknown, null, unknown>;
private readonly margins;
private xy;
private rgb;
private drag;
private measurementsSVG;
private pointsSVG;
private markerLabelBoxesSVG;
private markerLabelsSVG;
private measurementLabelBoxesSVG;
private measurementLabelsSVG;
private zoom;
private xAxis;
private yAxis;
private xGrid;
private yGrid;
private draggedElement;
private cursorMoveEvent;
private domainEvent;
private drawEvent;
private measureEvent;
private gl;
private shaderProgram;
private pointsize_uniform;
private offset_uniform;
private range_uniform;
private matrix_uniform;
private vertex_attrib;
private color_attrib;
private vertexBuffer;
private colorBuffer;
private indexBuffer;
private currentIndex;
constructor(parent: HTMLDivElement, margins: {
left: number;
right: number;
top: number;
bottom: number;
}, xy: Float32Array, rgb: Uint8Array);
private initializeD3;
private initializeWebGL;
private initializeEvents;
get measurementPoints(): Marker[];
get height(): number;
get width(): number;
get innerWidth(): number;
get innerHeight(): number;
get xRange(): [number, number];
get yRange(): [number, number];
get domainWidth(): number;
get domainHeight(): number;
get domainAspectRatio(): number;
get rangeAspectRatio(): number;
get xDomainAdjusted(): [number, number];
get yDomainAdjusted(): [number, number];
get xScale(): d3.ScaleLinear<number, number>;
get yScale(): d3.ScaleLinear<number, number>;
get nPoints(): number;
get zoomTransform(): d3.ZoomTransform;
updateBody(): void;
updateCanvas(): void;
appendAxis(id: string): void;
updateXAxis(): void;
updateYAxis(): void;
updateXGrid(): void;
updateYGrid(): void;
updateBoundingBox(): void;
updatePoints(xy: Float32Array): void;
updateColors(rgb: Uint8Array): void;
updateColorsSlice(slice: Uint8Array, offset: number): void;
updateIndex(index: Uint32Array): void;
updatePaths(): void;
updateMarkers(): void;
appendMarker(id: string, coords: [number, number]): void;
updateMeasurements(): void;
printMeasurementLabel(distance: number, slope: number): string;
updateLabels(): void;
setGridVisibility(val: boolean): void;
setBackgroundColor(val: string): void;
handleZoom(_e: d3.D3ZoomEvent<HTMLCanvasElement, unknown>): void;
setZoom(tf: {
k: number;
tx: number;
ty: number;
}): void;
resetZoom(): void;
getDraggedElement(event: Event): SVGCircleElement;
updateDraggedElements(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
dragstarted(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
dragged(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
dragended(e: d3.D3DragEvent<HTMLElement, Marker, Marker>, _d: Marker): void;
updatePointSize(val: number): void;
updateVerticalExaggeration(val: number): void;
toggleAnnotation(val: boolean): void;
deleteAllMarkers(): void;
deleteMarker(id: string): void;
toggleMeasurement(val: boolean): void;
addMeasurement(id: string): void;
deleteAllMeasurements(): void;
updatePlot(): void;
resetPlot(): void;
generateId(markers: Marker[]): string;
clearGLPoints(): void;
initializeGL(): void;
multiplyMatrix(a: Float32Array, b: Float32Array): Float32Array;
createOrthographic(left: number, right: number, bottom: number, top: number, near: number, far: number): Float32Array;
createTranslation(tx: number, ty: number, tz: number): Float32Array;
createScale(sx: number, sy: number, sz: number): Float32Array;
updateTransform(): void;
GLShader(gl: WebGL2RenderingContext, type: GLenum, code: string): WebGLShader;
GLProgram(gl: WebGL2RenderingContext, vertex_source: string, fragment_source: string): WebGLProgram;
}