UNPKG

itowns

Version:

A JS/WebGL framework for 3D geospatial data visualization

96 lines (76 loc) 4.4 kB
"use strict"; var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault"); var _typeof = require("@babel/runtime/helpers/typeof"); Object.defineProperty(exports, "__esModule", { value: true }); exports["default"] = void 0; var THREE = _interopRequireWildcard(require("three")); var _TileMesh = _interopRequireDefault(require("../Core/TileMesh")); var _LayeredMaterial = _interopRequireDefault(require("../Renderer/LayeredMaterial")); var _TileBuilder = _interopRequireDefault(require("../Core/Prefab/TileBuilder")); function _getRequireWildcardCache(nodeInterop) { if (typeof WeakMap !== "function") return null; var cacheBabelInterop = new WeakMap(); var cacheNodeInterop = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(nodeInterop) { return nodeInterop ? cacheNodeInterop : cacheBabelInterop; })(nodeInterop); } function _interopRequireWildcard(obj, nodeInterop) { if (!nodeInterop && obj && obj.__esModule) { return obj; } if (obj === null || _typeof(obj) !== "object" && typeof obj !== "function") { return { "default": obj }; } var cache = _getRequireWildcardCache(nodeInterop); if (cache && cache.has(obj)) { return cache.get(obj); } var newObj = {}; var hasPropertyDescriptor = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var key in obj) { if (key !== "default" && Object.prototype.hasOwnProperty.call(obj, key)) { var desc = hasPropertyDescriptor ? Object.getOwnPropertyDescriptor(obj, key) : null; if (desc && (desc.get || desc.set)) { Object.defineProperty(newObj, key, desc); } else { newObj[key] = obj[key]; } } } newObj["default"] = obj; if (cache) { cache.set(obj, newObj); } return newObj; } /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ var dimensions = new THREE.Vector2(); function setTileFromTiledLayer(tile, tileLayer) { tile.material.transparent = tileLayer.opacity < 1.0; tile.material.opacity = tileLayer.opacity; if (tileLayer.diffuse) { tile.material.diffuse = tileLayer.diffuse; } if (tileLayer.isGlobeLayer) { // Computes a point used for horizon culling. // If the point is below the horizon, // the tile is guaranteed to be below the horizon as well. tile.horizonCullingPoint = tile.extent.center().as('EPSG:4978').toVector3(); tile.extent.dimensions(dimensions).multiplyScalar(THREE.MathUtils.DEG2RAD); // alpha is maximum angle between two points of tile var alpha = dimensions.length(); var h = Math.abs(1.0 / Math.cos(alpha * 0.5)); tile.horizonCullingPoint.setLength(h * tile.horizonCullingPoint.length()); tile.horizonCullingPointElevationScaled = tile.horizonCullingPoint.clone(); } } var _default = { convert: function convert(requester, extent, layer) { var builder = layer.builder; var parent = requester; var level = parent !== undefined ? parent.level + 1 : 0; var paramsGeometry = { extent: extent, level: level, segment: layer.segments || 16, disableSkirt: layer.disableSkirt }; return (0, _TileBuilder["default"])(builder, paramsGeometry).then(function (result) { // build tile mesh result.geometry._count++; var crsCount = layer.tileMatrixSets.length; var material = new _LayeredMaterial["default"](layer.materialOptions, crsCount); var tile = new _TileMesh["default"](result.geometry, material, layer, extent, level); // Commented because layer.threejsLayer is undefined; // Fix me: conflict with object3d added in view.scene; // tile.layers.set(layer.threejsLayer); if (parent && parent.isTileMesh) { // get parent extent transformation var pTrans = builder.computeSharableExtent(parent.extent); // place relative to his parent result.position.sub(pTrans.position).applyQuaternion(pTrans.quaternion.invert()); result.quaternion.premultiply(pTrans.quaternion); } tile.position.copy(result.position); tile.quaternion.copy(result.quaternion); tile.visible = false; tile.updateMatrix(); tile.add(tile.obb); setTileFromTiledLayer(tile, layer); if (parent) { tile.setBBoxZ(parent.obb.z.min, parent.obb.z.max); } return tile; }); } }; exports["default"] = _default;