UNPKG

vue-cesium

Version:
122 lines (117 loc) 4.49 kB
'use strict'; Object.defineProperty(exports, '__esModule', { value: true }); var index = require('../use-common/index.js'); var mergeDescriptors = require('../../utils/merge-descriptors.js'); var vue = require('vue'); var config = require('../../utils/config.js'); var vm = require('../../utils/private/vm.js'); require('../../utils/util.js'); var cesiumHelpers = require('../../utils/cesium-helpers.js'); var shared = require('@vue/shared'); "use strict"; function usePrimitives(props, ctx, vcInstance) { const commonState = index["default"](props, ctx, vcInstance); if (commonState === void 0) { return; } const { emit } = ctx; const childCount = vue.ref(0); const instances = vue.ref([]); vcInstance.createCesiumObject = async () => { var _a, _b; const options = commonState.transformProps(props); if (!options.asynchronous) { await ((_b = (_a = Cesium[vcInstance.cesiumClass]).initializeTerrainHeights) == null ? void 0 : _b.call(_a)); } if (props.geometryInstances) { if (shared.isArray(props.geometryInstances)) { instances.value.push(...props.geometryInstances); childCount.value += props.geometryInstances.length; } else { childCount.value += 1; instances.value.push(props.geometryInstances); } } if ((vcInstance.cesiumClass === "Cesium3DTileset" || vcInstance.cesiumClass === "I3SDataProvider") && cesiumHelpers.compareCesiumVersion(Cesium.VERSION, "1.104")) { try { if (Cesium.defined(props.assetId) && vcInstance.cesiumClass === "Cesium3DTileset") { return await Cesium[vcInstance.cesiumClass].fromIonAssetId(props.assetId, options); } else { return await Cesium[vcInstance.cesiumClass].fromUrl(props.url, options); } } catch (error) { commonState.logger.error(`Failed to load tileset: ${error}`); } } else { return new Cesium[vcInstance.cesiumClass](options); } }; vcInstance.mount = async () => { var _a; const primitives = commonState.$services.primitives; const primitive = vcInstance.cesiumObject; (_a = primitive == null ? void 0 : primitive.readyPromise) == null ? void 0 : _a.then((e) => { const listener = vm.getInstanceListener(vcInstance, "readyPromise"); listener && emit("readyPromise", e, commonState.$services.viewer, vcInstance.proxy); }); primitive._vcParent = primitives; const object = primitives && primitives.add(primitive); if (vcInstance.cesiumClass === "ParticleSystem") { const intervalId = setInterval(() => { if (Cesium.defined(object._billboardCollection)) { object._billboardCollection._vcParent = object; clearInterval(intervalId); } }, 500); } return Cesium.defined(object); }; vcInstance.unmount = async () => { childCount.value = 0; instances.value = []; const primitives = commonState.$services.primitives; const primitive = vcInstance.cesiumObject; return primitives && primitives.remove(primitive); }; const updateGeometryInstances = (instance, index) => { instances.value.push(instance); if (index === childCount.value - 1) { const listener = vm.getInstanceListener(vcInstance, "update:geometryInstances"); if (listener) { ctx.emit("update:geometryInstances", instances.value); } else { const primitive = vcInstance.cesiumObject; primitive.geometryInstances = index === 0 ? instance : instances.value; } } return true; }; const removeGeometryInstances = (instance) => { const index = instances.value.indexOf(instance); instances.value.splice(index, 1); return true; }; const getServices = () => { return mergeDescriptors.mergeDescriptors(commonState.getServices(), { get primitive() { return vcInstance.cesiumObject; } }); }; vue.provide(config.vcKey, getServices()); Object.assign(vcInstance.proxy, { // private but needed by VcGeometryInstance __updateGeometryInstances: updateGeometryInstances, __removeGeometryInstances: removeGeometryInstances, __childCount: childCount }); return { transformProps: commonState.transformProps, transformProp: commonState.transformProp, unwatchFns: commonState.unwatchFns, setPropsWatcher: commonState.setPropsWatcher, $services: commonState.$services }; } exports["default"] = usePrimitives; //# sourceMappingURL=index.js.map