@pirireis/webglobeplugins 0.9.9 → 0.9.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/Math/angle-calculation.js +15 -0
- package/Math/arc.js +65 -0
- package/Math/bounds/line-bbox.js +188 -0
- package/Math/constants.js +9 -0
- package/Math/frustum/camera.js +24 -0
- package/Math/frustum/from-globeinfo.js +48 -0
- package/Math/frustum/types.js +2 -0
- package/Math/globe-util/horizon-plane.js +112 -0
- package/Math/index.js +1 -0
- package/Math/juction/arc-plane.js +83 -0
- package/Math/juction/line-sphere.js +25 -0
- package/Math/juction/plane-plane.js +58 -0
- package/Math/line.js +56 -0
- package/Math/matrix4.js +1 -0
- package/Math/methods.js +201 -0
- package/Math/plane.js +60 -0
- package/Math/quaternion.js +104 -0
- package/Math/types.js +2 -0
- package/Math/utils.js +4 -0
- package/Math/vec3.js +126 -0
- package/algorithms/search-binary.js +19 -0
- package/altitude-locator/adaptors.js +1 -0
- package/altitude-locator/draw-subset-obj.js +18 -0
- package/altitude-locator/keymethod.js +1 -0
- package/altitude-locator/plugin.js +341 -0
- package/altitude-locator/types.js +23 -0
- package/arrowfield/adaptor.js +14 -0
- package/arrowfield/index.js +10 -0
- package/arrowfield/plugin.js +86 -0
- package/bearing-line/index.js +8 -0
- package/bearing-line/plugin.js +449 -0
- package/circle-line-chain/chain-list-map.js +205 -0
- package/circle-line-chain/init.js +1 -0
- package/circle-line-chain/plugin.js +424 -0
- package/circle-line-chain/util.js +5 -0
- package/compass-rose/compass-rose-padding-flat.js +225 -0
- package/compass-rose/compass-text-writer.js +153 -0
- package/compass-rose/index.js +7 -0
- package/compassrose/compassrose.js +296 -0
- package/compassrose/index.js +8 -0
- package/globe-types.js +1 -0
- package/heatwave/index.js +10 -0
- package/heatwave/isobar/objectarraylabels.js +202 -0
- package/heatwave/isobar/plugin.js +343 -0
- package/heatwave/isobar/quadtreecontours.js +300 -0
- package/heatwave/plugins/heatwaveglobeshell.js +206 -0
- package/jest.config.js +7 -0
- package/package.json +4 -4
- package/partialrings/buffer-manager.js +81 -0
- package/partialrings/index.js +41 -0
- package/partialrings/plugin.js +135 -0
- package/partialrings/program.js +286 -0
- package/pin/pin-object-array.js +305 -0
- package/pin/pin-point-totem.js +60 -0
- package/point-heat-map/adaptors/timetracksplugin-format-to-this.js +66 -0
- package/point-heat-map/index.js +1 -0
- package/point-heat-map/plugin-webworker.js +126 -0
- package/point-heat-map/point-to-heat-map-flow.js +127 -0
- package/point-tracks/key-methods.js +5 -0
- package/point-tracks/plugin.js +338 -0
- package/programs/arrowfield/index.js +7 -0
- package/programs/arrowfield/logic.js +257 -0
- package/programs/arrowfield/object.js +66 -0
- package/programs/data2legend/density-to-legend.js +101 -0
- package/programs/data2legend/point-to-density-texture.js +100 -0
- package/programs/float2legendwithratio/index.js +8 -0
- package/programs/float2legendwithratio/logic.js +171 -0
- package/programs/float2legendwithratio/object.js +110 -0
- package/programs/globe-util/is-globe-moved.js +21 -0
- package/programs/globeshell/index.js +8 -0
- package/programs/globeshell/noise/noises.js +1 -0
- package/programs/globeshell/wiggle/index.js +8 -0
- package/programs/globeshell/wiggle/logic.js +345 -0
- package/programs/globeshell/wiggle/object.js +72 -0
- package/programs/helpers/blender/index.js +1 -0
- package/programs/helpers/blender/program.js +79 -0
- package/programs/helpers/fadeaway/index.js +7 -0
- package/programs/helpers/fadeaway/logic.js +72 -0
- package/programs/helpers/fadeaway/object.js +20 -0
- package/programs/helpers/index.js +8 -0
- package/programs/index.js +58 -0
- package/programs/interface.js +1 -0
- package/programs/line-on-globe/angled-line.js +176 -0
- package/programs/line-on-globe/circle-accurate-3d.js +141 -0
- package/programs/line-on-globe/circle-accurate-flat.js +216 -0
- package/programs/line-on-globe/circle-accurate.js +178 -0
- package/programs/line-on-globe/circle.js +167 -0
- package/programs/line-on-globe/degree-padding-around-circle-3d.js +159 -0
- package/programs/line-on-globe/index.js +1 -0
- package/programs/line-on-globe/lines-color-instanced-flat.js +136 -0
- package/programs/line-on-globe/linestrip.js +171 -0
- package/programs/line-on-globe/naive-accurate-flexible.js +195 -0
- package/programs/line-on-globe/to-the-surface.js +111 -0
- package/programs/line-on-globe/util.js +8 -0
- package/programs/picking/pickable-renderer.js +188 -0
- package/programs/point-on-globe/element-globe-surface-glow.js +142 -0
- package/programs/point-on-globe/element-point-glow.js +153 -0
- package/programs/point-on-globe/square-pixel-point.js +174 -0
- package/programs/programcache.js +131 -0
- package/programs/rings/distancering/circleflatprogram.js +156 -0
- package/programs/rings/distancering/circlepaddingfreeangleprogram.js +369 -0
- package/programs/rings/distancering/circlepaddysharedbuffer.js +357 -0
- package/programs/rings/distancering/index.js +14 -0
- package/programs/rings/distancering/paddyflatprogram.js +172 -0
- package/programs/rings/distancering/paddyflatprogram2d.js +174 -0
- package/programs/rings/distancering/paddyflatprogram3d.js +172 -0
- package/programs/rings/distancering/shader.js +1 -0
- package/programs/rings/index.js +17 -0
- package/programs/rings/partial-ring/piece-of-pie.js +275 -0
- package/programs/totems/camerauniformblock.js +160 -0
- package/programs/totems/canvas-webglobe-info.js +110 -0
- package/programs/totems/gpu-selection-uniform-block.js +108 -0
- package/programs/totems/index.js +40 -0
- package/programs/two-d/pixel-circle.js +1 -0
- package/programs/two-d/pixel-padding-for-compass.js +162 -0
- package/programs/util.js +17 -0
- package/programs/vectorfields/index.js +23 -0
- package/programs/vectorfields/logics/drawrectangleparticles.js +107 -0
- package/programs/vectorfields/logics/index.js +12 -0
- package/programs/vectorfields/logics/pixelbased.js +142 -0
- package/programs/vectorfields/logics/ubo.js +63 -0
- package/programs/vectorfields/pingpongbuffermanager.js +76 -0
- package/rangerings/enum.js +5 -0
- package/rangerings/index.js +15 -0
- package/rangerings/plugin.js +560 -0
- package/rangerings/rangeringangletext.js +329 -0
- package/rangerings/ring-account.js +117 -0
- package/shaders/fragment-toy/firework.js +58 -0
- package/shaders/fragment-toy/singularity.js +59 -0
- package/shape-on-terrain/arc/naive/plugin.js +252 -0
- package/timetracks/adaptors-line-strip.js +71 -0
- package/timetracks/adaptors.js +122 -0
- package/timetracks/index.js +19 -0
- package/timetracks/plugin-line-strip.js +250 -0
- package/timetracks/plugin.js +258 -0
- package/timetracks/program-line-strip.js +611 -0
- package/timetracks/program.js +772 -0
- package/timetracks/programpoint-line-strip.js +154 -0
- package/timetracks/programpoint.js +147 -0
- package/types.js +15 -0
- package/util/account/bufferoffsetmanager.js +179 -0
- package/util/account/index.js +23 -0
- package/util/account/single-attribute-buffer-management/buffer-manager.js +108 -0
- package/util/account/single-attribute-buffer-management/buffer-orchestrator.js +150 -0
- package/util/account/single-attribute-buffer-management/index.js +9 -0
- package/util/account/single-attribute-buffer-management/object-store.js +51 -0
- package/util/account/single-attribute-buffer-management/types.js +2 -0
- package/util/account/util.js +22 -0
- package/util/algorithms/index.js +1 -0
- package/util/algorithms/search-binary.js +28 -0
- package/util/check/get.js +18 -0
- package/util/check/index.js +1 -0
- package/util/check/typecheck.js +49 -0
- package/util/geometry/index.js +51 -0
- package/util/gl-util/buffer/attribute-loader.js +69 -0
- package/util/gl-util/buffer/index.js +6 -0
- package/util/gl-util/buffer/types.js +1 -0
- package/util/gl-util/draw-options/methods.js +38 -0
- package/util/gl-util/draw-options/types.js +15 -0
- package/util/gl-util/uniform-block/manager.js +156 -0
- package/util/gl-util/uniform-block/shader.js +1 -0
- package/util/gl-util/uniform-block/types.js +8 -0
- package/util/heatwavedatamanager/datamanager.js +152 -0
- package/util/heatwavedatamanager/index.js +10 -0
- package/util/heatwavedatamanager/pointcoordinatesdatacalculator.js +122 -0
- package/util/heatwavedatamanager/pointcoordsmeta.js +20 -0
- package/util/index.js +57 -0
- package/util/interpolation/index.js +1 -0
- package/util/interpolation/timetrack/index.js +5 -0
- package/util/interpolation/timetrack/timetrack-interpolator.js +79 -0
- package/util/interpolation/timetrack/web-worker-str.js +183 -0
- package/util/interpolation/timetrack/web-worker.js +48 -0
- package/util/jshelpers/data-filler.js +20 -0
- package/util/jshelpers/equality.js +20 -0
- package/util/jshelpers/index.js +37 -0
- package/util/jshelpers/timefilters.js +32 -0
- package/util/picking/fence.js +46 -0
- package/util/picking/picker-displayer.js +139 -0
- package/util/programs/draw-texture-on-canvas.js +89 -0
- package/util/programs/index.js +17 -0
- package/util/programs/shapesonglobe.js +214 -0
- package/util/programs/supersampletotextures.js +113 -0
- package/util/programs/texturetoglobe.js +182 -0
- package/util/shaderfunctions/geometrytransformations.js +340 -0
- package/util/shaderfunctions/index.js +18 -0
- package/util/shaderfunctions/nodata.js +11 -0
- package/util/shaderfunctions/noisefunctions.js +43 -0
- package/util/surface-line-data/arc-bboxes.js +25 -0
- package/util/surface-line-data/arcs-to-cuts.js +50 -0
- package/util/surface-line-data/cut-arc.js +1 -0
- package/util/surface-line-data/flow.js +28 -0
- package/util/surface-line-data/rbush-manager.js +1 -0
- package/util/surface-line-data/types.js +1 -0
- package/util/surface-line-data/web-worker.js +1 -0
- package/util/webglobe/gldefaultstates.js +7 -0
- package/util/webglobe/index.js +18 -0
- package/util/webglobe/rasteroverlay.js +78 -0
- package/util/webglobjectbuilders.js +388 -0
- package/util/webglobjectbuilders1.js +237 -0
- package/waveparticles/adaptor.js +17 -0
- package/waveparticles/index.js +10 -0
- package/waveparticles/plugin.js +266 -0
- package/wind/imagetovectorfieldandmagnitude.js +35 -0
- package/wind/index.js +14 -0
- package/wind/plugin.js +926 -0
- package/wind/vectorfieldimage.js +25 -0
- package/write-text/attached-text-writer.js +91 -0
- package/write-text/context-text.js +98 -0
- package/write-text/context-text3.js +155 -0
- package/write-text/index.js +5 -0
- package/write-text/writer-plugin.js +8 -0
|
@@ -0,0 +1,560 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @typedef RangeRingData
|
|
4
|
+
* @property {number} centerX
|
|
5
|
+
* @property {number} centerY
|
|
6
|
+
* @property {Array<Ring>} rings
|
|
7
|
+
*
|
|
8
|
+
* @typedef Ring
|
|
9
|
+
* @property {number} radius
|
|
10
|
+
* @property {number} padding
|
|
11
|
+
* @property {[number, number, number]} color
|
|
12
|
+
*
|
|
13
|
+
*
|
|
14
|
+
* @method insertBulk
|
|
15
|
+
* @typedef {Array<{ringID, radius, padding}>} rings
|
|
16
|
+
* @param {Array<centerID:string, x:number, y:number, stepAngle:number, rgba:[4 numbers], rings:rings} items
|
|
17
|
+
|
|
18
|
+
* @method updateCentersCoordinate @param {Array<{centerID, long,lat}>} items
|
|
19
|
+
* @method updateCentersColor @param {Array<{centerID, rgba:[4 numbers]}>} centerColors
|
|
20
|
+
*
|
|
21
|
+
* @method updateCentersHide @param {Array<{centerID, hide, textHide}>} centerHides
|
|
22
|
+
* @method removeCenters @param {Array<{centerID}>} centerIds
|
|
23
|
+
* @method setOpacity @param {number} opacity
|
|
24
|
+
*
|
|
25
|
+
* @method setOneDegreePaddingOn // performance consuming, might be removed
|
|
26
|
+
*
|
|
27
|
+
*/
|
|
28
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
29
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
30
|
+
};
|
|
31
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
32
|
+
exports.Z_ALPHA_MODE = exports.RangeRings = void 0;
|
|
33
|
+
const circle_accurate_flat_1 = require("../programs/line-on-globe/circle-accurate-flat");
|
|
34
|
+
const circle_accurate_3d_1 = require("../programs/line-on-globe/circle-accurate-3d");
|
|
35
|
+
const lines_color_instanced_flat_1 = require("../programs/line-on-globe/lines-color-instanced-flat");
|
|
36
|
+
const account_1 = require("../util/account");
|
|
37
|
+
const get_1 = require("../util/check/get");
|
|
38
|
+
const data_filler_1 = require("../util/jshelpers/data-filler");
|
|
39
|
+
const ring_account_1 = require("./ring-account");
|
|
40
|
+
const degree_padding_around_circle_3d_1 = require("../programs/line-on-globe/degree-padding-around-circle-3d");
|
|
41
|
+
const naive_accurate_flexible_1 = require("../programs/line-on-globe/naive-accurate-flexible");
|
|
42
|
+
const rangeringangletext_1 = __importDefault(require("./rangeringangletext"));
|
|
43
|
+
const util_1 = require("../programs/line-on-globe/util");
|
|
44
|
+
Object.defineProperty(exports, "Z_ALPHA_MODE", { enumerable: true, get: function () { return util_1.Z_ALPHA_MODE; } });
|
|
45
|
+
const enum_1 = require("./enum");
|
|
46
|
+
const typecheck_1 = require("../util/check/typecheck");
|
|
47
|
+
const geometry_1 = require("../util/geometry");
|
|
48
|
+
const CIRCLE_FLAT_EDGE_COUNT = 362; // 360 + 2 for closing the circle and a cutting point
|
|
49
|
+
const coordOnSphere = (long, lat, globe, altitude = 0) => {
|
|
50
|
+
const coord = globe.api_GetCartesian3DPoint(long, lat, 0, 0);
|
|
51
|
+
return (0, geometry_1.normalize)(coord, 6378.137 + altitude);
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
*
|
|
55
|
+
*
|
|
56
|
+
* @typedef {string} centerID
|
|
57
|
+
*
|
|
58
|
+
* @typedef {Object} RangeRing
|
|
59
|
+
* @property {string} ringID
|
|
60
|
+
* @property {number} radius in range meters
|
|
61
|
+
* @property {number} padding badding range in meter
|
|
62
|
+
*
|
|
63
|
+
*
|
|
64
|
+
* Array < centerID: string, long: number, lat: number, stepAngle: number, rgba: [4 numbers], rings: rings, hide, textHide
|
|
65
|
+
* @typedef {Object} RangeRingsItem
|
|
66
|
+
* @property {centerID} centerID
|
|
67
|
+
* @property {number} long
|
|
68
|
+
* @property {number} lat
|
|
69
|
+
* @property {number} stepAngle
|
|
70
|
+
* @property {number} altitude
|
|
71
|
+
* @property {number} hide
|
|
72
|
+
* @property {number} textHide
|
|
73
|
+
* @property {number} rgba
|
|
74
|
+
* @property {Array<RangeRing>} rings
|
|
75
|
+
*/
|
|
76
|
+
class RangeRings {
|
|
77
|
+
constructor(id, { oneDegreePadding = true, showNumbers = true, numbersStyle = null, opacity = 1, zAlphaOnDegreePadding = util_1.Z_ALPHA_MODE.ON } = {}, { textDataPreAdaptor = null, textWritersMap = new Map() } = {}) {
|
|
78
|
+
this.id = id;
|
|
79
|
+
this._oneDegreePadding = oneDegreePadding;
|
|
80
|
+
this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
|
|
81
|
+
this._showNumbers = showNumbers;
|
|
82
|
+
this._numbersStyle = numbersStyle;
|
|
83
|
+
this._opacity = opacity;
|
|
84
|
+
this._ringAccount = new ring_account_1.RingAccount();
|
|
85
|
+
this._textWritersMap = textWritersMap;
|
|
86
|
+
this._textDataPreAdaptor = textDataPreAdaptor;
|
|
87
|
+
this._textWritersMap.forEach((textWriter) => textWriter.setKeyAdaptor((item) => item.__identity__));
|
|
88
|
+
}
|
|
89
|
+
// USER API
|
|
90
|
+
/**
|
|
91
|
+
* @method updateCentersCoordinate @param { Array < { centerID, long,lat } >} items
|
|
92
|
+
*/
|
|
93
|
+
updateCentersCoordinate(items, { textWriterIDs = [] } = {}) {
|
|
94
|
+
// Algorithm
|
|
95
|
+
/**
|
|
96
|
+
* 1. ask centerRingAccount for existing rings COORDINATE RELATED KEYS
|
|
97
|
+
* 2. update centers
|
|
98
|
+
* 3. update buffer orchestators
|
|
99
|
+
*/
|
|
100
|
+
var _a;
|
|
101
|
+
this._ringAccount.updateCentersCoordinate(items);
|
|
102
|
+
const { globe, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding } = this;
|
|
103
|
+
for (const { centerID } of items) {
|
|
104
|
+
const datas = this.__reconstructCentralRings(centerID);
|
|
105
|
+
bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["centerCoords3d", "centerCoords2dflat", "targetCoords3d", "centerCoords2dflatForPadding"]);
|
|
106
|
+
const paddingDatas = this.__reconstructCentralRingsBigPaddings(centerID);
|
|
107
|
+
paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["circlePoint2d", "paddingPoint2d", "circlePoint3d", "paddingPoint3d"]);
|
|
108
|
+
}
|
|
109
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.updateCentersXY(items);
|
|
110
|
+
this.__contextTextWriterUpdate(items.map(({ centerID }) => centerID), textWriterIDs);
|
|
111
|
+
globe.DrawRender();
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* @method insertBulk
|
|
115
|
+
* @param { Array < RangeRingsItem> } items
|
|
116
|
+
*/
|
|
117
|
+
insertBulk(items, { textWriterIDs = [] } = {}) {
|
|
118
|
+
var _a;
|
|
119
|
+
// Algorithm
|
|
120
|
+
/**
|
|
121
|
+
* 1 ask centerRingAccount for existing rings
|
|
122
|
+
* 2. delete all existing keys with buffer orchestators
|
|
123
|
+
* 3. insert new centerRings to centerRingAccount
|
|
124
|
+
* 4. insert new keys with buffer orchestators
|
|
125
|
+
*/
|
|
126
|
+
const { globe, _ringAccount, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding } = this;
|
|
127
|
+
for (const item of items) {
|
|
128
|
+
const existingKeys = _ringAccount.ringKeys(item.centerID);
|
|
129
|
+
if (existingKeys.length) {
|
|
130
|
+
bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
|
|
131
|
+
}
|
|
132
|
+
const paddingKeys = _ringAccount.ringBigPaddingKeys(item.centerID);
|
|
133
|
+
if (paddingKeys.length) {
|
|
134
|
+
paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
for (const item of items) {
|
|
138
|
+
_ringAccount.insertCenter(item);
|
|
139
|
+
const datas = this.__reconstructCentralRings(item.centerID);
|
|
140
|
+
bufferOrchestrator.insertBulk(datas, bufferManagersCompMap);
|
|
141
|
+
const paddingDatas = this.__reconstructCentralRingsBigPaddings(item.centerID);
|
|
142
|
+
paddingBufferOrchestrator.insertBulk(paddingDatas, bufferManagersCompMapPadding);
|
|
143
|
+
}
|
|
144
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.insertBulk(items);
|
|
145
|
+
this.__contextTextWriterUpdate(items.map(({ centerID }) => centerID), textWriterIDs);
|
|
146
|
+
globe.DrawRender();
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* @method updateCentersColor @param { Array < { centerID, rgba: [4 numbers] } >} centerColors
|
|
150
|
+
*/
|
|
151
|
+
updateCentersColor(centerColors, { textWriterIDs = [] } = {}) {
|
|
152
|
+
// Algorithm
|
|
153
|
+
/**
|
|
154
|
+
* 1. ask centerRingAccount for existing rings COLOR KEYS
|
|
155
|
+
* 2. update centers
|
|
156
|
+
* 3. update buffer orchestators
|
|
157
|
+
*/
|
|
158
|
+
this._ringAccount.updateCentersColor(centerColors);
|
|
159
|
+
const { globe, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding } = this;
|
|
160
|
+
for (const { centerID } of centerColors) {
|
|
161
|
+
const datas = this.__reconstructCentralProperties(centerID);
|
|
162
|
+
bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
|
|
163
|
+
const paddingDatas = this.__reconstructCentralPaddingProperties(centerID);
|
|
164
|
+
paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
|
|
165
|
+
}
|
|
166
|
+
this.__contextTextWriterUpdate(centerColors.map(({ centerID }) => centerID), textWriterIDs);
|
|
167
|
+
globe.DrawRender();
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
*
|
|
171
|
+
* @method updateCentersHide @param { Array < { centerID, hide, textHide } >} centerHides
|
|
172
|
+
*/
|
|
173
|
+
updateCentersHide(centerHides, { textWriterIDs = [] } = {}) {
|
|
174
|
+
var _a;
|
|
175
|
+
// Algorithm
|
|
176
|
+
/**
|
|
177
|
+
* Simple
|
|
178
|
+
* 1. update centers
|
|
179
|
+
* 2. reconstruct data,
|
|
180
|
+
* 3. update color buffer
|
|
181
|
+
* */
|
|
182
|
+
this._ringAccount.updateCentersHide(centerHides);
|
|
183
|
+
const { globe, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding } = this;
|
|
184
|
+
for (const { centerID } of centerHides) {
|
|
185
|
+
const datas = this.__reconstructCentralProperties(centerID);
|
|
186
|
+
bufferOrchestrator.updateBulk(datas, bufferManagersCompMap, ["rgba", "rgbaMercator"]);
|
|
187
|
+
const paddingDatas0 = this.__reconstructCentralRings(centerID);
|
|
188
|
+
bufferOrchestrator.updateBulk(paddingDatas0, bufferManagersCompMap, ["radius3dsmall", "centerCoords2dflatForPadding"]);
|
|
189
|
+
const paddingDatas = this.__reconstructCentralPaddingProperties(centerID);
|
|
190
|
+
paddingBufferOrchestrator.updateBulk(paddingDatas, bufferManagersCompMapPadding, ["rgba"]);
|
|
191
|
+
}
|
|
192
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.updateCentersHide(centerHides);
|
|
193
|
+
this.__contextTextWriterUpdate(centerHides.map(({ centerID }) => centerID), textWriterIDs);
|
|
194
|
+
globe.DrawRender();
|
|
195
|
+
/**
|
|
196
|
+
* Complicated
|
|
197
|
+
* 1. ask centerRingAccount for existing rings HIDE KEYS
|
|
198
|
+
* 2. delete from buffer orchestators
|
|
199
|
+
* 3. mark centers as hidden
|
|
200
|
+
*/
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* @param {Array<string>} textWriterIDs textWritersMap keys to be used for writing text.
|
|
204
|
+
* @param {Array<string>} itemKeys if empty, all texts will be updated. Use {@link ringKeyMethod} method to get keys
|
|
205
|
+
*/
|
|
206
|
+
updateText(textWriterIDs = [], itemKeys = null) {
|
|
207
|
+
const textWritersMap = textWriterGetOrThrow(this._textWritersMap, textWriterIDs);
|
|
208
|
+
if (itemKeys === null) {
|
|
209
|
+
this._ringAccount.updateAllText(textWritersMap, this._textDataPreAdaptor);
|
|
210
|
+
this.globe.DrawRender();
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
itemKeys.forEach((key) => {
|
|
214
|
+
const item = this._ringAccount.getCenter(key);
|
|
215
|
+
if (item === undefined)
|
|
216
|
+
throw new Error("Center not found");
|
|
217
|
+
const textData = this._textDataPreAdaptor(item);
|
|
218
|
+
textWritersMap.forEach((textWriter) => textWriter.insertText(textData));
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
this.globe.DrawRender();
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* @method removeCenters @param { Array < { centerID } >} centerIDs
|
|
225
|
+
*/
|
|
226
|
+
removeCenters(centerIDs) {
|
|
227
|
+
var _a;
|
|
228
|
+
const { globe, bufferOrchestrator, bufferManagersCompMap, paddingBufferOrchestrator, bufferManagersCompMapPadding, _ringAccount } = this;
|
|
229
|
+
for (const centerID of centerIDs) {
|
|
230
|
+
const existingKeys = _ringAccount.ringKeys(centerID);
|
|
231
|
+
if (existingKeys.length) {
|
|
232
|
+
bufferOrchestrator.deleteBulk(existingKeys, bufferManagersCompMap);
|
|
233
|
+
this._textWritersMap.forEach((textWriter) => textWriter.deleteTextBulk(existingKeys));
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
for (const centerID of centerIDs) {
|
|
237
|
+
const paddingKeys = _ringAccount.ringBigPaddingKeys(centerID);
|
|
238
|
+
if (paddingKeys.length) {
|
|
239
|
+
paddingBufferOrchestrator.deleteBulk(paddingKeys, bufferManagersCompMapPadding);
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.removeCenters(centerIDs);
|
|
243
|
+
this._ringAccount.removeCenters(centerIDs);
|
|
244
|
+
globe.DrawRender();
|
|
245
|
+
}
|
|
246
|
+
/**
|
|
247
|
+
* @method setOpacity @param { number } opacity
|
|
248
|
+
*/
|
|
249
|
+
setOpacity(opacity) {
|
|
250
|
+
var _a;
|
|
251
|
+
(0, typecheck_1.opacityCheck)(opacity);
|
|
252
|
+
this._opacity = opacity;
|
|
253
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.setOpacity(opacity);
|
|
254
|
+
this._textWritersMap.forEach((writer) => writer.setOpacity(opacity));
|
|
255
|
+
this.globe.DrawRender();
|
|
256
|
+
}
|
|
257
|
+
/**
|
|
258
|
+
* @method setOneDegreePaddingOn // performance consuming, might be removed
|
|
259
|
+
*/
|
|
260
|
+
setOneDegreePaddingOn(isOneDegreePaddingOn) {
|
|
261
|
+
if (typeof isOneDegreePaddingOn !== "boolean")
|
|
262
|
+
throw new Error("Invalid value for one degree padding");
|
|
263
|
+
if (this._oneDegreePadding === isOneDegreePaddingOn)
|
|
264
|
+
return;
|
|
265
|
+
this._oneDegreePadding = isOneDegreePaddingOn;
|
|
266
|
+
this.globe.DrawRender();
|
|
267
|
+
}
|
|
268
|
+
setZAlphaOnDegreePadding(zAlphaOnDegreePadding) {
|
|
269
|
+
if (zAlphaOnDegreePadding !== 0 && zAlphaOnDegreePadding !== 1)
|
|
270
|
+
throw new Error("Invalid value for zAlphaOnDegreePadding");
|
|
271
|
+
if (this._zAlphaOnDegreePadding === zAlphaOnDegreePadding)
|
|
272
|
+
return;
|
|
273
|
+
this._zAlphaOnDegreePadding = zAlphaOnDegreePadding;
|
|
274
|
+
this.globe.DrawRender();
|
|
275
|
+
}
|
|
276
|
+
// PRIVATE METHODS
|
|
277
|
+
_initPrograms() {
|
|
278
|
+
const { globe } = this;
|
|
279
|
+
this._circleProgram2D = circle_accurate_flat_1.CircleCache.get(globe);
|
|
280
|
+
this._circleProgram3D = circle_accurate_3d_1.CircleCache.get(globe);
|
|
281
|
+
this._padding2dProgram = lines_color_instanced_flat_1.LinesColorInstancedFlatCache.get(globe);
|
|
282
|
+
this._padding3dProgram = degree_padding_around_circle_3d_1.CirclePadding3DCache.get(globe);
|
|
283
|
+
this._lineOnGlobe_bigPadding = naive_accurate_flexible_1.LineOnGlobeCache.get(globe);
|
|
284
|
+
}
|
|
285
|
+
_initBufferManagers() {
|
|
286
|
+
const { gl } = this;
|
|
287
|
+
const initialCapacity = 10;
|
|
288
|
+
const bufferType = "DYNAMIC_DRAW";
|
|
289
|
+
// circle2d, circle3d, 1 degree paddings,
|
|
290
|
+
this.bufferOrchestrator = new account_1.BufferOrchestrator({ capacity: initialCapacity });
|
|
291
|
+
this.bufferManagersCompMap = new Map([
|
|
292
|
+
// circle 3D
|
|
293
|
+
["centerCoords3d", {
|
|
294
|
+
'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
295
|
+
'adaptor': (item) => new Float32Array(item.centerCoords3d),
|
|
296
|
+
}],
|
|
297
|
+
["targetCoords3d", {
|
|
298
|
+
'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
299
|
+
'adaptor': (item) => new Float32Array(item.targetCoords3d),
|
|
300
|
+
}],
|
|
301
|
+
["rgba", {
|
|
302
|
+
'bufferManager': new account_1.BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
303
|
+
'adaptor': (item) => new Float32Array(item.hide === enum_1.ENUM_HIDE.HIDE ? [0, 0, 0, 0] : item.rgba)
|
|
304
|
+
}],
|
|
305
|
+
["radius3d", {
|
|
306
|
+
'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
307
|
+
'adaptor': (item) => new Float32Array([item.radius])
|
|
308
|
+
}],
|
|
309
|
+
["radius3dsmall", {
|
|
310
|
+
'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
311
|
+
'adaptor': (item) => {
|
|
312
|
+
if (item.hide === enum_1.ENUM_HIDE.HIDE_1_DEGREE_PADDINGS)
|
|
313
|
+
return new Float32Array([item.radius]);
|
|
314
|
+
return new Float32Array([item.radius - item.padding / 3]);
|
|
315
|
+
}
|
|
316
|
+
}],
|
|
317
|
+
["circleDashAngle", {
|
|
318
|
+
'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
319
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
320
|
+
}],
|
|
321
|
+
["dashOpacity", {
|
|
322
|
+
'bufferManager': new account_1.BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
323
|
+
'adaptor': (item) => new Float32Array([1]),
|
|
324
|
+
}],
|
|
325
|
+
// circle 2D
|
|
326
|
+
["centerCoords2dflatForPadding", {
|
|
327
|
+
'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType, initialCapacity }),
|
|
328
|
+
'adaptor': (item) => item.centerCoords2dflatForPadding,
|
|
329
|
+
}],
|
|
330
|
+
["centerCoords2dflat", {
|
|
331
|
+
'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT * 2, { bufferType, initialCapacity }),
|
|
332
|
+
'adaptor': (item) => item.centerCoords2dflat,
|
|
333
|
+
}],
|
|
334
|
+
["rgbaMercator", {
|
|
335
|
+
'bufferManager': new account_1.BufferManager(gl, 4 * CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
336
|
+
'adaptor': (item) => data_filler_1.populateFloat32Array.fillWithListData(CIRCLE_FLAT_EDGE_COUNT, item.hide === enum_1.ENUM_HIDE.HIDE ? [0, 0, 0, 0] : item.rgba),
|
|
337
|
+
}],
|
|
338
|
+
["circleDashAngleMercator", {
|
|
339
|
+
'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
340
|
+
'adaptor': (item) => data_filler_1.populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1),
|
|
341
|
+
}],
|
|
342
|
+
["dashOpacityMercator", {
|
|
343
|
+
'bufferManager': new account_1.BufferManager(gl, CIRCLE_FLAT_EDGE_COUNT, { bufferType, initialCapacity }),
|
|
344
|
+
'adaptor': (item) => data_filler_1.populateFloat32Array.fillFloat32Array(CIRCLE_FLAT_EDGE_COUNT, 1),
|
|
345
|
+
}],
|
|
346
|
+
]);
|
|
347
|
+
const obj = function (bufferManagerComp, divisor = 1) {
|
|
348
|
+
if (bufferManagerComp === null)
|
|
349
|
+
return null;
|
|
350
|
+
return { 'buffer': bufferManagerComp.bufferManager.buffer, 'stride': 0, 'offset': 0, divisor };
|
|
351
|
+
};
|
|
352
|
+
this._circle2DVao = this._circleProgram2D.createVAO(...["centerCoords2dflat", "rgbaMercator", "circleDashAngleMercator", "dashOpacityMercator"].map(key => obj(this.bufferManagersCompMap.get(key))));
|
|
353
|
+
this._circle3DVao = this._circleProgram3D.createVAO(...["centerCoords3d", "targetCoords3d", "rgba", "circleDashAngle", "dashOpacity"].map(key => obj(this.bufferManagersCompMap.get(key))));
|
|
354
|
+
this._oneDegree2DPaddingVao = this._padding2dProgram.createVAO({ buffer: this.bufferManagersCompMap.get("centerCoords2dflat").bufferManager.buffer, size: 2, stride: 0, offset: 0 }, { buffer: this.bufferManagersCompMap.get("centerCoords2dflatForPadding").bufferManager.buffer, size: 2, stride: 0, offset: 0 }, { buffer: this.bufferManagersCompMap.get("rgbaMercator").bufferManager.buffer, size: 4, stride: 0, offset: 0 });
|
|
355
|
+
// PADDING
|
|
356
|
+
// this one needs glue to assosiate rings and their big paddings since the count for center is not fixed
|
|
357
|
+
this.paddingBufferOrchestrator = new account_1.BufferOrchestrator({ capacity: initialCapacity });
|
|
358
|
+
this.bufferManagersCompMapPadding = new Map([
|
|
359
|
+
["circlePoint2d", {
|
|
360
|
+
'bufferManager': new account_1.BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
361
|
+
'adaptor': (item) => item.circlePoint2d,
|
|
362
|
+
}],
|
|
363
|
+
["paddingPoint2d", {
|
|
364
|
+
'bufferManager': new account_1.BufferManager(gl, 2, { bufferType, initialCapacity }),
|
|
365
|
+
'adaptor': (item) => item.paddingPoint2d,
|
|
366
|
+
}],
|
|
367
|
+
["circlePoint3d", {
|
|
368
|
+
'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
369
|
+
'adaptor': (item) => item.circlePoint3d
|
|
370
|
+
}],
|
|
371
|
+
["paddingPoint3d", {
|
|
372
|
+
'bufferManager': new account_1.BufferManager(gl, 3, { bufferType, initialCapacity }),
|
|
373
|
+
'adaptor': (item) => item.paddingPoint3d
|
|
374
|
+
}],
|
|
375
|
+
["rgba", {
|
|
376
|
+
'bufferManager': new account_1.BufferManager(gl, 4, { bufferType, initialCapacity }),
|
|
377
|
+
'adaptor': (item) => new Float32Array(item.rgba)
|
|
378
|
+
}],
|
|
379
|
+
// ["dashOpacity", {
|
|
380
|
+
// 'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
381
|
+
// 'adaptor': (item) => new Float32Array([1]),
|
|
382
|
+
// }],
|
|
383
|
+
// ["dashRatio", {
|
|
384
|
+
// 'bufferManager': new BufferManager(gl, 1, { bufferType, initialCapacity }),
|
|
385
|
+
// 'adaptor': (item) => new Float32Array([1]),
|
|
386
|
+
// }],
|
|
387
|
+
]);
|
|
388
|
+
this._bigPadding3dFlatVAO = this._lineOnGlobe_bigPadding.createVAO(//"dashRatio", "dashOpacity"
|
|
389
|
+
...["circlePoint2d", "circlePoint3d", "paddingPoint2d", "paddingPoint3d", null, null, "rgba",].map(key => (key === null) ? null : obj(this.bufferManagersCompMapPadding.get(key))));
|
|
390
|
+
this._padding3dOneDegreeVao = this._padding3dProgram.createVAO(...["centerCoords3d", "radius3d", "radius3dsmall", "rgba"].map(key => obj(this.bufferManagersCompMap.get(key))));
|
|
391
|
+
}
|
|
392
|
+
// IMPLICIT METHODS
|
|
393
|
+
__reconstructCentralRingsBigPaddings(centerID) {
|
|
394
|
+
const { globe } = this;
|
|
395
|
+
const centerItem = this._ringAccount.getCenter(centerID);
|
|
396
|
+
if (centerItem === undefined)
|
|
397
|
+
throw new Error("Center not found");
|
|
398
|
+
const { long, lat, stepAngle, rgba, rings, hide = 0, textHide = 0, altitude: centerAltitude = 0 } = centerItem;
|
|
399
|
+
const result = [];
|
|
400
|
+
const color = hide === 1 ? new Float32Array([0, 0, 0, 0]) : new Float32Array(rgba);
|
|
401
|
+
for (const { ringID, radius, padding, altitude = centerAltitude } of rings) {
|
|
402
|
+
let azimuthAngle = 0;
|
|
403
|
+
while (azimuthAngle < 360) {
|
|
404
|
+
const circlePoint = globe.Math.FindPointByPolar(long, lat, radius, azimuthAngle); // long lat
|
|
405
|
+
const paddingPoint = globe.Math.FindPointByPolar(long, lat, radius - padding, azimuthAngle); // long lat
|
|
406
|
+
result.push({
|
|
407
|
+
key: (0, ring_account_1.ringBigPaddingKeyMethod)(centerID, ringID, azimuthAngle),
|
|
408
|
+
circlePoint2d: new Float32Array(globe.api_GetMercator2DPoint(circlePoint.long, circlePoint.lat)),
|
|
409
|
+
paddingPoint2d: new Float32Array(globe.api_GetMercator2DPoint(paddingPoint.long, paddingPoint.lat)),
|
|
410
|
+
circlePoint3d: coordOnSphere(circlePoint.long, circlePoint.lat, globe, altitude / 1000),
|
|
411
|
+
paddingPoint3d: coordOnSphere(paddingPoint.long, paddingPoint.lat, globe, altitude / 1000),
|
|
412
|
+
rgba: color,
|
|
413
|
+
hide,
|
|
414
|
+
textHide
|
|
415
|
+
});
|
|
416
|
+
azimuthAngle += stepAngle;
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
return result;
|
|
420
|
+
}
|
|
421
|
+
__reconstructCentralRings(centerID) {
|
|
422
|
+
const { globe } = this;
|
|
423
|
+
const centerItem = this._ringAccount.getCenter(centerID);
|
|
424
|
+
if (centerItem === undefined)
|
|
425
|
+
throw new Error("Center not found");
|
|
426
|
+
const { long, lat, rgba, rings, hide = 0, textHide = 0, altitude: centralAltitude = 0 } = centerItem;
|
|
427
|
+
const centerCoords3d = coordOnSphere(long, lat, globe, centralAltitude / 1000);
|
|
428
|
+
const result = [];
|
|
429
|
+
for (const { ringID, radius, padding, __identity__, altitude = centralAltitude } of rings) {
|
|
430
|
+
const key = __identity__;
|
|
431
|
+
const centerCoords2dflat = (0, circle_accurate_flat_1.centerCoords2dflatDataCreatorWithRadius)(globe, long, lat, radius, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
|
|
432
|
+
const radiusPadding = hide === enum_1.ENUM_HIDE.HIDE_1_DEGREE_PADDINGS ? radius : radius - padding / 3;
|
|
433
|
+
const targetPoint = globe.Math.FindPointByPolar(long, lat, radius, 0); // long lat
|
|
434
|
+
const targetCoords3d = coordOnSphere(targetPoint.long, targetPoint.lat, globe, altitude / 1000);
|
|
435
|
+
const centerCoords2dflatForPadding = (0, circle_accurate_flat_1.centerCoords2dflatDataCreatorWithRadius)(globe, long, lat, radiusPadding, { edgeCount: CIRCLE_FLAT_EDGE_COUNT });
|
|
436
|
+
result.push({
|
|
437
|
+
key,
|
|
438
|
+
centerCoords3d,
|
|
439
|
+
targetCoords3d,
|
|
440
|
+
centerCoords2dflat,
|
|
441
|
+
radius,
|
|
442
|
+
padding,
|
|
443
|
+
rgba,
|
|
444
|
+
centerCoords2dflatForPadding,
|
|
445
|
+
hide,
|
|
446
|
+
textHide
|
|
447
|
+
});
|
|
448
|
+
}
|
|
449
|
+
return result;
|
|
450
|
+
}
|
|
451
|
+
__reconstructCentralPaddingProperties(centerID) {
|
|
452
|
+
const centerItem = this._ringAccount.getCenter(centerID);
|
|
453
|
+
if (centerItem === undefined)
|
|
454
|
+
throw new Error("Center not found");
|
|
455
|
+
const { stepAngle, rgba, rings, hide = 0, textHide = 0 } = centerItem;
|
|
456
|
+
const result = [];
|
|
457
|
+
for (const { ringID, } of rings) {
|
|
458
|
+
let angle = 0;
|
|
459
|
+
while (angle < 360) {
|
|
460
|
+
result.push({
|
|
461
|
+
key: (0, ring_account_1.ringBigPaddingKeyMethod)(centerID, ringID, angle),
|
|
462
|
+
rgba: hide === 1 ? new Float32Array([0, 0, 0, 0]) : rgba,
|
|
463
|
+
textHide
|
|
464
|
+
});
|
|
465
|
+
angle += stepAngle;
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
return result;
|
|
469
|
+
}
|
|
470
|
+
__reconstructCentralProperties(centerID) {
|
|
471
|
+
const centerItem = this._ringAccount.getCenter(centerID);
|
|
472
|
+
if (centerItem === undefined)
|
|
473
|
+
throw new Error("Center not found");
|
|
474
|
+
const { rgba, rings, hide = 0, textHide = 0 } = centerItem;
|
|
475
|
+
const result = [];
|
|
476
|
+
for (const { ringID, __identity__ } of rings) {
|
|
477
|
+
const key = __identity__;
|
|
478
|
+
result.push({
|
|
479
|
+
key,
|
|
480
|
+
rgba: hide === enum_1.ENUM_HIDE.HIDE ? new Float32Array([0, 0, 0, 0]) : rgba,
|
|
481
|
+
textHide
|
|
482
|
+
});
|
|
483
|
+
}
|
|
484
|
+
return result;
|
|
485
|
+
}
|
|
486
|
+
// GLOBE API
|
|
487
|
+
init(globe, gl) {
|
|
488
|
+
this.globe = globe;
|
|
489
|
+
this.gl = gl;
|
|
490
|
+
this._initPrograms();
|
|
491
|
+
this._initBufferManagers();
|
|
492
|
+
if (this._showNumbers) {
|
|
493
|
+
this.paddingTextPlugin = new rangeringangletext_1.default(globe, this.id + "text", { style: this._numbersStyle, opacity: this._opacity });
|
|
494
|
+
delete this._numbersStyle;
|
|
495
|
+
}
|
|
496
|
+
}
|
|
497
|
+
draw3D() {
|
|
498
|
+
const { globe, gl, _circleProgram2D, _circleProgram3D, _padding2dProgram, _padding3dProgram, _lineOnGlobe_bigPadding, _circle2DVao, _circle3DVao, _oneDegree2DPaddingVao, _padding3dOneDegreeVao, _bigPadding3dFlatVAO, bufferOrchestrator, paddingBufferOrchestrator, _opacity, _oneDegreePadding, _zAlphaOnDegreePadding } = this;
|
|
499
|
+
gl.disable(gl.DEPTH_TEST);
|
|
500
|
+
const is3D = globe.api_GetCurrentGeometry() === 0;
|
|
501
|
+
// const lod = globe.api_GetCurrentLOD();
|
|
502
|
+
if (is3D) {
|
|
503
|
+
_circleProgram3D.draw(_circle3DVao, bufferOrchestrator.length, _opacity);
|
|
504
|
+
if (_oneDegreePadding)
|
|
505
|
+
_padding3dProgram.draw(_padding3dOneDegreeVao, bufferOrchestrator.length, 360, 1, _opacity, _zAlphaOnDegreePadding);
|
|
506
|
+
}
|
|
507
|
+
else {
|
|
508
|
+
_circleProgram2D.draw(_circle2DVao, bufferOrchestrator.length, CIRCLE_FLAT_EDGE_COUNT, _opacity);
|
|
509
|
+
// _padding2dProgram.draw(bigPaddingVAO, paddingBufferOrchestrator.length, _opacity);
|
|
510
|
+
if (_oneDegreePadding)
|
|
511
|
+
_padding2dProgram.draw(_oneDegree2DPaddingVao, bufferOrchestrator.length * CIRCLE_FLAT_EDGE_COUNT, _opacity, _zAlphaOnDegreePadding);
|
|
512
|
+
}
|
|
513
|
+
const drawOptions = { drawRange: { first: 0, count: paddingBufferOrchestrator.length } };
|
|
514
|
+
_lineOnGlobe_bigPadding.draw(_bigPadding3dFlatVAO, drawOptions, _opacity);
|
|
515
|
+
this._textWritersMap.forEach((textWriter) => textWriter.draw());
|
|
516
|
+
gl.enable(gl.DEPTH_TEST);
|
|
517
|
+
}
|
|
518
|
+
free() {
|
|
519
|
+
var _a;
|
|
520
|
+
if (this._isFreed)
|
|
521
|
+
return;
|
|
522
|
+
const { globe } = this;
|
|
523
|
+
this.bufferManagersCompMap.forEach(({ bufferManager }) => bufferManager.free());
|
|
524
|
+
this.bufferManagersCompMapPadding.forEach(({ bufferManager }) => bufferManager.free());
|
|
525
|
+
// delete vaos
|
|
526
|
+
this.gl.deleteVertexArray(this._circle2DVao);
|
|
527
|
+
this.gl.deleteVertexArray(this._circle3DVao);
|
|
528
|
+
this.gl.deleteVertexArray(this._oneDegree2DPaddingVao);
|
|
529
|
+
this.gl.deleteVertexArray(this._padding3dOneDegreeVao);
|
|
530
|
+
this.gl.deleteVertexArray(this._bigPadding3dFlatVAO);
|
|
531
|
+
// delete programs
|
|
532
|
+
circle_accurate_flat_1.CircleCache.release(globe);
|
|
533
|
+
circle_accurate_3d_1.CircleCache.release(globe);
|
|
534
|
+
lines_color_instanced_flat_1.LinesColorInstancedFlatCache.release(globe);
|
|
535
|
+
degree_padding_around_circle_3d_1.CirclePadding3DCache.release(globe);
|
|
536
|
+
naive_accurate_flexible_1.LineOnGlobeCache.release(globe);
|
|
537
|
+
this._circleProgram2D = null;
|
|
538
|
+
this._circleProgram3D = null;
|
|
539
|
+
this._padding2dProgram = null;
|
|
540
|
+
this._padding3dProgram = null;
|
|
541
|
+
this._lineOnGlobe_bigPadding = null;
|
|
542
|
+
(_a = this.paddingTextPlugin) === null || _a === void 0 ? void 0 : _a.free();
|
|
543
|
+
this._isFreed = true;
|
|
544
|
+
}
|
|
545
|
+
__contextTextWriterUpdate(centerIDs, textWriterIDs = null) {
|
|
546
|
+
let textWriters = null;
|
|
547
|
+
if (textWriterIDs === null) {
|
|
548
|
+
textWriters = Array.from(this._textWritersMap.values());
|
|
549
|
+
}
|
|
550
|
+
else if (textWriterIDs.length === 0) {
|
|
551
|
+
return;
|
|
552
|
+
}
|
|
553
|
+
else {
|
|
554
|
+
textWriters = textWriterGetOrThrow(this._textWritersMap, textWriterIDs);
|
|
555
|
+
}
|
|
556
|
+
centerIDs.forEach((centerID) => { this._ringAccount.textUpdate(centerID, textWriters, this._textDataPreAdaptor); });
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
exports.RangeRings = RangeRings;
|
|
560
|
+
const textWriterGetOrThrow = (0, get_1.mapGetOrThrow)("textWriterIDs is invalid");
|