UNPKG

@deck.gl-community/layers

Version:

Add-on layers for deck.gl

59 lines 1.72 kB
// deck.gl-community // SPDX-License-Identifier: MIT // Copyright (c) vis.gl contributors import { Geometry } from '@luma.gl/engine'; export class Arrow2DGeometry extends Geometry { constructor(opts = {}) { super(Object.assign({}, opts, { attributes: getArrowAttributes(opts), topology: 'triangle-list' })); } } function getArrowAttributes({ length = 1, headSize = 0.2, tailWidth = 0.05, tailStart = 0.05 }) { const texCoords = [ // HEAD 0.5, 1.0, 0, 0.5 - headSize / 2, 1.0 - headSize, 0, 0.5 + headSize / 2, 1.0 - headSize, 0, 0.5 - tailWidth / 2, tailStart, 0, 0.5 + tailWidth / 2, 1.0 - headSize, 0, 0.5 + tailWidth / 2, tailStart, 0, 0.5 - tailWidth / 2, tailStart, 0, 0.5 - tailWidth / 2, 1.0 - headSize, 0, 0.5 + tailWidth / 2, 1.0 - headSize, 0 ]; const normals = [0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1, 0, 0, 1]; // Center and scale const positions = new Array(texCoords.length); for (let i = 0; i < texCoords.length / 3; i++) { const i3 = i * 3; positions[i3 + 0] = (texCoords[i3 + 0] - 0.5) * length; positions[i3 + 1] = (texCoords[i3 + 1] - 0.5) * length; positions[i3 + 2] = 0; } return { positions: { size: 3, value: new Float32Array(positions) }, normals: { size: 3, value: new Float32Array(normals) }, texCoords: { size: 2, value: new Float32Array(texCoords) } }; } //# sourceMappingURL=arrow-2d-geometry.js.map