UNPKG

@polygonjs/polygonjs

Version:

node-based WebGL 3D engine https://polygonjs.com

39 lines (38 loc) 1.43 kB
"use strict"; import { Vector3 } from "three"; import { CoreGeometryOperationHexagon } from "../../../geometry/operation/Hexagon"; import { rotateGeometry } from "../../../Transform"; const DIR_ORIGIN = new Vector3(0, 1, 0); const DIR_DEST = new Vector3(0, 0, 1); export class MapboxPlaneHexagonsController { constructor() { } geometry(plane_dimensions, segments_counts, mapboxTransform) { const hexagons_radius = Math.max( plane_dimensions.x / segments_counts.x, plane_dimensions.y / segments_counts.y ); let hexagons_scale_compensate; if (!mapboxTransform) { const new_plane_dimensions = { x: segments_counts.x * hexagons_radius, y: segments_counts.y * hexagons_radius }; hexagons_scale_compensate = new Vector3(1, plane_dimensions.y / new_plane_dimensions.y, 1); plane_dimensions.x = new_plane_dimensions.x; plane_dimensions.y = new_plane_dimensions.y; } const operation = new CoreGeometryOperationHexagon( plane_dimensions, hexagons_radius, true // always as points in the case of hexagons. too complicated otherwise ); const geometry = operation.process(); rotateGeometry(geometry, DIR_ORIGIN, DIR_DEST); if (!mapboxTransform && hexagons_scale_compensate) { geometry.scale(hexagons_scale_compensate.x, hexagons_scale_compensate.y, hexagons_scale_compensate.z); } return geometry; } }