@antv/l7-layers 2.7.31 → 2.7.34
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/es/core/BaseLayer.d.ts +1 -0
- package/es/core/BaseLayer.js +36 -17
- package/es/core/BaseLayer.js.map +1 -1
- package/es/point/models/extrude.js +1 -1
- package/es/point/models/fill.js +1 -1
- package/lib/core/BaseLayer.js +36 -17
- package/lib/core/BaseLayer.js.map +1 -1
- package/lib/point/models/extrude.js +1 -1
- package/lib/point/models/fill.js +1 -1
- package/package.json +5 -5
package/es/core/BaseLayer.d.ts
CHANGED
|
@@ -147,6 +147,7 @@ export default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter
|
|
|
147
147
|
getMaxZoom(): number;
|
|
148
148
|
get(name: string): any;
|
|
149
149
|
setMaxZoom(maxZoom: number): ILayer;
|
|
150
|
+
setAutoFit(autoFit: boolean): ILayer;
|
|
150
151
|
/**
|
|
151
152
|
* zoom to layer Bounds
|
|
152
153
|
*/
|
package/es/core/BaseLayer.js
CHANGED
|
@@ -266,6 +266,17 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
266
266
|
this.interactionService = this.container.get(TYPES.IInteractionService);
|
|
267
267
|
this.pickingService = this.container.get(TYPES.IPickingService);
|
|
268
268
|
this.mapService = this.container.get(TYPES.IMapService);
|
|
269
|
+
|
|
270
|
+
var _this$getLayerConfig2 = this.getLayerConfig(),
|
|
271
|
+
enableMultiPassRenderer = _this$getLayerConfig2.enableMultiPassRenderer,
|
|
272
|
+
passes = _this$getLayerConfig2.passes;
|
|
273
|
+
|
|
274
|
+
if (enableMultiPassRenderer && passes !== null && passes !== void 0 && passes.length && passes.length > 0) {
|
|
275
|
+
this.mapService.on('mapAfterFrameChange', function () {
|
|
276
|
+
_this2.renderLayers();
|
|
277
|
+
});
|
|
278
|
+
}
|
|
279
|
+
|
|
269
280
|
this.cameraService = this.container.get(TYPES.ICameraService);
|
|
270
281
|
this.coordinateService = this.container.get(TYPES.ICoordinateSystemService);
|
|
271
282
|
this.shaderModuleService = this.container.get(TYPES.IShaderModuleService);
|
|
@@ -327,8 +338,8 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
327
338
|
this.inited = true;
|
|
328
339
|
this.updateLayerConfig(_objectSpread(_objectSpread({}, this.getDefaultConfig()), this.rawConfig));
|
|
329
340
|
|
|
330
|
-
var _this$
|
|
331
|
-
animateOption = _this$
|
|
341
|
+
var _this$getLayerConfig3 = this.getLayerConfig(),
|
|
342
|
+
animateOption = _this$getLayerConfig3.animateOption;
|
|
332
343
|
|
|
333
344
|
if (animateOption !== null && animateOption !== void 0 && animateOption.enable) {
|
|
334
345
|
this.layerService.startAnimate();
|
|
@@ -707,12 +718,12 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
707
718
|
value: function isVisible() {
|
|
708
719
|
var zoom = this.mapService.getZoom();
|
|
709
720
|
|
|
710
|
-
var _this$
|
|
711
|
-
visible = _this$
|
|
712
|
-
_this$
|
|
713
|
-
minZoom = _this$
|
|
714
|
-
_this$
|
|
715
|
-
maxZoom = _this$
|
|
721
|
+
var _this$getLayerConfig4 = this.getLayerConfig(),
|
|
722
|
+
visible = _this$getLayerConfig4.visible,
|
|
723
|
+
_this$getLayerConfig5 = _this$getLayerConfig4.minZoom,
|
|
724
|
+
minZoom = _this$getLayerConfig5 === void 0 ? -Infinity : _this$getLayerConfig5,
|
|
725
|
+
_this$getLayerConfig6 = _this$getLayerConfig4.maxZoom,
|
|
726
|
+
maxZoom = _this$getLayerConfig6 === void 0 ? Infinity : _this$getLayerConfig6;
|
|
716
727
|
|
|
717
728
|
return !!visible && zoom >= minZoom && zoom <= maxZoom;
|
|
718
729
|
}
|
|
@@ -727,16 +738,16 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
727
738
|
}, {
|
|
728
739
|
key: "getMinZoom",
|
|
729
740
|
value: function getMinZoom() {
|
|
730
|
-
var _this$
|
|
731
|
-
minZoom = _this$
|
|
741
|
+
var _this$getLayerConfig7 = this.getLayerConfig(),
|
|
742
|
+
minZoom = _this$getLayerConfig7.minZoom;
|
|
732
743
|
|
|
733
744
|
return minZoom;
|
|
734
745
|
}
|
|
735
746
|
}, {
|
|
736
747
|
key: "getMaxZoom",
|
|
737
748
|
value: function getMaxZoom() {
|
|
738
|
-
var _this$
|
|
739
|
-
maxZoom = _this$
|
|
749
|
+
var _this$getLayerConfig8 = this.getLayerConfig(),
|
|
750
|
+
maxZoom = _this$getLayerConfig8.maxZoom;
|
|
740
751
|
|
|
741
752
|
return maxZoom;
|
|
742
753
|
}
|
|
@@ -754,6 +765,14 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
754
765
|
});
|
|
755
766
|
return this;
|
|
756
767
|
}
|
|
768
|
+
}, {
|
|
769
|
+
key: "setAutoFit",
|
|
770
|
+
value: function setAutoFit(autoFit) {
|
|
771
|
+
this.updateLayerConfig({
|
|
772
|
+
autoFit: autoFit
|
|
773
|
+
});
|
|
774
|
+
return this;
|
|
775
|
+
}
|
|
757
776
|
}, {
|
|
758
777
|
key: "fitBounds",
|
|
759
778
|
value: function fitBounds(fitBoundsOptions) {
|
|
@@ -983,11 +1002,11 @@ var BaseLayer = (_dec = lazyInject(TYPES.IGlobalConfigService), (_class = functi
|
|
|
983
1002
|
}, {
|
|
984
1003
|
key: "needPick",
|
|
985
1004
|
value: function needPick(type) {
|
|
986
|
-
var _this$
|
|
987
|
-
_this$
|
|
988
|
-
enableHighlight = _this$
|
|
989
|
-
_this$
|
|
990
|
-
enableSelect = _this$
|
|
1005
|
+
var _this$getLayerConfig9 = this.getLayerConfig(),
|
|
1006
|
+
_this$getLayerConfig10 = _this$getLayerConfig9.enableHighlight,
|
|
1007
|
+
enableHighlight = _this$getLayerConfig10 === void 0 ? true : _this$getLayerConfig10,
|
|
1008
|
+
_this$getLayerConfig11 = _this$getLayerConfig9.enableSelect,
|
|
1009
|
+
enableSelect = _this$getLayerConfig11 === void 0 ? true : _this$getLayerConfig11;
|
|
991
1010
|
|
|
992
1011
|
var isPick = this.eventNames().indexOf(type) !== -1 || this.eventNames().indexOf('un' + type) !== -1;
|
|
993
1012
|
|
package/es/core/BaseLayer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["SyncBailHook","SyncHook","SyncWaterfallHook","BlendType","lazyInject","TYPES","encodePickingColor","EventEmitter","normalizePasses","BlendTypes","handleStyleDataMapping","updateShape","layerIdCounter","BaseLayer","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","afterInit","beforeRender","beforeRenderData","afterRender","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","push","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","getLayerStyleAttribute","currentShape","shapeOption","options","rawAnimate","data","setSource","sourceOption","clusterZoom","layerSource","setData","on","passes","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","renderLayers","getEncodedData","length","renderModels","getRenderFlag","render","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","isDestroied","off","sourceEvent","destroy","clearAllAttributes","models","cleanRemove","removeAllListeners","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","map","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","isPicking","buildModels","draw","getUninforms","getShaderPickStat","time","console","warn","valuesOrCallback","defaultValues","undefined","callback"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n return this;\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n updateShape(this, lastShape, currentShape);\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n // debugger\n if (this.isDestroied) {\n return;\n }\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n // this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["SyncBailHook","SyncHook","SyncWaterfallHook","BlendType","lazyInject","TYPES","encodePickingColor","EventEmitter","normalizePasses","BlendTypes","handleStyleDataMapping","updateShape","layerIdCounter","BaseLayer","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","afterInit","beforeRender","beforeRenderData","afterRender","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","push","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","getLayerStyleAttribute","currentShape","shapeOption","options","rawAnimate","data","setSource","sourceOption","clusterZoom","layerSource","setData","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","getEncodedData","renderModels","getRenderFlag","render","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","isDestroied","off","sourceEvent","destroy","clearAllAttributes","models","cleanRemove","removeAllListeners","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","map","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","isPicking","buildModels","draw","getUninforms","getShaderPickStat","time","console","warn","valuesOrCallback","defaultValues","undefined","callback"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AACA,SAASA,YAAT,EAAuBC,QAAvB,EAAiCC,iBAAjC,QAA0D,kBAA1D;AACA,SACEC,SADF,EAqCEC,UArCF,EA4CEC,KA5CF,QA6CO,eA7CP;AA+CA,SAASC,kBAAT,QAAmC,gBAAnC;AACA,SAASC,YAAT,QAA6B,eAA7B;AAGA,SAASC,eAAT,QAAgC,oCAAhC;AACA,SAASC,UAAT,QAA2B,gBAA3B;AACA,SAASC,sBAAT,QAAuC,2BAAvC;AACA,SAASC,WAAT,QAA4B,sBAA5B;AAIA,IAAIC,cAAc,GAAG,CAArB;IAEqBC,S,WAoElBT,UAAU,CAACC,KAAK,CAACS,oBAAP,C;;;;;AA2EX,uBAAyE;AAAA;;AAAA,QAA7DC,MAA6D,uEAAJ,EAAI;;AAAA;;AACvE;;AADuE,mEA7IlDH,cAAc,EA6IoC;;AAAA,qEA5IhDA,cA4IgD;;AAAA;;AAAA,8DA1I/C,IA0I+C;;AAAA,6DAzIjD,CAyIiD;;AAAA;;AAAA;;AAAA,6DAtIhD,KAsIgD;;AAAA,2EArIlC,KAqIkC;;AAAA,sEApIjC,IAoIiC;;AAAA,wEAnI/B,IAmI+B;;AAAA,sEAlIvC,KAkIuC;;AAAA;;AAAA,kEAhI5C,CAgI4C;;AAAA;;AAAA,gEA7H1C;AAC7BI,MAAAA,oBAAoB,EAAE,KADO;AAE7BC,MAAAA,qBAAqB,EAAE,KAFM;AAG7BC,MAAAA,gBAAgB,EAAE,KAHW;AAI7BC,MAAAA,sBAAsB,EAAE,KAJK;AAK7BC,MAAAA,mBAAmB,EAAE;AALQ,KA6H0C;;AAAA,4DArH1D;AACbC,MAAAA,IAAI,EAAE,IAAIrB,YAAJ,EADO;AAEbsB,MAAAA,SAAS,EAAE,IAAItB,YAAJ,EAFE;AAGbuB,MAAAA,YAAY,EAAE,IAAIvB,YAAJ,EAHD;AAIbwB,MAAAA,gBAAgB,EAAE,IAAItB,iBAAJ,EAJL;AAKbuB,MAAAA,WAAW,EAAE,IAAIxB,QAAJ,EALA;AAMbyB,MAAAA,mBAAmB,EAAE,IAAIzB,QAAJ,EANR;AAOb0B,MAAAA,kBAAkB,EAAE,IAAI1B,QAAJ,EAPP;AAQb2B,MAAAA,eAAe,EAAE,IAAI3B,QAAJ,CAAa,CAAC,aAAD,CAAb,CARJ;AASb4B,MAAAA,cAAc,EAAE,IAAI5B,QAAJ,EATH;AAUb6B,MAAAA,YAAY,EAAE,IAAI7B,QAAJ,CAAa,CAAC,aAAD,CAAb,CAVD;AAWb8B,MAAAA,WAAW,EAAE,IAAI9B,QAAJ,EAXA;AAYb+B,MAAAA,aAAa,EAAE,IAAI/B,QAAJ,EAZF;AAabgC,MAAAA,YAAY,EAAE,IAAIhC,QAAJ;AAbD,KAqH0D;;AAAA,6DApG/C,EAoG+C;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,oEA7ExC,EA6EwC;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA;;AAAA,qEAzC9B;AAAEiC,MAAAA,MAAM,EAAE;AAAV,KAyC8B;;AAAA;;AAAA;;AAAA;;AAAA,oEA9BlC,IA8BkC;;AAAA;;AAAA;;AAAA,6EAfpE,EAeoE;;AAAA,mEAbnC,EAamC;;AAAA;;AAAA,qEATvC,KASuC;;AAAA,kEANnD,kBAMmD;;AAAA,kEAJ1C,KAI0C;;AAAA,kEAw7BnD,YAAM;AAC1B,YAAKC,SAAL,CAAenB,oBAAf,GAAsC,IAAtC;;AACA,iCAAsC,MAAKoB,cAAL,EAAtC;AAAA,UAAQC,OAAR,wBAAQA,OAAR;AAAA,UAAiBC,gBAAjB,wBAAiBA,gBAAjB;;AACA,UAAID,OAAJ,EAAa;AACX,cAAKE,SAAL,CAAeD,gBAAf;AACD;;AAED,YAAKE,IAAL,CAAU,YAAV;;AACA,YAAKC,QAAL;AACD,KAj8BwE;;AAEvE,UAAKC,IAAL,GAAY3B,MAAM,CAAC2B,IAAP,IAAe,MAAKC,EAAhC;AACA,UAAKC,MAAL,GAAc7B,MAAM,CAAC6B,MAAP,IAAiB,CAA/B;AACA,UAAKC,SAAL,GAAiB9B,MAAjB;AAJuE;AAKxE;;;;WAED,0BAAwB;AACtB,aAAO,KAAK+B,aAAL,CAAmBV,cAAnB,CAA0D,KAAKO,EAA/D,CAAP;AACD;;;WAED,2BACEI,cADF,EAEE;AACA,UAAI,CAAC,KAAKC,MAAV,EAAkB;AAChB,aAAKC,gBAAL,mCACK,KAAKA,gBADV,GAEKF,cAFL;AAID,OALD,MAKO;AACL,YAAMG,OAAO,GAAG,KAAKC,SAAL,CAAeC,GAAf,CAA2B/C,KAAK,CAACgD,OAAjC,CAAhB;AAGA3C,QAAAA,sBAAsB,CAACqC,cAAD,EAAiB,IAAjB,CAAtB;AAEA,aAAKD,aAAL,CAAmBQ,cAAnB,CAAkCJ,OAAlC,EAA2C,KAAKP,EAAhD,gDACK,KAAKG,aAAL,CAAmBV,cAAnB,CAAkC,KAAKO,EAAvC,CADL,GAEK,KAAKM,gBAFV,GAGKF,cAHL;AAKA,aAAKE,gBAAL,GAAwB,EAAxB;AACD;AACF;;;WAQD,sBAAoBE,SAApB,EAA0CI,cAA1C,EAAqE;AACnE,WAAKJ,SAAL,GAAiBA,SAAjB;AACA,WAAKI,cAAL,GAAsBA,cAAtB;AACD;;;WAED,wBAAsB;AACpB,aAAO,KAAKJ,SAAZ;AACD;;;WAED,wBAAsBK,KAAtB,EAAqC;AACnC,WAAKC,WAAL,GAAmBD,KAAnB;AACD;;;WAED,0BAAwB;AACtB,aAAO,KAAKC,WAAZ;AACD;;;WAED,mBAAiBC,MAAjB,EAA+C;AAM7C,WAAKC,OAAL,CAAaC,IAAb,CAAkBF,MAAlB;AACA,aAAO,IAAP;AACD;;;WAED,gBAAc;AAAA;;AAEZ,UAAMR,OAAO,GAAG,KAAKC,SAAL,CAAeC,GAAf,CAA2B/C,KAAK,CAACgD,OAAjC,CAAhB;AAMA,WAAKP,aAAL,CAAmBQ,cAAnB,CAAkCJ,OAAlC,EAA2C,KAAKP,EAAhD,EAAoD,KAAKE,SAAzD;AACA,WAAKgB,SAAL,GAAiB,KAAKhB,SAAL,CAAegB,SAAhC;AAKA,WAAKC,WAAL,GAAmB,KAAKX,SAAL,CAAeC,GAAf,CAAiC/C,KAAK,CAAC0D,YAAvC,CAAnB;AACA,WAAKC,WAAL,GAAmB,KAAKb,SAAL,CAAeC,GAAf,CAAiC/C,KAAK,CAAC4D,YAAvC,CAAnB;AAEA,WAAKC,eAAL,GAAuB,KAAKf,SAAL,CAAeC,GAAf,CACrB/C,KAAK,CAAC8D,gBADe,CAAvB;AAGA,WAAKC,YAAL,GAAoB,KAAKjB,SAAL,CAAeC,GAAf,CAAkC/C,KAAK,CAACgE,aAAxC,CAApB;AACA,WAAKC,kBAAL,GAA0B,KAAKnB,SAAL,CAAeC,GAAf,CACxB/C,KAAK,CAACkE,mBADkB,CAA1B;AAIA,WAAKC,cAAL,GAAsB,KAAKrB,SAAL,CAAeC,GAAf,CACpB/C,KAAK,CAACoE,eADc,CAAtB;AAGA,WAAKC,UAAL,GAAkB,KAAKvB,SAAL,CAAeC,GAAf,CAAgC/C,KAAK,CAACsE,WAAtC,CAAlB;;AACA,kCAA4C,KAAKvC,cAAL,EAA5C;AAAA,UAAQwC,uBAAR,yBAAQA,uBAAR;AAAA,UAAiCC,MAAjC,yBAAiCA,MAAjC;;AACA,UAAID,uBAAuB,IAAIC,MAAJ,aAAIA,MAAJ,eAAIA,MAAM,CAAEC,MAAnC,IAA6CD,MAAM,CAACC,MAAP,GAAgB,CAAjE,EAAoE;AAElE,aAAKJ,UAAL,CAAgBK,EAAhB,CAAmB,qBAAnB,EAA0C,YAAM;AAC9C,UAAA,MAAI,CAACC,YAAL;AACD,SAFD;AAGD;;AAED,WAAKC,aAAL,GAAqB,KAAK9B,SAAL,CAAeC,GAAf,CACnB/C,KAAK,CAAC6E,cADa,CAArB;AAGA,WAAKC,iBAAL,GAAyB,KAAKhC,SAAL,CAAeC,GAAf,CACvB/C,KAAK,CAAC+E,wBADiB,CAAzB;AAGA,WAAKC,mBAAL,GAA2B,KAAKlC,SAAL,CAAeC,GAAf,CACzB/C,KAAK,CAACiF,oBADmB,CAA3B;AAGA,WAAKC,yBAAL,GAAiC,KAAKpC,SAAL,CAAeC,GAAf,CAC/B/C,KAAK,CAACmF,0BADyB,CAAjC;AAGA,WAAKC,iBAAL,GAAyB,KAAKtC,SAAL,CAAeC,GAAf,CAAmB/C,KAAK,CAACqF,kBAAzB,CAAzB;AAGA,WAAKC,qBAAL,GAA6B,KAAKxC,SAAL,CAAeC,GAAf,CAC3B/C,KAAK,CAACuF,sBADqB,CAA7B;AAGA,WAAKC,iBAAL,GAAyB,KAAK1C,SAAL,CAAeC,GAAf,CACvB/C,KAAK,CAACyF,kBADiB,CAAzB;AAGA,WAAKD,iBAAL,CAAuBE,QAAvB,CAAgC,IAAhC;AAGA,WAAKC,sBAAL,CAA4BC,OAA5B,CACE,gBAAuE;AAAA,YAApEC,aAAoE,QAApEA,aAAoE;AAAA,YAArDC,cAAqD,QAArDA,cAAqD;AAAA,YAArCC,eAAqC,QAArCA,eAAqC;AAAA,YAApBC,aAAoB,QAApBA,aAAoB;;AACrE,QAAA,MAAI,CAACV,qBAAL,CAA2BW,oBAA3B,CACEJ,aADF,EAEE;AAEEK,UAAAA,KAAK;AACHC,YAAAA,KAAK,EAAEL;AADJ,aAEA,MAAI,CAACM,iCAAL,CAEDL,eAFC,EAID,MAAI,CAAChE,cAAL,GAAsB8D,aAAtB,CAJC,CAFA;AAFP,SAFF,EAeEG,aAfF;AAiBD,OAnBH;AAqBA,WAAKL,sBAAL,GAA8B,EAA9B;AAGA,WAAKrC,OAAL,GAAe,KAAKR,SAAL,CAAeuD,MAAf,CAAoCrG,KAAK,CAACsG,YAA1C,CAAf;;AArFY,iDAuFS,KAAKhD,OAvFd;AAAA;;AAAA;AAuFZ,4DAAmC;AAAA,cAAxBD,MAAwB;AACjCA,UAAAA,MAAM,CAACkD,KAAP,CAAa,IAAb,EAAmB;AACjB1C,YAAAA,eAAe,EAAE,KAAKA,eADL;AAEjBQ,YAAAA,UAAU,EAAE,KAAKA,UAFA;AAGjBiB,YAAAA,qBAAqB,EAAE,KAAKA,qBAHX;AAIjBF,YAAAA,iBAAiB,EAAE,KAAKA,iBAJP;AAKjBF,YAAAA,yBAAyB,EAAE,KAAKA;AALf,WAAnB;AAOD;AA/FW;AAAA;AAAA;AAAA;AAAA;;AAkGZ,WAAKsB,KAAL,CAAWxF,IAAX,CAAgByF,IAAhB;AAGA,WAAKD,KAAL,CAAWvF,SAAX,CAAqBwF,IAArB;AAGA,WAAKtE,IAAL,CAAU,QAAV,EAAoB;AAClBuE,QAAAA,MAAM,EAAE,IADU;AAElBC,QAAAA,IAAI,EAAE;AAFY,OAApB;AAIA,WAAKxE,IAAL,CAAU,KAAV,EAAiB;AACfuE,QAAAA,MAAM,EAAE,IADO;AAEfC,QAAAA,IAAI,EAAE;AAFS,OAAjB;AAIA,aAAO,IAAP;AACD;;;WAID,6BAA2B;AACzB,WAAKhE,MAAL,GAAc,IAAd;AACA,WAAKiE,iBAAL,iCACM,KAAKC,gBAAL,EADN,GAEK,KAAKrE,SAFV;;AAMA,kCAA0B,KAAKT,cAAL,EAA1B;AAAA,UAAQ+E,aAAR,yBAAQA,aAAR;;AACA,UAAIA,aAAJ,aAAIA,aAAJ,eAAIA,aAAa,CAAEjF,MAAnB,EAA2B;AACzB,aAAKkC,YAAL,CAAkBgD,YAAlB;AACA,aAAKC,cAAL,GAAsB,IAAtB;AACD;AACF;;;WACD,eACEb,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AAEA,WAAKC,oBAAL,CAA0B,OAA1B,EAAmCE,KAAnC,EAA0Cc,MAA1C,EAAkDjB,aAAlD;AASA,aAAO,IAAP;AACD;;;WAGD,iBACEG,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AACA,WAAKC,oBAAL,CAA0B,SAA1B,EAAqCE,KAArC,EAA4Cc,MAA5C,EAAoDjB,aAApD;AACA,aAAO,IAAP;AACD;;;WAED,gBACEG,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AACA,WAAKC,oBAAL,CAA0B,QAA1B,EAAoCE,KAApC,EAA2Cc,MAA3C,EAAmDjB,aAAnD;AACA,aAAO,IAAP;AACD;;;WACD,cACEG,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AACA,WAAKC,oBAAL,CAA0B,MAA1B,EAAkCE,KAAlC,EAAyCc,MAAzC,EAAiDjB,aAAjD;AACA,aAAO,IAAP;AACD;;;WAED,gBACEG,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AACA,WAAKC,oBAAL,CAA0B,QAA1B,EAAoCE,KAApC,EAA2Cc,MAA3C,EAAmDjB,aAAnD;AACA,aAAO,IAAP;AACD;;;WAED,eACEG,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AAAA;;AACA,UAAMkB,SAAS,4BAAG,KAAK5B,qBAAR,oFAAG,sBAA4B6B,sBAA5B,CAChB,OADgB,CAAH,qFAAG,uBAEfjB,KAFY,2DAAG,uBAERC,KAFV;AAGA,UAAMiB,YAAY,GAAGjB,KAArB;AACA,WAAKkB,WAAL,GAAmB;AACjBlB,QAAAA,KAAK,EAALA,KADiB;AAEjBc,QAAAA,MAAM,EAANA;AAFiB,OAAnB;AAIA,WAAKhB,oBAAL,CAA0B,OAA1B,EAAmCE,KAAnC,EAA0Cc,MAA1C,EAAkDjB,aAAlD;AAEA1F,MAAAA,WAAW,CAAC,IAAD,EAAO4G,SAAP,EAAkBE,YAAlB,CAAX;AACA,aAAO,IAAP;AACD;;;WACD,eACEjB,KADF,EAEEc,MAFF,EAGEjB,aAHF,EAIE;AACA,WAAKL,sBAAL,CAA4BpC,IAA5B,CAAiC;AAC/BsC,QAAAA,aAAa,EAAE,OADgB;AAE/BC,QAAAA,cAAc,EAAEK,KAFe;AAG/BJ,QAAAA,eAAe,EAAEkB,MAHc;AAI/BjB,QAAAA,aAAa,EAAbA;AAJ+B,OAAjC;AAMA,aAAO,IAAP;AACD;;;WACD,iBAAesB,OAAf,EAAkD;AAChD,UAAIC,UAAmC,GAAG,EAA1C;;AACA,UAAI,UAASD,OAAT,CAAJ,EAAuB;AACrBC,QAAAA,UAAU,CAAC1F,MAAX,GAAoB,IAApB;AACA0F,QAAAA,UAAU,mCACLA,UADK,GAELD,OAFK,CAAV;AAID,OAND,MAMO;AACLC,QAAAA,UAAU,CAAC1F,MAAX,GAAoByF,OAApB;AACD;;AACD,WAAKV,iBAAL,CAAuB;AACrBE,QAAAA,aAAa,EAAES;AADM,OAAvB;AAIA,aAAO,IAAP;AACD;;;WAED,gBAAcC,IAAd,EAAyBF,OAAzB,EAAuD;AACrD,UAAIE,IAAJ,aAAIA,IAAJ,eAAIA,IAAI,CAAEA,IAAV,EAAgB;AAEd,aAAKC,SAAL,CAAeD,IAAf;AACA,eAAO,IAAP;AACD;;AACD,WAAKE,YAAL,GAAoB;AAClBF,QAAAA,IAAI,EAAJA,IADkB;AAElBF,QAAAA,OAAO,EAAPA;AAFkB,OAApB;AAIA,WAAKK,WAAL,GAAmB,CAAnB;AACA,aAAO,IAAP;AACD;;;WACD,iBAAeH,IAAf,EAA0BF,OAA1B,EAAgD;AAAA;;AAC9C,UAAI,KAAK3E,MAAT,EAAiB;AACf,aAAKiF,WAAL,CAAiBC,OAAjB,CAAyBL,IAAzB,EAA+BF,OAA/B;AACD,OAFD,MAEO;AACL,aAAK5C,EAAL,CAAQ,QAAR,EAAkB,YAAM;AACtB,UAAA,MAAI,CAACkD,WAAL,CAAiBC,OAAjB,CAAyBL,IAAzB,EAA+BF,OAA/B;AACD,SAFD;AAGD;;AAED,aAAO,IAAP;AACD;;;WACD,eACEA,OADF,EAEU;AAAA;;AACR,UAAQ9C,MAAR,GAA4B8C,OAA5B,CAAQ9C,MAAR;AAAA,UAAmBsD,IAAnB,4BAA4BR,OAA5B;;AAGA,UAAI9C,MAAJ,EAAY;AACVrE,QAAAA,eAAe,CAACqE,MAAD,CAAf,CAAwBoB,OAAxB,CACE,UAACmC,IAAD,EAAgD;AAC9C,cAAMC,kBAAkB,GAAG,MAAI,CAACxC,iBAAL,CACxByC,gBADwB,GAExBC,2BAFwB,CAEIH,IAAI,CAAC,CAAD,CAFR,CAA3B;;AAGA,cAAIC,kBAAJ,EAAwB;AACtBA,YAAAA,kBAAkB,CAAChC,aAAnB,CAAiC+B,IAAI,CAAC,CAAD,CAArC;AACD;AACF,SARH;AAUD;;AAED,WAAKvF,SAAL,mCACK,KAAKA,SADV,GAEKsF,IAFL;;AAIA,UAAI,KAAKhF,SAAT,EAAoB;AAClB,aAAK8D,iBAAL,CAAuB,KAAKpE,SAA5B;AACA,aAAK2F,eAAL,GAAuB,IAAvB;AACD;;AACD,aAAO,IAAP;AACD;;;WACD,eAAahC,KAAb,EAAqDiC,GAArD,EAAmE;AACjE,UAAI,UAASjC,KAAT,CAAJ,EAAqB;AACnB,aAAKkC,YAAL,mCACK,KAAKA,YADV,GAEKlC,KAFL;AAID,OALD,MAKO;AACL,aAAKkC,YAAL,CAAkBlC,KAAlB,IAA2BiC,GAA3B;AACD;;AACD,aAAO,IAAP;AACD;;;WAKD,wBAA4B;AAC1B,WAAKE,SAAL,GAAiB,IAAjB;AAEA,WAAKvE,YAAL,CAAkBY,YAAlB;AAEA,WAAK2D,SAAL,GAAiB,KAAjB;AACD;;;WAED,kBAAwB;AAEtB,UAAI,KAAKC,cAAL,GAAsB9D,MAAtB,KAAiC,CAArC,EAAwC;AACtC,aAAK+D,YAAL;AACD;;AACD,aAAO,IAAP;AACD;;;;wEAKD;AAAA;AAAA;AAAA;AAAA;AAAA,sBACM,KAAKD,cAAL,GAAsB9D,MAAtB,KAAiC,CADvC;AAAA;AAAA;AAAA;;AAAA,sBAEQ,KAAKe,iBAAL,IAA0B,KAAKA,iBAAL,CAAuBiD,aAAvB,EAFlC;AAAA;AAAA;AAAA;;AAAA;AAAA,uBAIY,KAAKjD,iBAAL,CAAuBkD,MAAvB,EAJZ;;AAAA;AAAA;AAAA;;AAAA;AAKW,oBAAI,KAAKlD,iBAAT,EAA4B;AAEjC,uBAAKgD,YAAL;AACD,iBAHM,MAGA;AACL,uBAAKA,YAAL;AACD;;AAVL;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAcA,gBAAclB,OAAd,EAAgD;AAC9C,UAAMqB,YAAmC,GAAG,EAA5C;AACAA,MAAAA,YAAY,CAACC,eAAb,GAA+B,UAAStB,OAAT,IAAoB,IAApB,GAA2BA,OAA1D;;AACA,UAAI,UAASA,OAAT,CAAJ,EAAuB;AACrBqB,QAAAA,YAAY,CAACC,eAAb,GAA+B,IAA/B;;AACA,YAAItB,OAAO,CAACnE,KAAZ,EAAmB;AACjBwF,UAAAA,YAAY,CAACE,cAAb,GAA8BvB,OAAO,CAACnE,KAAtC;AACD;;AACD,YAAImE,OAAO,CAACwB,GAAZ,EAAiB;AACfH,UAAAA,YAAY,CAACI,SAAb,GAAyBzB,OAAO,CAACwB,GAAjC;AACD;AACF,OARD,MAQO;AACLH,QAAAA,YAAY,CAACC,eAAb,GAA+B,CAAC,CAACtB,OAAjC;AACD;;AACD,WAAKV,iBAAL,CAAuB+B,YAAvB;AACA,aAAO,IAAP;AACD;;;WACD,mBACErG,EADF,EAEEgF,OAFF,EAGQ;AAAA;;AACN,UAAI,UAAShF,EAAT,CAAJ,EAAkB;AAChB,oBAAyBA,EAAzB,CAAQ0G,CAAR;AAAA,YAAQA,CAAR,sBAAY,CAAZ;AAAA,oBAAyB1G,EAAzB,CAAe2G,CAAf;AAAA,YAAeA,CAAf,sBAAmB,CAAnB;AACA,aAAKrC,iBAAL,CAAuB;AACrBiC,UAAAA,cAAc,EAAE,UAASvB,OAAT,IACZA,OAAO,CAACnE,KADI,GAEZ,KAAKpB,cAAL,GAAsB8G,cAHL;AAIrBE,UAAAA,SAAS,EAAE,UAASzB,OAAT,IACPA,OAAO,CAACwB,GADD,GAEP,KAAK/G,cAAL,GAAsBgH;AANL,SAAvB;AAQA,aAAKG,IAAL,CAAU;AAAEF,UAAAA,CAAC,EAADA,CAAF;AAAKC,UAAAA,CAAC,EAADA;AAAL,SAAV;AACD,OAXD,MAWO;AACL,aAAKrC,iBAAL,CAAuB;AACrBuC,UAAAA,eAAe,EAAE7G,EADI;AAErBuG,UAAAA,cAAc,EAAE,UAASvB,OAAT,IACZA,OAAO,CAACnE,KADI,GAEZ,KAAKpB,cAAL,GAAsB8G,cAJL;AAKrBE,UAAAA,SAAS,EAAE,UAASzB,OAAT,IACPA,OAAO,CAACwB,GADD,GAEP,KAAK/G,cAAL,GAAsBgH;AAPL,SAAvB;AASA,aAAKvC,KAAL,CAAW/E,YAAX,CACGgF,IADH,CACQxG,kBAAkB,CAACqC,EAAD,CAD1B,EAGG8G,IAHH,CAGQ,YAAM;AACVC,UAAAA,UAAU,CAAC,YAAM;AACf,YAAA,MAAI,CAACjH,QAAL;AACD,WAFS,EAEP,CAFO,CAAV;AAGD,SAPH;AAQD;AACF;;;WAED,gBAAckH,MAAd,EAAuD;AACrD,UAAMX,YAAmC,GAAG,EAA5C;AACAA,MAAAA,YAAY,CAACY,YAAb,GAA4B,UAASD,MAAT,IAAmB,IAAnB,GAA0BA,MAAtD;;AACA,UAAI,UAASA,MAAT,CAAJ,EAAsB;AACpBX,QAAAA,YAAY,CAACY,YAAb,GAA4B,IAA5B;;AACA,YAAID,MAAM,CAACnG,KAAX,EAAkB;AAChBwF,UAAAA,YAAY,CAACa,WAAb,GAA2BF,MAAM,CAACnG,KAAlC;AACD;;AACD,YAAImG,MAAM,CAACR,GAAX,EAAgB;AACdH,UAAAA,YAAY,CAACc,SAAb,GAAyBH,MAAM,CAACR,GAAhC;AACD;AACF,OARD,MAQO;AACLH,QAAAA,YAAY,CAACY,YAAb,GAA4B,CAAC,CAACD,MAA9B;AACD;;AACD,WAAK1C,iBAAL,CAAuB+B,YAAvB;AACA,aAAO,IAAP;AACD;;;WAED,mBACErG,EADF,EAEEgF,OAFF,EAGQ;AAAA;;AACN,UAAI,UAAShF,EAAT,CAAJ,EAAkB;AAChB,qBAAyBA,EAAzB,CAAQ0G,CAAR;AAAA,YAAQA,CAAR,uBAAY,CAAZ;AAAA,qBAAyB1G,EAAzB,CAAe2G,CAAf;AAAA,YAAeA,CAAf,uBAAmB,CAAnB;AACA,aAAKrC,iBAAL,CAAuB;AACrB4C,UAAAA,WAAW,EAAE,UAASlC,OAAT,IACTA,OAAO,CAACnE,KADC,GAET,KAAKpB,cAAL,GAAsByH,WAHL;AAIrBC,UAAAA,SAAS,EAAE,UAASnC,OAAT,IACPA,OAAO,CAACwB,GADD,GAEP,KAAK/G,cAAL,GAAsB0H;AANL,SAAvB;AAQA,aAAKP,IAAL,CAAU;AAAEF,UAAAA,CAAC,EAADA,CAAF;AAAKC,UAAAA,CAAC,EAADA;AAAL,SAAV;AACD,OAXD,MAWO;AACL,aAAKrC,iBAAL,CAAuB;AACrBuC,UAAAA,eAAe,EAAE7G,EADI;AAErBkH,UAAAA,WAAW,EAAE,UAASlC,OAAT,IACTA,OAAO,CAACnE,KADC,GAET,KAAKpB,cAAL,GAAsByH,WAJL;AAKrBC,UAAAA,SAAS,EAAE,UAASnC,OAAT,IACPA,OAAO,CAACwB,GADD,GAEP,KAAK/G,cAAL,GAAsB0H;AAPL,SAAvB;AASA,aAAKjD,KAAL,CAAW/E,YAAX,CACGgF,IADH,CACQxG,kBAAkB,CAACqC,EAAD,CAD1B,EAGG8G,IAHH,CAGQ,YAAM;AACVC,UAAAA,UAAU,CAAC,YAAM;AACf,YAAA,MAAI,CAACjH,QAAL;AACD,WAFS,EAEP,CAFO,CAAV;AAGD,SAPH;AAQD;AACF;;;WACD,kBAAgBuE,IAAhB,EAAsD;AACpD,WAAKC,iBAAL,CAAuB;AACrB8C,QAAAA,KAAK,EAAE/C;AADc,OAAvB;AAGA,WAAKgD,oBAAL,GAA4B,IAA5B;AACA,WAAKvH,QAAL;AACA,aAAO,IAAP;AACD;;;WACD,gBAAsB;AACpB,WAAKwE,iBAAL,CAAuB;AACrBgD,QAAAA,OAAO,EAAE;AADY,OAAvB;AAGA,WAAKxH,QAAL;AACA,aAAO,IAAP;AACD;;;WAED,gBAAsB;AACpB,WAAKwE,iBAAL,CAAuB;AACrBgD,QAAAA,OAAO,EAAE;AADY,OAAvB;AAGA,WAAKxH,QAAL;AACA,aAAO,IAAP;AACD;;;WACD,kBAAgByH,KAAhB,EAAuC;AACrC,WAAKtH,MAAL,GAAcsH,KAAd;AACA,WAAK9F,YAAL,CAAkB+F,qBAAlB;AACA,WAAK/F,YAAL,CAAkBY,YAAlB;AACA,aAAO,IAAP;AACD;;;WAED,0BAAwBrC,EAAxB,EAAoC;AAClC,WAAKyH,aAAL,GAAqBzH,EAArB;AACD;;;WAED,4BAAyC;AACvC,aAAO,KAAKyH,aAAZ;AACD;;;WAED,8BAA4BzH,EAA5B,EAAwC;AACtC,WAAK0H,iBAAL,GAAyB1H,EAAzB;AACD;;;WAED,gCAA6C;AAC3C,aAAO,KAAK0H,iBAAZ;AACD;;;WACD,qBAA4B;AAC1B,UAAMC,IAAI,GAAG,KAAK5F,UAAL,CAAgB6F,OAAhB,EAAb;;AACA,kCAII,KAAKnI,cAAL,EAJJ;AAAA,UACE6H,OADF,yBACEA,OADF;AAAA,wDAEEO,OAFF;AAAA,UAEEA,OAFF,sCAEY,CAACC,QAFb;AAAA,wDAGEC,OAHF;AAAA,UAGEA,OAHF,sCAGYD,QAHZ;;AAKA,aAAO,CAAC,CAACR,OAAF,IAAaK,IAAI,IAAIE,OAArB,IAAgCF,IAAI,IAAII,OAA/C;AACD;;;WAED,oBAAkBF,OAAlB,EAA2C;AACzC,WAAKvD,iBAAL,CAAuB;AACrBuD,QAAAA,OAAO,EAAPA;AADqB,OAAvB;AAGA,aAAO,IAAP;AACD;;;WAED,sBAA4B;AAC1B,kCAAoB,KAAKpI,cAAL,EAApB;AAAA,UAAQoI,OAAR,yBAAQA,OAAR;;AACA,aAAOA,OAAP;AACD;;;WAED,sBAA4B;AAC1B,kCAAoB,KAAKpI,cAAL,EAApB;AAAA,UAAQsI,OAAR,yBAAQA,OAAR;;AACA,aAAOA,OAAP;AACD;;;WAED,aAAWhI,IAAX,EAAyB;AACvB,UAAM+F,GAAG,GAAG,KAAKrG,cAAL,EAAZ;AAEA,aAAOqG,GAAG,CAAC/F,IAAD,CAAV;AACD;;;WAED,oBAAkBgI,OAAlB,EAA2C;AACzC,WAAKzD,iBAAL,CAAuB;AACrByD,QAAAA,OAAO,EAAPA;AADqB,OAAvB;AAGA,aAAO,IAAP;AACD;;;WAED,oBAAkBrI,OAAlB,EAA4C;AAC1C,WAAK4E,iBAAL,CAAuB;AACrB5E,QAAAA,OAAO,EAAPA;AADqB,OAAvB;AAGA,aAAO,IAAP;AACD;;;WAKD,mBAAiBC,gBAAjB,EAAqD;AACnD,UAAI,CAAC,KAAKU,MAAV,EAAkB;AAChB,aAAKiE,iBAAL,CAAuB;AACrB5E,UAAAA,OAAO,EAAE;AADY,SAAvB;AAGA,eAAO,IAAP;AACD;;AACD,UAAMsI,MAAM,GAAG,KAAKC,SAAL,EAAf;AACA,UAAMC,MAAM,GAAGF,MAAM,CAACE,MAAtB;AACA,UAAMC,OAAO,GAAGD,MAAM,CAACE,IAAP,CAAY,UAACC,CAAD;AAAA,eAAOC,IAAI,CAACC,GAAL,CAASF,CAAT,MAAgBP,QAAvB;AAAA,OAAZ,CAAhB;;AACA,UAAIK,OAAJ,EAAa;AACX,eAAO,IAAP;AACD;;AACD,WAAKpG,UAAL,CAAgBnC,SAAhB,CACE,CACE,CAACsI,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CADF,EAEE,CAACA,MAAM,CAAC,CAAD,CAAP,EAAYA,MAAM,CAAC,CAAD,CAAlB,CAFF,CADF,EAKEvI,gBALF;AAOA,aAAO,IAAP;AACD;;;WAED,mBAAiB;AAEf,UAAI,KAAK6I,WAAT,EAAsB;AACpB;AACD;;AACD,WAAKtE,KAAL,CAAW7E,aAAX,CAAyB8E,IAAzB;AAEA,WAAKmB,WAAL,CAAiBmD,GAAjB,CAAqB,QAArB,EAA+B,KAAKC,WAApC;AAEA,WAAKxF,iBAAL,CAAuByF,OAAvB;AAGA,WAAK3F,qBAAL,CAA2B4F,kBAA3B;AAIA,WAAK1E,KAAL,CAAW5E,YAAX,CAAwB6E,IAAxB;AAKA,WAAK0E,MAAL,GAAc,EAAd;AAEA,WAAKpH,YAAL,CAAkBqH,WAAlB,CAA8B,IAA9B;AAEA,WAAKjJ,IAAL,CAAU,QAAV,EAAoB;AAClBuE,QAAAA,MAAM,EAAE,IADU;AAElBC,QAAAA,IAAI,EAAE;AAFY,OAApB;AAKA,WAAKxE,IAAL,CAAU,SAAV,EAAqB;AACnBuE,QAAAA,MAAM,EAAE,IADW;AAEnBC,QAAAA,IAAI,EAAE;AAFa,OAArB;AAKA,WAAK0E,kBAAL;AAIA,WAAKP,WAAL,GAAmB,IAAnB;AACD;;;WACD,iBAAe;AACb,WAAKxF,qBAAL,CAA2B4F,kBAA3B;AAED;;;WACD,uBAAqB;AACnB,WAAKC,MAAL,CAAYvF,OAAZ,CAAoB,UAAC0F,KAAD;AAAA,eAAWA,KAAK,CAACL,OAAN,EAAX;AAAA,OAApB;AACA,WAAKM,UAAL,CAAgBC,WAAhB;AACD;;;WAED,mBAAiB;AACf,aAAO,CAAC,CAAC,CACP,KAAKlG,qBAAL,CAA2BmG,uBAA3B,MAAwD,EADjD,EAEPC,MAFO,CAGP,UAACC,SAAD;AAAA,eACEA,SAAS,CAACC,WAAV,IACAD,SAAS,CAACE,aADV,IAEAF,SAAS,CAACG,sBAHZ;AAAA,OAHO,EAOPrH,MAPF;AAQD;;;WAED,mBAAiB6F,MAAjB,EAAiC;AAE/B,UAAI,KAAK1C,WAAT,EAAsB;AACpB,aAAKA,WAAL,CAAiBmD,GAAjB,CAAqB,QAArB,EAA+B,KAAKC,WAApC;AACD;;AAED,WAAKpD,WAAL,GAAmB0C,MAAnB;AACA,WAAK3C,WAAL,GAAmB,CAAnB;;AAGA,UAAI,KAAKhF,MAAL,IAAe,KAAKiF,WAAL,CAAiBmE,OAApC,EAA6C;AAC3C,YAAM9B,IAAI,GAAG,KAAK5F,UAAL,CAAgB6F,OAAhB,EAAb;AACA,aAAKtC,WAAL,CAAiBoE,iBAAjB,CAAmC/B,IAAnC;AACD;;AAED,WAAKrC,WAAL,CAAiBlD,EAAjB,CAAoB,QAApB,EAA8B,KAAKsG,WAAnC;AACD;;;WACD,qBAAmB;AACjB,aAAO,KAAKpD,WAAZ;AACD;;;WAED,2BAAyB;AACvB,aAAO,KAAKS,YAAZ;AACD;;;WAED,wBAAsB4D,WAAtB,EAAqD;AACnD,WAAKA,WAAL,GAAmBA,WAAnB;AACD;;;WACD,0BAAwB;AACtB,aAAO,KAAKA,WAAZ;AACD;;;WAED,kBAAgB5J,IAAhB,EAAmC;AACjC,aAAO,KAAKiD,qBAAL,CAA2B4G,sBAA3B,CAAkD7J,IAAlD,CAAP;AACD;;;WAED,wBAAsBA,IAAtB,EAAiD;AAC/C,UAAM6D,KAAK,GAAG,KAAKZ,qBAAL,CAA2B4G,sBAA3B,CAAkD7J,IAAlD,CAAd;;AAGA,UAAI,CAAC6D,KAAL,EAAY;AACV,eAAO,EAAP;AACD;;AAED,UAAIA,KAAK,CAACiG,YAAV,EAAwB;AAEtB,YAAMC,KAA2B,GAAGlG,KAAK,CAACmG,KAAN,GAAcC,GAAd,CAAkB,UAACC,IAAD,EAAkB;AACtE;AACEC,YAAAA,KAAK,EAAEtG,KAAK,CAACiG,YAAN,CAAmBI,IAAnB;AADT,aAEGlK,IAFH,EAEUkK,IAFV;AAID,SALmC,CAApC;AAOA,eAAOH,KAAP;AACD,OAVD,MAUO,IAAIlG,KAAK,CAACuG,KAAV,EAAiB;AAEtB,YAAML,MAA8B,GAAGlG,KAAK,CACzCuG,KADoC,GAEpCH,GAFoC,CAEhC,UAACC,IAAD,EAAkB;AACrB;AACEC,YAAAA,KAAK,EAAED;AADT,aAEGlK,IAFH,EAEU6D,KAAK,CAACqG,IAAD,CAFf;AAID,SAPoC,CAAvC;;AASA,eAAOH,MAAP;AACD,OAZM,MAYA,IAAIlG,KAAJ,aAAIA,KAAJ,eAAIA,KAAK,CAAEwG,MAAX,EAAmB;AAExB,YAAMN,OAA8B,GAAGlG,KAAK,CACzCwG,MADoC,GAEpChB,MAFoC,CAE7B,UAACa,IAAD;AAAA,iBAAuC,CAAC,aAAYA,IAAZ,CAAxC;AAAA,SAF6B,EAGpCD,GAHoC,CAGhC,UAACC,IAAD,EAA2B;AAC9B;AACEC,YAAAA,KAAK,EAAED;AADT,aAEGlK,IAFH,EAEU6D,KAAK,CAACqG,IAAD,CAFf;AAID,SARoC,CAAvC;;AAUA,eAAOH,OAAP;AACD;;AAED,aAAO,EAAP;AACD;;;WAED,qBAAgD;AAAA,UAAlCpD,CAAkC,SAAlCA,CAAkC;AAAA,UAA/BC,CAA+B,SAA/BA,CAA+B;AAC9C,WAAKhF,kBAAL,CAAwB0I,YAAxB,CAAqC;AAAE3D,QAAAA,CAAC,EAADA,CAAF;AAAKC,QAAAA,CAAC,EAADA;AAAL,OAArC;AACD;;;WAED,mBACE2D,GADF,EAEEC,EAFF,EAGE;AACA,WAAK1I,cAAL,CAAoB2I,YAApB,CAAiC,IAAjC,EAAuCF,GAAvC,EAA4CC,EAA5C;AACD;;;WAED,yBACEvF,OADF,EAGU;AACR,UACEyF,UADF,GAOIzF,OAPJ,CACEyF,UADF;AAAA,UAEEC,YAFF,GAOI1F,OAPJ,CAEE0F,YAFF;AAAA,UAGEC,cAHF,GAOI3F,OAPJ,CAGE2F,cAHF;AAAA,UAIEC,aAJF,GAOI5F,OAPJ,CAIE4F,aAJF;AAAA,UAKEC,aALF,GAOI7F,OAPJ,CAKE6F,aALF;AAAA,UAMKrF,IANL,4BAOIR,OAPJ;;AAQA,WAAKtC,mBAAL,CAAyBoI,cAAzB,CAAwCL,UAAxC,EAAoD;AAClDM,QAAAA,EAAE,EAAEL,YAD8C;AAElDM,QAAAA,EAAE,EAAEL;AAF8C,OAApD;;AAIA,kCAA6B,KAAKjI,mBAAL,CAAyBuI,SAAzB,CAAmCR,UAAnC,CAA7B;AAAA,UAAQM,EAAR,yBAAQA,EAAR;AAAA,UAAYC,EAAZ,yBAAYA,EAAZ;AAAA,UAAgBE,QAAhB,yBAAgBA,QAAhB;;AACA,UAAQC,WAAR,GAAwB,KAAK5J,eAA7B,CAAQ4J,WAAR;;AACA,mCAGI,KAAKnI,qBAAL,CAA2BoI,0BAA3B,CACF,KAAKzB,WADH,EAEFiB,aAFE,EAGFC,aAHE,CAHJ;AAAA,UACEQ,UADF,0BACEA,UADF;AAAA,UAEEC,QAFF,0BAEEA,QAFF;;AAQA,aAAOH,WAAW;AAChBE,QAAAA,UAAU,EAAVA,UADgB;AAEhBH,QAAAA,QAAQ,EAARA,QAFgB;AAGhBF,QAAAA,EAAE,EAAFA,EAHgB;AAIhBD,QAAAA,EAAE,EAAFA,EAJgB;AAKhBO,QAAAA,QAAQ,EAARA,QALgB;AAMhBlE,QAAAA,KAAK,EAAEtJ,UAAU,CAACN,SAAS,CAAC+N,MAAX;AAND,SAOb/F,IAPa,EAAlB;AASD;;;WAED,mBAAiB;AACf,aAAO,KAAK/D,YAAL,CAAkB+J,KAAlB,CAAwBC,QAAxB,EAAP;AACD;;;WACD,+BAA6B;AAC3B,WAAKC,gBAAL,GAAwB,KAAKjK,YAAL,CAAkB+J,KAAlB,CAAwBG,cAAxB,EAAxB;AACD;;;WACD,uBAAqB;AACnB,UAAI,KAAKjH,cAAT,EAAyB;AACvB,aAAKjD,YAAL,CAAkBmK,WAAlB;AACA,aAAKlH,cAAL,GAAsB,KAAtB;AACA,aAAKJ,iBAAL,CAAuB;AACrBE,UAAAA,aAAa,EAAE;AACbjF,YAAAA,MAAM,EAAE;AADK;AADM,SAAvB;AAKD;AACF;;;WACD,+BAAqC;AACnC,aAAO,KAAKkC,YAAL,CAAkB+J,KAAlB,CAAwBG,cAAxB,KAA2C,KAAKD,gBAAvD;AACD;;;WAED,kBAAgBrH,IAAhB,EAAuC;AACrC,kCAGI,KAAK5E,cAAL,EAHJ;AAAA,yDACE6G,eADF;AAAA,UACEA,eADF,uCACoB,IADpB;AAAA,yDAEEW,YAFF;AAAA,UAEEA,YAFF,uCAEiB,IAFjB;;AAKA,UAAI4E,MAAM,GACR,KAAKC,UAAL,GAAkBC,OAAlB,CAA0B1H,IAA1B,MAAoC,CAAC,CAArC,IACA,KAAKyH,UAAL,GAAkBC,OAAlB,CAA0B,OAAO1H,IAAjC,MAA2C,CAAC,CAF9C;;AAGA,UAAI,CAACA,IAAI,KAAK,OAAT,IAAoBA,IAAI,KAAK,UAA9B,KAA6C4C,YAAjD,EAA+D;AAC7D4E,QAAAA,MAAM,GAAG,IAAT;AACD;;AACD,UACExH,IAAI,KAAK,WAAT,KACCiC,eAAe,IACd,KAAKwF,UAAL,GAAkBC,OAAlB,CAA0B,YAA1B,MAA4C,CAAC,CAD9C,IAEC,KAAKD,UAAL,GAAkBC,OAAlB,CAA0B,aAA1B,MAA6C,CAAC,CAF/C,IAGC,KAAKD,UAAL,GAAkBC,OAAlB,CAA0B,UAA1B,MAA0C,CAAC,CAJ7C,CADF,EAME;AACAF,QAAAA,MAAM,GAAG,IAAT;AACD;;AACD,aAAO,KAAKG,SAAL,MAAoBH,MAA3B;AACD;;;WAED,uBAAqB;AACnB,YAAM,IAAII,KAAJ,CAAU,yBAAV,CAAN;AACD;;;WACD,yBAAuB;AACrB,YAAM,IAAIA,KAAJ,CAAU,yBAAV,CAAN;AACD;;;;sEAED,kBAA2B/I,iBAA3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,uBACQA,iBAAiB,CAACkD,MAAlB,EADR;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,O;;;;;;;;;;WAIA,sBAAoB8F,SAApB,EAAyC;AAAA;;AAEvC,UAAI,KAAKjG,cAAL,GAAsB9D,MAAtB,GAA+B,CAAnC,EAAsC;AACpC,YAAI,KAAKkF,oBAAL,IAA6B,KAAK4B,UAAtC,EAAkD;AAChD,eAAKJ,MAAL,GAAc,KAAKI,UAAL,CAAgBkD,WAAhB,EAAd;AACA,eAAKjI,KAAL,CAAWtF,YAAX,CAAwBuF,IAAxB;AACA,eAAKkD,oBAAL,GAA4B,KAA5B;AACD;;AACD,aAAKwB,MAAL,CAAYvF,OAAZ,CAAoB,UAAC0F,KAAD,EAAW;AAC7BA,UAAAA,KAAK,CAACoD,IAAN,CACE;AACElB,YAAAA,QAAQ,EAAE,MAAI,CAACjC,UAAL,CAAgBoD,YAAhB;AADZ,WADF,EAIEH,SAJF;AAMD,SAPD;AAQD;;AACD,aAAO,IAAP;AACD;;;WAED,8BACE7H,IADF,EAEER,KAFF,EAGEc,MAHF,EAIEjB,aAJF,EAKE;AACA,UAAI,CAAC,KAAKrD,MAAV,EAAkB;AAChB,aAAKgD,sBAAL,CAA4BpC,IAA5B,CAAiC;AAC/BsC,UAAAA,aAAa,EAAEc,IADgB;AAE/Bb,UAAAA,cAAc,EAAEK,KAFe;AAG/BJ,UAAAA,eAAe,EAAEkB,MAHc;AAI/BjB,UAAAA,aAAa,EAAbA;AAJ+B,SAAjC;AAMD,OAPD,MAOO;AACL,aAAKV,qBAAL,CAA2BW,oBAA3B,CACEU,IADF,EAEE;AAEET,UAAAA,KAAK;AACHC,YAAAA,KAAK,EAALA;AADG,aAEA,KAAKC,iCAAL,CAEDa,MAFC,EAID,KAAKlF,cAAL,GAAsBoE,KAAtB,CAJC,CAFA;AAFP,SAFF,EAeEH,aAfF;AAiBD;AACF;;;WAED,6BAA2B;AACzB,aAAO,KAAKjC,YAAL,CAAkB6K,iBAAlB,EAAP;AACD;;;WAMD,sBAAoBC,IAApB,EAAkC;AAChCC,MAAAA,OAAO,CAACC,IAAR,CAAa,UAAb;AACD;;;WAED,2BAA4B;AAC1B,YAAM,IAAIR,KAAJ,CAAU,yBAAV,CAAN;AACD;;;WAED,wBAAkC;AAChC,YAAM,IAAIA,KAAJ,CAAU,yBAAV,CAAN;AACD;;;WACD,4BAA6B;AAC3B,aAAO,EAAP;AACD;;;WAaD,oBAAmB;AACjB,UAAI,KAAK5L,MAAT,EAAiB;AACf,aAAKoB,YAAL,CAAkB+F,qBAAlB;AACA,aAAK/F,YAAL,CAAkBY,YAAlB;AACD;AACF;;;WACD,2CACEqK,gBADF,EAEEC,aAFF,EAGE;AACA,aAAO;AACLhI,QAAAA,MAAM,EAAE,YAAW+H,gBAAX,IACJE,SADI,GAEJF,gBAAgB,IAAIC,aAHnB;AAILE,QAAAA,QAAQ,EAAE,YAAWH,gBAAX,IAA+BA,gBAA/B,GAAkDE;AAJvD,OAAP;AAMD;;;;EAlmCiEhP,Y;;;;;;SAA/CM,S","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n return this;\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n updateShape(this, lastShape, currentShape);\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n // debugger\n if (this.isDestroied) {\n return;\n }\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n // this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
|
@@ -18,7 +18,7 @@ import { PointExtrudeTriangulation } from '../../core/triangulation';
|
|
|
18
18
|
import { lglt2xyz } from '../../earth/utils';
|
|
19
19
|
import { calculateCentroid } from '../../utils/geo';
|
|
20
20
|
var pointExtrudeFrag = "varying vec4 v_color;\nuniform float u_opacity: 1.0;\n\nvarying float v_z;\nvarying float v_lightWeight;\nuniform float u_pickLight: 0.0;\n\n#pragma include \"picking\"\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\n\nuniform float u_opacitylinear: 0.0;\nuniform float u_opacitylinear_dir: 1.0;\n\nvoid main() {\n float opacity = styleMappingMat[0][0];\n\n // \u8BBE\u7F6E\u5706\u67F1\u7684\u5E95\u8272\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n gl_FragColor = mix(u_sourceColor, u_targetColor, v_z);\n gl_FragColor.rgb *= v_lightWeight;\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n gl_FragColor = v_color;\n }\n\n // \u5E94\u7528\u900F\u660E\u5EA6\n gl_FragColor.a *= opacity;\n\n // \u5F00\u542F\u900F\u660E\u5EA6\u6E10\u53D8\n if(u_opacitylinear > 0.0) {\n gl_FragColor.a *= u_opacitylinear_dir > 0.0 ? (1.0 - v_z): v_z;\n }\n\n // picking\n if(u_pickLight > 0.0) {\n gl_FragColor = filterColorWithLight(gl_FragColor, v_lightWeight);\n } else {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
21
|
-
var pointExtrudeVert = "precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nattribute vec3 a_Position;\nattribute vec3 a_Pos;\nattribute vec4 a_Color;\nattribute vec3 a_Size;\nattribute vec3 a_Normal;\n\nuniform float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\nuniform float u_globel;\nuniform float u_r;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nvarying vec4 v_color;\n\nuniform float u_opacity : 1;\nuniform float u_lightEnable: 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nvarying float v_z;\nvarying float v_lightWeight;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"light\"\n#pragma include \"picking\"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) + \n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_z = a_Position.z;\n\n \n\n // vec2 offset = project_pixel(size.xy);\n // vec2 offset = (size.xy);\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n offset = project_pixel(offset);\n }\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z) * u_r, 1.0);\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n // float lightWeight = u_lightEnable > 0.0 ? calc_lighting(pos): 1.0;\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n\n v_color =vec4(a_Color.rgb * lightWeight, a_Color.w);\n\n // gl_Position = project_common_position_to_clipspace(pos);\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * pos;\n } else {\n gl_Position = project_common_position_to_clipspace(pos);\n }\n \n if(u_globel > 0.0) {\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0, \n 0,xcos,-xsin,0, \n 0,xsin,xcos,0, \n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0, \n 0,1,0,0, \n ysin,0,ycos,0, \n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
21
|
+
var pointExtrudeVert = "precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nattribute vec3 a_Position;\nattribute vec3 a_Pos;\nattribute vec4 a_Color;\nattribute vec3 a_Size;\nattribute vec3 a_Normal;\n\nuniform float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\nuniform float u_globel;\nuniform float u_r;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nvarying vec4 v_color;\n\nuniform float u_opacity : 1;\nuniform float u_lightEnable: 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nvarying float v_z;\nvarying float v_lightWeight;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"light\"\n#pragma include \"picking\"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) + \n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_z = a_Position.z;\n\n \n\n // vec2 offset = project_pixel(size.xy);\n // vec2 offset = (size.xy);\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n // offset = project_pixel(offset);\n if (u_CoordinateSystem == COORDINATE_SYSTEM_P20 || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {\n // P20 \u5750\u6807\u7CFB\u4E0B\uFF0C\u4E3A\u4E86\u548C Web \u58A8\u5361\u6258\u5750\u6807\u7CFB\u7EDF\u4E00\uFF0Czoom \u9ED8\u8BA4\u51CF1\n offset = offset * pow(2.0, (19.0 - u_Zoom));\n }\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n // P20_2 \u5750\u6807\u7CFB\u4E0B\uFF0C\u4E3A\u4E86\u548C Web \u58A8\u5361\u6258\u5750\u6807\u7CFB\u7EDF\u4E00\uFF0Czoom \u9ED8\u8BA4\u51CF3\n offset = offset * pow(2.0, (19.0 - 3.0 - u_Zoom));\n }\n } else {// \u5706\u67F1\u4F53\u56FA\u5B9A\u9AD8\u5EA6 \uFF08 \u5904\u7406 mapbox \uFF09\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n offset *= 4.0/pow(2.0, 21.0 - u_Zoom);\n }\n }\n\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z) * u_r, 1.0);\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n // float lightWeight = u_lightEnable > 0.0 ? calc_lighting(pos): 1.0;\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n\n v_color =vec4(a_Color.rgb * lightWeight, a_Color.w);\n\n // gl_Position = project_common_position_to_clipspace(pos);\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * pos;\n } else {\n gl_Position = project_common_position_to_clipspace(pos);\n }\n \n if(u_globel > 0.0) {\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0, \n 0,xcos,-xsin,0, \n 0,xsin,xcos,0, \n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0, \n 0,1,0,0, \n ysin,0,ycos,0, \n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
22
22
|
|
|
23
23
|
var ExtrudeModel = function (_BaseModel) {
|
|
24
24
|
_inherits(ExtrudeModel, _BaseModel);
|
package/es/point/models/fill.js
CHANGED
|
@@ -17,7 +17,7 @@ import { AttributeType, gl } from '@antv/l7-core';
|
|
|
17
17
|
import { getMask } from '@antv/l7-utils';
|
|
18
18
|
import BaseModel from '../../core/BaseModel';
|
|
19
19
|
import { GlobelPointFillTriangulation, PointFillTriangulation } from '../../core/triangulation';
|
|
20
|
-
var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n float r = v_radius / (v_radius + strokeWidth);\n\n // 'circle'\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n \n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float PI = 3.14159;\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n\n // TODO: \u6839\u636E\u53E0\u52A0\u6C34\u6CE2\u6548\u679C\n gl_FragColor = vec4(v_color.xyz, v_color.a * opacity * intensity);\n\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\n if(d < 0.5) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
20
|
+
var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n float r = v_radius / (v_radius + strokeWidth);\n\n // 'circle'\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n \n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float PI = 3.14159;\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n\n // TODO: \u6839\u636E\u53E0\u52A0\u6C34\u6CE2\u6548\u679C\n gl_FragColor = vec4(v_color.xyz, v_color.a * opacity * intensity);\n\n if(u_additive > 0.0) {\n gl_FragColor *= gl_FragColor.a;\n } \n\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\n if(d < 0.5) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
21
21
|
var pointFillFrag = "\nuniform float u_globel;\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiasblur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(strokeWidth < 0.01) {\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n } else {\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n gl_FragColor *= opacity_t;\n } else {\n gl_FragColor.a *= opacity_t;\n }\n\n if(gl_FragColor.a > 0.0) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
22
22
|
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n antialiasblur *= pow(19.0 - u_Zoom, 2.0);\n antialiasblur = max(antialiasblur, -0.01);\n // offset *= 0.5;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
23
23
|
import { Version } from '@antv/l7-maps';
|
package/lib/core/BaseLayer.js
CHANGED
|
@@ -241,6 +241,17 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
241
241
|
this.interactionService = this.container.get(_l7Core.TYPES.IInteractionService);
|
|
242
242
|
this.pickingService = this.container.get(_l7Core.TYPES.IPickingService);
|
|
243
243
|
this.mapService = this.container.get(_l7Core.TYPES.IMapService);
|
|
244
|
+
|
|
245
|
+
var _this$getLayerConfig2 = this.getLayerConfig(),
|
|
246
|
+
enableMultiPassRenderer = _this$getLayerConfig2.enableMultiPassRenderer,
|
|
247
|
+
passes = _this$getLayerConfig2.passes;
|
|
248
|
+
|
|
249
|
+
if (enableMultiPassRenderer && passes !== null && passes !== void 0 && passes.length && passes.length > 0) {
|
|
250
|
+
this.mapService.on('mapAfterFrameChange', function () {
|
|
251
|
+
_this2.renderLayers();
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
|
|
244
255
|
this.cameraService = this.container.get(_l7Core.TYPES.ICameraService);
|
|
245
256
|
this.coordinateService = this.container.get(_l7Core.TYPES.ICoordinateSystemService);
|
|
246
257
|
this.shaderModuleService = this.container.get(_l7Core.TYPES.IShaderModuleService);
|
|
@@ -302,8 +313,8 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
302
313
|
this.inited = true;
|
|
303
314
|
this.updateLayerConfig(_objectSpread(_objectSpread({}, this.getDefaultConfig()), this.rawConfig));
|
|
304
315
|
|
|
305
|
-
var _this$
|
|
306
|
-
animateOption = _this$
|
|
316
|
+
var _this$getLayerConfig3 = this.getLayerConfig(),
|
|
317
|
+
animateOption = _this$getLayerConfig3.animateOption;
|
|
307
318
|
|
|
308
319
|
if (animateOption !== null && animateOption !== void 0 && animateOption.enable) {
|
|
309
320
|
this.layerService.startAnimate();
|
|
@@ -682,12 +693,12 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
682
693
|
value: function isVisible() {
|
|
683
694
|
var zoom = this.mapService.getZoom();
|
|
684
695
|
|
|
685
|
-
var _this$
|
|
686
|
-
visible = _this$
|
|
687
|
-
_this$
|
|
688
|
-
minZoom = _this$
|
|
689
|
-
_this$
|
|
690
|
-
maxZoom = _this$
|
|
696
|
+
var _this$getLayerConfig4 = this.getLayerConfig(),
|
|
697
|
+
visible = _this$getLayerConfig4.visible,
|
|
698
|
+
_this$getLayerConfig5 = _this$getLayerConfig4.minZoom,
|
|
699
|
+
minZoom = _this$getLayerConfig5 === void 0 ? -Infinity : _this$getLayerConfig5,
|
|
700
|
+
_this$getLayerConfig6 = _this$getLayerConfig4.maxZoom,
|
|
701
|
+
maxZoom = _this$getLayerConfig6 === void 0 ? Infinity : _this$getLayerConfig6;
|
|
691
702
|
|
|
692
703
|
return !!visible && zoom >= minZoom && zoom <= maxZoom;
|
|
693
704
|
}
|
|
@@ -702,16 +713,16 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
702
713
|
}, {
|
|
703
714
|
key: "getMinZoom",
|
|
704
715
|
value: function getMinZoom() {
|
|
705
|
-
var _this$
|
|
706
|
-
minZoom = _this$
|
|
716
|
+
var _this$getLayerConfig7 = this.getLayerConfig(),
|
|
717
|
+
minZoom = _this$getLayerConfig7.minZoom;
|
|
707
718
|
|
|
708
719
|
return minZoom;
|
|
709
720
|
}
|
|
710
721
|
}, {
|
|
711
722
|
key: "getMaxZoom",
|
|
712
723
|
value: function getMaxZoom() {
|
|
713
|
-
var _this$
|
|
714
|
-
maxZoom = _this$
|
|
724
|
+
var _this$getLayerConfig8 = this.getLayerConfig(),
|
|
725
|
+
maxZoom = _this$getLayerConfig8.maxZoom;
|
|
715
726
|
|
|
716
727
|
return maxZoom;
|
|
717
728
|
}
|
|
@@ -729,6 +740,14 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
729
740
|
});
|
|
730
741
|
return this;
|
|
731
742
|
}
|
|
743
|
+
}, {
|
|
744
|
+
key: "setAutoFit",
|
|
745
|
+
value: function setAutoFit(autoFit) {
|
|
746
|
+
this.updateLayerConfig({
|
|
747
|
+
autoFit: autoFit
|
|
748
|
+
});
|
|
749
|
+
return this;
|
|
750
|
+
}
|
|
732
751
|
}, {
|
|
733
752
|
key: "fitBounds",
|
|
734
753
|
value: function fitBounds(fitBoundsOptions) {
|
|
@@ -957,11 +976,11 @@ var BaseLayer = (_dec = (0, _l7Core.lazyInject)(_l7Core.TYPES.IGlobalConfigServi
|
|
|
957
976
|
}, {
|
|
958
977
|
key: "needPick",
|
|
959
978
|
value: function needPick(type) {
|
|
960
|
-
var _this$
|
|
961
|
-
_this$
|
|
962
|
-
enableHighlight = _this$
|
|
963
|
-
_this$
|
|
964
|
-
enableSelect = _this$
|
|
979
|
+
var _this$getLayerConfig9 = this.getLayerConfig(),
|
|
980
|
+
_this$getLayerConfig10 = _this$getLayerConfig9.enableHighlight,
|
|
981
|
+
enableHighlight = _this$getLayerConfig10 === void 0 ? true : _this$getLayerConfig10,
|
|
982
|
+
_this$getLayerConfig11 = _this$getLayerConfig9.enableSelect,
|
|
983
|
+
enableSelect = _this$getLayerConfig11 === void 0 ? true : _this$getLayerConfig11;
|
|
965
984
|
|
|
966
985
|
var isPick = this.eventNames().indexOf(type) !== -1 || this.eventNames().indexOf('un' + type) !== -1;
|
|
967
986
|
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["layerIdCounter","BaseLayer","TYPES","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","SyncBailHook","afterInit","beforeRender","beforeRenderData","SyncWaterfallHook","afterRender","SyncHook","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","push","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","getLayerStyleAttribute","currentShape","shapeOption","options","rawAnimate","data","setSource","sourceOption","clusterZoom","layerSource","setData","on","passes","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","renderLayers","getEncodedData","length","renderModels","getRenderFlag","render","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","isDestroied","off","sourceEvent","destroy","clearAllAttributes","models","cleanRemove","removeAllListeners","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","map","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","BlendTypes","BlendType","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","isPicking","buildModels","draw","getUninforms","getShaderPickStat","time","console","warn","valuesOrCallback","defaultValues","undefined","callback","EventEmitter"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n return this;\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n updateShape(this, lastShape, currentShape);\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n // debugger\n if (this.isDestroied) {\n return;\n }\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n // this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
|
1
|
+
{"version":3,"sources":["../../src/core/BaseLayer.ts"],"names":["layerIdCounter","BaseLayer","TYPES","IGlobalConfigService","config","dataSourceNeedUpdate","dataMappingNeedUpdate","filterNeedUpdate","featureScaleNeedUpdate","StyleAttrNeedUpdate","init","SyncBailHook","afterInit","beforeRender","beforeRenderData","SyncWaterfallHook","afterRender","SyncHook","beforePickingEncode","afterPickingEncode","beforeHighlight","afterHighlight","beforeSelect","afterSelect","beforeDestroy","afterDestroy","enable","dataState","getLayerConfig","autoFit","fitBoundsOptions","fitBounds","emit","reRender","name","id","zIndex","rawConfig","configService","configToUpdate","inited","needUpdateConfig","sceneId","container","get","SceneID","setLayerConfig","sceneContainer","color","bottomColor","plugin","plugins","push","layerType","iconService","IIconService","fontService","IFontService","rendererService","IRendererService","layerService","ILayerService","interactionService","IInteractionService","pickingService","IPickingService","mapService","IMapService","enableMultiPassRenderer","passes","length","on","renderLayers","cameraService","ICameraService","coordinateService","ICoordinateSystemService","shaderModuleService","IShaderModuleService","postProcessingPassFactory","IFactoryPostProcessingPass","normalPassFactory","IFactoryNormalPass","styleAttributeService","IStyleAttributeService","multiPassRenderer","IMultiPassRenderer","setLayer","pendingStyleAttributes","forEach","attributeName","attributeField","attributeValues","updateOptions","updateStyleAttribute","scale","field","splitValuesAndCallbackInAttribute","getAll","ILayerPlugin","apply","hooks","call","target","type","updateLayerConfig","getDefaultConfig","animateOption","startAnimate","aniamateStatus","values","lastShape","getLayerStyleAttribute","currentShape","shapeOption","options","rawAnimate","data","setSource","sourceOption","clusterZoom","layerSource","setData","rest","pass","postProcessingPass","getPostProcessor","getPostProcessingPassByName","styleNeedUpdate","cfg","scaleOptions","rendering","getEncodedData","renderModels","getRenderFlag","render","activeOption","enableHighlight","highlightColor","mix","activeMix","x","y","pick","pickedFeatureID","then","setTimeout","option","enableSelect","selectColor","selectMix","blend","layerModelNeedUpdate","visible","index","updateLayerRenderList","currentPickId","selectedFeatureID","zoom","getZoom","minZoom","Infinity","maxZoom","source","getSource","extent","isValid","some","v","Math","abs","isDestroied","off","sourceEvent","destroy","clearAllAttributes","models","cleanRemove","removeAllListeners","model","layerModel","clearModels","getLayerStyleAttributes","filter","attribute","needRescale","needRemapping","needRegenerateVertices","cluster","updateClusterData","encodedData","getLayerAttributeScale","invertExtent","items","range","map","item","value","ticks","domain","triggerHover","box","cb","boxPickLayer","moduleName","vertexShader","fragmentShader","triangulation","segmentNumber","registerModule","vs","fs","getModule","uniforms","createModel","createAttributesAndIndices","attributes","elements","BlendTypes","BlendType","normal","clock","getDelta","animateStartTime","getElapsedTime","stopAnimate","isPick","eventNames","indexOf","isVisible","Error","isPicking","buildModels","draw","getUninforms","getShaderPickStat","time","console","warn","valuesOrCallback","defaultValues","undefined","callback","EventEmitter"],"mappings":"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","sourcesContent":["// @ts-ignore\nimport { SyncBailHook, SyncHook, SyncWaterfallHook } from '@antv/async-hook';\nimport {\n BlendType,\n gl,\n IActiveOption,\n IAnimateOption,\n ICameraService,\n ICoordinateSystemService,\n IDataState,\n IEncodeFeature,\n IFontService,\n IGlobalConfigService,\n IIconService,\n IInteractionService,\n ILayer,\n ILayerConfig,\n ILayerModel,\n ILayerModelInitializationOptions,\n ILayerPlugin,\n ILayerService,\n ILegendClassificaItem,\n ILegendSegmentItem,\n IMapService,\n IModel,\n IModelInitializationOptions,\n IMultiPassRenderer,\n IPass,\n IPickingService,\n IPostProcessingPass,\n IRendererService,\n IScale,\n IScaleOptions,\n IShaderModuleService,\n ISource,\n ISourceCFG,\n IStyleAttributeInitializationOptions,\n IStyleAttributeService,\n IStyleAttributeUpdateOptions,\n lazyInject,\n LegendItems,\n ScaleAttributeType,\n ScaleTypeName,\n ScaleTypes,\n StyleAttributeField,\n StyleAttributeOption,\n TYPES,\n} from '@antv/l7-core';\nimport Source from '@antv/l7-source';\nimport { encodePickingColor } from '@antv/l7-utils';\nimport { EventEmitter } from 'eventemitter3';\nimport { Container } from 'inversify';\nimport { isFunction, isObject, isUndefined } from 'lodash';\nimport { normalizePasses } from '../plugins/MultiPassRendererPlugin';\nimport { BlendTypes } from '../utils/blend';\nimport { handleStyleDataMapping } from '../utils/dataMappingStyle';\nimport { updateShape } from '../utils/updateShape';\n/**\n * 分配 layer id\n */\nlet layerIdCounter = 0;\n\nexport default class BaseLayer<ChildLayerStyleOptions = {}> extends EventEmitter\n implements ILayer {\n public id: string = `${layerIdCounter++}`;\n public name: string = `${layerIdCounter}`;\n public type: string;\n public visible: boolean = true;\n public zIndex: number = 0;\n public minZoom: number;\n public maxZoom: number;\n public inited: boolean = false;\n public layerModelNeedUpdate: boolean = false;\n public pickedFeatureID: number | null = null;\n public selectedFeatureID: number | null = null;\n public styleNeedUpdate: boolean = false;\n public rendering: boolean;\n public clusterZoom: number = 0; // 聚合等级标记\n public layerType?: string | undefined;\n\n public dataState: IDataState = {\n dataSourceNeedUpdate: false,\n dataMappingNeedUpdate: false,\n filterNeedUpdate: false,\n featureScaleNeedUpdate: false,\n StyleAttrNeedUpdate: false,\n };\n // 生命周期钩子\n public hooks = {\n init: new SyncBailHook(),\n afterInit: new SyncBailHook(),\n beforeRender: new SyncBailHook(),\n beforeRenderData: new SyncWaterfallHook(),\n afterRender: new SyncHook(),\n beforePickingEncode: new SyncHook(),\n afterPickingEncode: new SyncHook(),\n beforeHighlight: new SyncHook(['pickedColor']),\n afterHighlight: new SyncHook(),\n beforeSelect: new SyncHook(['pickedColor']),\n afterSelect: new SyncHook(),\n beforeDestroy: new SyncHook(),\n afterDestroy: new SyncHook(),\n };\n\n // 待渲染 model 列表\n public models: IModel[] = [];\n\n // 每个 Layer 都有一个\n public multiPassRenderer: IMultiPassRenderer;\n\n // 注入插件集\n public plugins: ILayerPlugin[];\n\n public sourceOption: {\n data: any;\n options?: ISourceCFG;\n };\n\n public layerModel: ILayerModel;\n\n public shapeOption: {\n field: any;\n values: any;\n };\n\n // TODO: 记录 sceneContainer 供创建子图层的时候使用 如 imageTileLayer\n public sceneContainer: Container | undefined;\n // TODO: 用于保存子图层对象\n public layerChildren: ILayer[] = [];\n\n @lazyInject(TYPES.IGlobalConfigService)\n protected readonly configService: IGlobalConfigService;\n\n // @lazyInject(TYPES.IShaderModuleService)\n // protected readonly shaderModuleService: IShaderModuleService;\n\n protected shaderModuleService: IShaderModuleService;\n protected cameraService: ICameraService;\n\n protected coordinateService: ICoordinateSystemService;\n\n protected iconService: IIconService;\n\n protected fontService: IFontService;\n\n protected pickingService: IPickingService;\n\n protected rendererService: IRendererService;\n\n protected layerService: ILayerService;\n\n protected interactionService: IInteractionService;\n\n protected mapService: IMapService;\n\n protected styleAttributeService: IStyleAttributeService;\n\n protected layerSource: Source;\n\n protected postProcessingPassFactory: (\n name: string,\n ) => IPostProcessingPass<unknown>;\n protected normalPassFactory: (name: string) => IPass<unknown>;\n\n protected animateOptions: IAnimateOption = { enable: false };\n\n /**\n * 图层容器\n */\n private container: Container;\n\n private encodedData: IEncodeFeature[];\n\n private configSchema: object;\n\n private currentPickId: number | null = null;\n\n private rawConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n private needUpdateConfig: Partial<ILayerConfig & ChildLayerStyleOptions>;\n\n /**\n * 待更新样式属性,在初始化阶段完成注册\n */\n private pendingStyleAttributes: Array<{\n attributeName: string;\n attributeField: StyleAttributeField;\n attributeValues?: StyleAttributeOption;\n defaultName?: string;\n updateOptions?: Partial<IStyleAttributeUpdateOptions>;\n }> = [];\n\n private scaleOptions: IScaleOptions = {};\n\n private animateStartTime: number;\n\n private aniamateStatus: boolean = false;\n\n // TODO: layer 保底颜色\n private bottomColor = 'rgba(0, 0, 0, 0)';\n\n private isDestroied: boolean = false;\n\n // private pickingPassRender: IPass<'pixelPicking'>;\n\n constructor(config: Partial<ILayerConfig & ChildLayerStyleOptions> = {}) {\n super();\n this.name = config.name || this.id;\n this.zIndex = config.zIndex || 0;\n this.rawConfig = config;\n }\n\n public getLayerConfig() {\n return this.configService.getLayerConfig<ChildLayerStyleOptions>(this.id);\n }\n\n public updateLayerConfig(\n configToUpdate: Partial<ILayerConfig | ChildLayerStyleOptions>,\n ) {\n if (!this.inited) {\n this.needUpdateConfig = {\n ...this.needUpdateConfig,\n ...configToUpdate,\n };\n } else {\n const sceneId = this.container.get<string>(TYPES.SceneID);\n\n // @ts-ignore\n handleStyleDataMapping(configToUpdate, this); // 处理 style 中进行数据映射的属性字段\n\n this.configService.setLayerConfig(sceneId, this.id, {\n ...this.configService.getLayerConfig(this.id),\n ...this.needUpdateConfig,\n ...configToUpdate,\n });\n this.needUpdateConfig = {};\n }\n }\n\n /**\n * 注入图层容器,父容器为场景容器\n * RootContainer 1\n * -> SceneContainer 1.*\n * -> LayerContainer 1.*\n */\n public setContainer(container: Container, sceneContainer: Container) {\n this.container = container;\n this.sceneContainer = sceneContainer;\n }\n\n public getContainer() {\n return this.container;\n }\n\n public setBottomColor(color: string) {\n this.bottomColor = color;\n }\n\n public getBottomColor() {\n return this.bottomColor;\n }\n\n public addPlugin(plugin: ILayerPlugin): ILayer {\n // TODO: 控制插件注册顺序\n // @example:\n // pointLayer.addPlugin(new MyCustomPlugin(), {\n // before: 'L7BuiltinPlugin'\n // });\n this.plugins.push(plugin);\n return this;\n }\n\n public init() {\n // 设置配置项\n const sceneId = this.container.get<string>(TYPES.SceneID);\n // 初始化图层配置项\n // const { enableMultiPassRenderer = false } = this.rawConfig;\n // this.configService.setLayerConfig(sceneId, this.id, {\n // enableMultiPassRenderer,\n // });\n this.configService.setLayerConfig(sceneId, this.id, this.rawConfig);\n this.layerType = this.rawConfig.layerType;\n\n // 全局容器服务\n\n // 场景容器服务\n this.iconService = this.container.get<IIconService>(TYPES.IIconService);\n this.fontService = this.container.get<IFontService>(TYPES.IFontService);\n\n this.rendererService = this.container.get<IRendererService>(\n TYPES.IRendererService,\n );\n this.layerService = this.container.get<ILayerService>(TYPES.ILayerService);\n this.interactionService = this.container.get<IInteractionService>(\n TYPES.IInteractionService,\n );\n\n this.pickingService = this.container.get<IPickingService>(\n TYPES.IPickingService,\n );\n this.mapService = this.container.get<IMapService>(TYPES.IMapService);\n const { enableMultiPassRenderer, passes } = this.getLayerConfig();\n if (enableMultiPassRenderer && passes?.length && passes.length > 0) {\n // Tip: 兼容 multiPassRender 在 amap1 时存在的图层不同步问题 zoom\n this.mapService.on('mapAfterFrameChange', () => {\n this.renderLayers();\n });\n }\n\n this.cameraService = this.container.get<ICameraService>(\n TYPES.ICameraService,\n );\n this.coordinateService = this.container.get<ICoordinateSystemService>(\n TYPES.ICoordinateSystemService,\n );\n this.shaderModuleService = this.container.get<IShaderModuleService>(\n TYPES.IShaderModuleService,\n );\n this.postProcessingPassFactory = this.container.get(\n TYPES.IFactoryPostProcessingPass,\n );\n this.normalPassFactory = this.container.get(TYPES.IFactoryNormalPass);\n\n // 图层容器服务\n this.styleAttributeService = this.container.get<IStyleAttributeService>(\n TYPES.IStyleAttributeService,\n );\n this.multiPassRenderer = this.container.get<IMultiPassRenderer>(\n TYPES.IMultiPassRenderer,\n );\n this.multiPassRenderer.setLayer(this);\n\n // 完成样式服务注册完成前添加的属性\n this.pendingStyleAttributes.forEach(\n ({ attributeName, attributeField, attributeValues, updateOptions }) => {\n this.styleAttributeService.updateStyleAttribute(\n attributeName,\n {\n // @ts-ignore\n scale: {\n field: attributeField,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n attributeValues,\n // @ts-ignore\n this.getLayerConfig()[attributeName],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n },\n );\n this.pendingStyleAttributes = [];\n\n // 获取插件集\n this.plugins = this.container.getAll<ILayerPlugin>(TYPES.ILayerPlugin);\n // 完成插件注册,传入场景和图层容器内的服务\n for (const plugin of this.plugins) {\n plugin.apply(this, {\n rendererService: this.rendererService,\n mapService: this.mapService,\n styleAttributeService: this.styleAttributeService,\n normalPassFactory: this.normalPassFactory,\n postProcessingPassFactory: this.postProcessingPassFactory,\n });\n }\n\n // 触发 init 生命周期插件\n this.hooks.init.call();\n // this.pickingPassRender = this.normalPassFactory('pixelPicking');\n // this.pickingPassRender.init(this);\n this.hooks.afterInit.call();\n\n // 触发初始化完成事件;\n this.emit('inited', {\n target: this,\n type: 'inited',\n });\n this.emit('add', {\n target: this,\n type: 'add',\n });\n return this;\n }\n /**\n * Model初始化前需要更新Model样式\n */\n public prepareBuildModel() {\n this.inited = true;\n this.updateLayerConfig({\n ...(this.getDefaultConfig() as object),\n ...this.rawConfig,\n });\n\n // 启动动画\n const { animateOption } = this.getLayerConfig();\n if (animateOption?.enable) {\n this.layerService.startAnimate();\n this.aniamateStatus = true;\n }\n }\n public color(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n // 设置 color、size、shape、style 时由于场景服务尚未完成(并没有调用 scene.addLayer),因此暂时加入待更新属性列表\n this.updateStyleAttribute('color', field, values, updateOptions);\n\n // this.pendingStyleAttributes.push({\n // attributeName: 'color',\n // attributeField: field,\n // attributeValues: values,\n // defaultName: 'colors',\n // updateOptions,\n // });\n return this;\n }\n\n // 为对应的图层传入纹理的编号名称(point/image 在 shape 方法中传入纹理名称的方法并不通用)\n public texture(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('texture', field, values, updateOptions);\n return this;\n }\n\n public rotate(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('rotate', field, values, updateOptions);\n return this;\n }\n public size(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('size', field, values, updateOptions);\n return this;\n }\n // 对mapping后的数据过滤,scale保持不变\n public filter(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.updateStyleAttribute('filter', field, values, updateOptions);\n return this;\n }\n\n public shape(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n const lastShape = this.styleAttributeService?.getLayerStyleAttribute(\n 'shape',\n )?.scale?.field;\n const currentShape = field;\n this.shapeOption = {\n field,\n values,\n };\n this.updateStyleAttribute('shape', field, values, updateOptions);\n // TODO: 根据 shape 判断是否需要更新 model\n updateShape(this, lastShape, currentShape);\n return this;\n }\n public label(\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n this.pendingStyleAttributes.push({\n attributeName: 'label',\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n return this;\n }\n public animate(options: IAnimateOption | boolean) {\n let rawAnimate: Partial<IAnimateOption> = {};\n if (isObject(options)) {\n rawAnimate.enable = true;\n rawAnimate = {\n ...rawAnimate,\n ...options,\n };\n } else {\n rawAnimate.enable = options;\n }\n this.updateLayerConfig({\n animateOption: rawAnimate,\n });\n // this.animateOptions = options;\n return this;\n }\n\n public source(data: any, options?: ISourceCFG): ILayer {\n if (data?.data) {\n // 判断是否为source\n this.setSource(data);\n return this;\n }\n this.sourceOption = {\n data,\n options,\n };\n this.clusterZoom = 0;\n return this;\n }\n public setData(data: any, options?: ISourceCFG) {\n if (this.inited) {\n this.layerSource.setData(data, options);\n } else {\n this.on('inited', () => {\n this.layerSource.setData(data, options);\n });\n }\n\n return this;\n }\n public style(\n options: Partial<ChildLayerStyleOptions> & Partial<ILayerConfig>,\n ): ILayer {\n const { passes, ...rest } = options;\n\n // passes 特殊处理\n if (passes) {\n normalizePasses(passes).forEach(\n (pass: [string, { [key: string]: unknown }]) => {\n const postProcessingPass = this.multiPassRenderer\n .getPostProcessor()\n .getPostProcessingPassByName(pass[0]);\n if (postProcessingPass) {\n postProcessingPass.updateOptions(pass[1]);\n }\n },\n );\n }\n\n this.rawConfig = {\n ...this.rawConfig,\n ...rest,\n };\n if (this.container) {\n this.updateLayerConfig(this.rawConfig);\n this.styleNeedUpdate = true;\n }\n return this;\n }\n public scale(field: string | number | IScaleOptions, cfg?: IScale) {\n if (isObject(field)) {\n this.scaleOptions = {\n ...this.scaleOptions,\n ...field,\n };\n } else {\n this.scaleOptions[field] = cfg;\n }\n return this;\n }\n\n /**\n * 渲染所有的图层\n */\n public renderLayers(): void {\n this.rendering = true;\n\n this.layerService.renderLayers();\n\n this.rendering = false;\n }\n\n public render(): ILayer {\n // TODO: this.getEncodedData().length !== 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length !== 0) {\n this.renderModels();\n }\n return this;\n }\n\n /**\n * renderMultiPass 专门用于渲染支持 multipass 的 layer\n */\n public async renderMultiPass() {\n if (this.getEncodedData().length !== 0) {\n if (this.multiPassRenderer && this.multiPassRenderer.getRenderFlag()) {\n // multi render 开始执行 multiPassRender 的渲染流程\n await this.multiPassRenderer.render();\n } else if (this.multiPassRenderer) {\n // renderPass 触发的渲染\n this.renderModels();\n } else {\n this.renderModels();\n }\n }\n }\n\n public active(options: IActiveOption | boolean) {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableHighlight = isObject(options) ? true : options;\n if (isObject(options)) {\n activeOption.enableHighlight = true;\n if (options.color) {\n activeOption.highlightColor = options.color;\n }\n if (options.mix) {\n activeOption.activeMix = options.mix;\n }\n } else {\n activeOption.enableHighlight = !!options;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n public setActive(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n highlightColor: isObject(options)\n ? options.color\n : this.getLayerConfig().highlightColor,\n activeMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().activeMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n\n public select(option: IActiveOption | boolean): ILayer {\n const activeOption: Partial<ILayerConfig> = {};\n activeOption.enableSelect = isObject(option) ? true : option;\n if (isObject(option)) {\n activeOption.enableSelect = true;\n if (option.color) {\n activeOption.selectColor = option.color;\n }\n if (option.mix) {\n activeOption.selectMix = option.mix;\n }\n } else {\n activeOption.enableSelect = !!option;\n }\n this.updateLayerConfig(activeOption);\n return this;\n }\n\n public setSelect(\n id: number | { x: number; y: number },\n options?: IActiveOption,\n ): void {\n if (isObject(id)) {\n const { x = 0, y = 0 } = id;\n this.updateLayerConfig({\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.pick({ x, y });\n } else {\n this.updateLayerConfig({\n pickedFeatureID: id,\n selectColor: isObject(options)\n ? options.color\n : this.getLayerConfig().selectColor,\n selectMix: isObject(options)\n ? options.mix\n : this.getLayerConfig().selectMix,\n });\n this.hooks.beforeSelect\n .call(encodePickingColor(id as number) as number[])\n // @ts-ignore\n .then(() => {\n setTimeout(() => {\n this.reRender();\n }, 1);\n });\n }\n }\n public setBlend(type: keyof typeof BlendType): ILayer {\n this.updateLayerConfig({\n blend: type,\n });\n this.layerModelNeedUpdate = true;\n this.reRender();\n return this;\n }\n public show(): ILayer {\n this.updateLayerConfig({\n visible: true,\n });\n this.reRender();\n return this;\n }\n\n public hide(): ILayer {\n this.updateLayerConfig({\n visible: false,\n });\n this.reRender();\n return this;\n }\n public setIndex(index: number): ILayer {\n this.zIndex = index;\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n return this;\n }\n\n public setCurrentPickId(id: number) {\n this.currentPickId = id;\n }\n\n public getCurrentPickId(): number | null {\n return this.currentPickId;\n }\n\n public setCurrentSelectedId(id: number) {\n this.selectedFeatureID = id;\n }\n\n public getCurrentSelectedId(): number | null {\n return this.selectedFeatureID;\n }\n public isVisible(): boolean {\n const zoom = this.mapService.getZoom();\n const {\n visible,\n minZoom = -Infinity,\n maxZoom = Infinity,\n } = this.getLayerConfig();\n return !!visible && zoom >= minZoom && zoom <= maxZoom;\n }\n\n public setMinZoom(minZoom: number): ILayer {\n this.updateLayerConfig({\n minZoom,\n });\n return this;\n }\n\n public getMinZoom(): number {\n const { minZoom } = this.getLayerConfig();\n return minZoom as number;\n }\n\n public getMaxZoom(): number {\n const { maxZoom } = this.getLayerConfig();\n return maxZoom as number;\n }\n\n public get(name: string) {\n const cfg = this.getLayerConfig();\n // @ts-ignore\n return cfg[name];\n }\n\n public setMaxZoom(maxZoom: number): ILayer {\n this.updateLayerConfig({\n maxZoom,\n });\n return this;\n }\n\n public setAutoFit(autoFit: boolean): ILayer {\n this.updateLayerConfig({\n autoFit,\n });\n return this;\n }\n\n /**\n * zoom to layer Bounds\n */\n public fitBounds(fitBoundsOptions?: unknown): ILayer {\n if (!this.inited) {\n this.updateLayerConfig({\n autoFit: true,\n });\n return this;\n }\n const source = this.getSource();\n const extent = source.extent;\n const isValid = extent.some((v) => Math.abs(v) === Infinity);\n if (isValid) {\n return this;\n }\n this.mapService.fitBounds(\n [\n [extent[0], extent[1]],\n [extent[2], extent[3]],\n ],\n fitBoundsOptions,\n );\n return this;\n }\n\n public destroy() {\n // debugger\n if (this.isDestroied) {\n return;\n }\n this.hooks.beforeDestroy.call();\n // 清除sources事件\n this.layerSource.off('update', this.sourceEvent);\n\n this.multiPassRenderer.destroy();\n // console.log(this.styleAttributeService.getAttributes())\n // 清除所有属性以及关联的 vao == 销毁所有 => model this.models.forEach((model) => model.destroy());\n this.styleAttributeService.clearAllAttributes();\n\n // 执行每个图层单独的 clearModels 方法 (清除一些额外的 texture、program、buffer 等)\n\n this.hooks.afterDestroy.call();\n\n // TODO: 清除各个图层自定义的 models 资源\n // this.layerModel?.clearModels();\n\n this.models = [];\n\n this.layerService.cleanRemove(this);\n\n this.emit('remove', {\n target: this,\n type: 'remove',\n });\n\n this.emit('destroy', {\n target: this,\n type: 'destroy',\n });\n\n this.removeAllListeners();\n // 解绑图层容器中的服务\n // this.container.unbind(TYPES.IStyleAttributeService);\n\n this.isDestroied = true;\n }\n public clear() {\n this.styleAttributeService.clearAllAttributes();\n // 销毁所有 model\n }\n public clearModels() {\n this.models.forEach((model) => model.destroy());\n this.layerModel.clearModels();\n }\n\n public isDirty() {\n return !!(\n this.styleAttributeService.getLayerStyleAttributes() || []\n ).filter(\n (attribute) =>\n attribute.needRescale ||\n attribute.needRemapping ||\n attribute.needRegenerateVertices,\n ).length;\n }\n\n public setSource(source: Source) {\n // 清除旧 sources 事件\n if (this.layerSource) {\n this.layerSource.off('update', this.sourceEvent);\n }\n\n this.layerSource = source;\n this.clusterZoom = 0;\n\n // 已 inited 且启用聚合进行更新聚合数据\n if (this.inited && this.layerSource.cluster) {\n const zoom = this.mapService.getZoom();\n this.layerSource.updateClusterData(zoom);\n }\n // source 可能会复用,会在其它layer被修改\n this.layerSource.on('update', this.sourceEvent);\n }\n public getSource() {\n return this.layerSource;\n }\n\n public getScaleOptions() {\n return this.scaleOptions;\n }\n\n public setEncodedData(encodedData: IEncodeFeature[]) {\n this.encodedData = encodedData;\n }\n public getEncodedData() {\n return this.encodedData;\n }\n\n public getScale(name: string): any {\n return this.styleAttributeService.getLayerAttributeScale(name);\n }\n\n public getLegendItems(name: string): LegendItems {\n const scale = this.styleAttributeService.getLayerAttributeScale(name);\n\n // 函数自定义映射,没有 scale 返回为空数组\n if (!scale) {\n return [];\n }\n\n if (scale.invertExtent) {\n // 分段类型 Quantize、Quantile、Threshold\n const items: ILegendSegmentItem[] = scale.range().map((item: number) => {\n return {\n value: scale.invertExtent(item),\n [name]: item,\n };\n });\n\n return items;\n } else if (scale.ticks) {\n // 连续类型 Continuous (Linear, Power, Log, Identity, Time)\n const items: ILegendClassificaItem[] = scale\n .ticks()\n .map((item: string) => {\n return {\n value: item,\n [name]: scale(item),\n };\n });\n\n return items;\n } else if (scale?.domain) {\n // 枚举类型 Cat\n const items: ILegendClassificaItem[] = scale\n .domain()\n .filter((item: string | number | undefined) => !isUndefined(item))\n .map((item: string | number) => {\n return {\n value: item,\n [name]: scale(item) as string,\n };\n });\n\n return items;\n }\n\n return [];\n }\n\n public pick({ x, y }: { x: number; y: number }) {\n this.interactionService.triggerHover({ x, y });\n }\n\n public boxSelect(\n box: [number, number, number, number],\n cb: (...args: any[]) => void,\n ) {\n this.pickingService.boxPickLayer(this, box, cb);\n }\n\n public buildLayerModel(\n options: ILayerModelInitializationOptions &\n Partial<IModelInitializationOptions>,\n ): IModel {\n const {\n moduleName,\n vertexShader,\n fragmentShader,\n triangulation,\n segmentNumber,\n ...rest\n } = options;\n this.shaderModuleService.registerModule(moduleName, {\n vs: vertexShader,\n fs: fragmentShader,\n });\n const { vs, fs, uniforms } = this.shaderModuleService.getModule(moduleName);\n const { createModel } = this.rendererService;\n const {\n attributes,\n elements,\n } = this.styleAttributeService.createAttributesAndIndices(\n this.encodedData,\n triangulation,\n segmentNumber,\n );\n return createModel({\n attributes,\n uniforms,\n fs,\n vs,\n elements,\n blend: BlendTypes[BlendType.normal],\n ...rest,\n });\n }\n\n public getTime() {\n return this.layerService.clock.getDelta();\n }\n public setAnimateStartTime() {\n this.animateStartTime = this.layerService.clock.getElapsedTime();\n }\n public stopAnimate() {\n if (this.aniamateStatus) {\n this.layerService.stopAnimate();\n this.aniamateStatus = false;\n this.updateLayerConfig({\n animateOption: {\n enable: false,\n },\n });\n }\n }\n public getLayerAnimateTime(): number {\n return this.layerService.clock.getElapsedTime() - this.animateStartTime;\n }\n\n public needPick(type: string): boolean {\n const {\n enableHighlight = true,\n enableSelect = true,\n } = this.getLayerConfig();\n // 判断layer是否监听事件;\n let isPick =\n this.eventNames().indexOf(type) !== -1 ||\n this.eventNames().indexOf('un' + type) !== -1;\n if ((type === 'click' || type === 'dblclick') && enableSelect) {\n isPick = true;\n }\n if (\n type === 'mousemove' &&\n (enableHighlight ||\n this.eventNames().indexOf('mouseenter') !== -1 ||\n this.eventNames().indexOf('unmousemove') !== -1 ||\n this.eventNames().indexOf('mouseout') !== -1)\n ) {\n isPick = true;\n }\n return this.isVisible() && isPick;\n }\n\n public buildModels() {\n throw new Error('Method not implemented.');\n }\n public rebuildModels() {\n throw new Error('Method not implemented.');\n }\n\n public async renderMulPass(multiPassRenderer: IMultiPassRenderer) {\n await multiPassRenderer.render();\n }\n\n public renderModels(isPicking?: boolean) {\n // TODO: this.getEncodedData().length > 0 这个判断是为了解决在 2.5.x 引入数据纹理后产生的 空数据渲染导致 texture 超出上限问题\n if (this.getEncodedData().length > 0) {\n if (this.layerModelNeedUpdate && this.layerModel) {\n this.models = this.layerModel.buildModels();\n this.hooks.beforeRender.call();\n this.layerModelNeedUpdate = false;\n }\n this.models.forEach((model) => {\n model.draw(\n {\n uniforms: this.layerModel.getUninforms(),\n },\n isPicking,\n );\n });\n }\n return this;\n }\n\n public updateStyleAttribute(\n type: string,\n field: StyleAttributeField,\n values?: StyleAttributeOption,\n updateOptions?: Partial<IStyleAttributeUpdateOptions>,\n ) {\n if (!this.inited) {\n this.pendingStyleAttributes.push({\n attributeName: type,\n attributeField: field,\n attributeValues: values,\n updateOptions,\n });\n } else {\n this.styleAttributeService.updateStyleAttribute(\n type,\n {\n // @ts-ignore\n scale: {\n field,\n ...this.splitValuesAndCallbackInAttribute(\n // @ts-ignore\n values,\n // @ts-ignore\n this.getLayerConfig()[field],\n ),\n },\n },\n // @ts-ignore\n updateOptions,\n );\n }\n }\n\n public getShaderPickStat() {\n return this.layerService.getShaderPickStat();\n }\n\n /**\n * 继承空方法\n * @param time\n */\n public setEarthTime(time: number) {\n console.warn('empty fn');\n }\n\n protected getConfigSchema() {\n throw new Error('Method not implemented.');\n }\n\n protected getModelType(): unknown {\n throw new Error('Method not implemented.');\n }\n protected getDefaultConfig() {\n return {};\n }\n\n private sourceEvent = () => {\n this.dataState.dataSourceNeedUpdate = true;\n const { autoFit, fitBoundsOptions } = this.getLayerConfig();\n if (autoFit) {\n this.fitBounds(fitBoundsOptions);\n }\n // 对外暴露事件\n this.emit('dataUpdate');\n this.reRender();\n };\n\n private reRender() {\n if (this.inited) {\n this.layerService.updateLayerRenderList();\n this.layerService.renderLayers();\n }\n }\n private splitValuesAndCallbackInAttribute(\n valuesOrCallback?: unknown[],\n defaultValues?: unknown[],\n ) {\n return {\n values: isFunction(valuesOrCallback)\n ? undefined\n : valuesOrCallback || defaultValues,\n callback: isFunction(valuesOrCallback) ? valuesOrCallback : undefined,\n };\n }\n}\n"],"file":"BaseLayer.js"}
|
|
@@ -40,7 +40,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
40
40
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
41
41
|
|
|
42
42
|
var pointExtrudeFrag = "varying vec4 v_color;\nuniform float u_opacity: 1.0;\n\nvarying float v_z;\nvarying float v_lightWeight;\nuniform float u_pickLight: 0.0;\n\n#pragma include \"picking\"\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nuniform float u_linearColor: 0;\nuniform vec4 u_sourceColor;\nuniform vec4 u_targetColor;\n\nuniform float u_opacitylinear: 0.0;\nuniform float u_opacitylinear_dir: 1.0;\n\nvoid main() {\n float opacity = styleMappingMat[0][0];\n\n // \u8BBE\u7F6E\u5706\u67F1\u7684\u5E95\u8272\n if(u_linearColor == 1.0) { // \u4F7F\u7528\u6E10\u53D8\u989C\u8272\n gl_FragColor = mix(u_sourceColor, u_targetColor, v_z);\n gl_FragColor.rgb *= v_lightWeight;\n } else { // \u4F7F\u7528 color \u65B9\u6CD5\u4F20\u5165\u7684\u989C\u8272\n gl_FragColor = v_color;\n }\n\n // \u5E94\u7528\u900F\u660E\u5EA6\n gl_FragColor.a *= opacity;\n\n // \u5F00\u542F\u900F\u660E\u5EA6\u6E10\u53D8\n if(u_opacitylinear > 0.0) {\n gl_FragColor.a *= u_opacitylinear_dir > 0.0 ? (1.0 - v_z): v_z;\n }\n\n // picking\n if(u_pickLight > 0.0) {\n gl_FragColor = filterColorWithLight(gl_FragColor, v_lightWeight);\n } else {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
43
|
-
var pointExtrudeVert = "precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nattribute vec3 a_Position;\nattribute vec3 a_Pos;\nattribute vec4 a_Color;\nattribute vec3 a_Size;\nattribute vec3 a_Normal;\n\nuniform float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\nuniform float u_globel;\nuniform float u_r;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nvarying vec4 v_color;\n\nuniform float u_opacity : 1;\nuniform float u_lightEnable: 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nvarying float v_z;\nvarying float v_lightWeight;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"light\"\n#pragma include \"picking\"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) + \n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_z = a_Position.z;\n\n \n\n // vec2 offset = project_pixel(size.xy);\n // vec2 offset = (size.xy);\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n offset = project_pixel(offset);\n }\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z) * u_r, 1.0);\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n // float lightWeight = u_lightEnable > 0.0 ? calc_lighting(pos): 1.0;\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n\n v_color =vec4(a_Color.rgb * lightWeight, a_Color.w);\n\n // gl_Position = project_common_position_to_clipspace(pos);\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * pos;\n } else {\n gl_Position = project_common_position_to_clipspace(pos);\n }\n \n if(u_globel > 0.0) {\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0, \n 0,xcos,-xsin,0, \n 0,xsin,xcos,0, \n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0, \n 0,1,0,0, \n ysin,0,ycos,0, \n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
43
|
+
var pointExtrudeVert = "precision highp float;\n\n#define pi 3.1415926535\n#define ambientRatio 0.5\n#define diffuseRatio 0.3\n#define specularRatio 0.2\n\nattribute vec3 a_Position;\nattribute vec3 a_Pos;\nattribute vec4 a_Color;\nattribute vec3 a_Size;\nattribute vec3 a_Normal;\n\nuniform float u_heightfixed: 0.0; // \u9ED8\u8BA4\u4E0D\u56FA\u5B9A\nuniform float u_globel;\nuniform float u_r;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nvarying vec4 v_color;\n\nuniform float u_opacity : 1;\nuniform float u_lightEnable: 1;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nvarying float v_z;\nvarying float v_lightWeight;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n\n#pragma include \"projection\"\n#pragma include \"light\"\n#pragma include \"picking\"\n\nfloat getYRadian(float x, float z) {\n if(x > 0.0 && z > 0.0) {\n return atan(x/z);\n } else if(x > 0.0 && z <= 0.0){\n return atan(-z/x) + pi/2.0;\n } else if(x <= 0.0 && z <= 0.0) {\n return pi + atan(x/z); //atan(x/z) + \n } else {\n return atan(z/-x) + pi*3.0/2.0;\n }\n}\n\nfloat getXRadian(float y, float r) {\n return atan(y/r);\n}\n\nvoid main() {\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n vec3 size = a_Size * a_Position;\n\n // a_Position.z \u662F\u5728\u6784\u5EFA\u7F51\u683C\u7684\u65F6\u5019\u4F20\u5165\u7684\u6807\u51C6\u503C 0 - 1\uFF0C\u5728\u63D2\u503C\u5668\u63D2\u503C\u53EF\u4EE5\u83B7\u53D6 0\uFF5E1 \u7EBF\u6027\u6E10\u53D8\u7684\u503C\n v_z = a_Position.z;\n\n \n\n // vec2 offset = project_pixel(size.xy);\n // vec2 offset = (size.xy);\n\n vec3 offset = size; // \u63A7\u5236\u5706\u67F1\u4F53\u7684\u5927\u5C0F - \u4ECE\u6807\u51C6\u5355\u4F4D\u5706\u67F1\u4F53\u8FDB\u884C\u504F\u79FB\n if(u_heightfixed < 1.0) { // \u5706\u67F1\u4F53\u4E0D\u56FA\u5B9A\u9AD8\u5EA6\n // offset = project_pixel(offset);\n if (u_CoordinateSystem == COORDINATE_SYSTEM_P20 || u_CoordinateSystem == COORDINATE_SYSTEM_P20_OFFSET) {\n // P20 \u5750\u6807\u7CFB\u4E0B\uFF0C\u4E3A\u4E86\u548C Web \u58A8\u5361\u6258\u5750\u6807\u7CFB\u7EDF\u4E00\uFF0Czoom \u9ED8\u8BA4\u51CF1\n offset = offset * pow(2.0, (19.0 - u_Zoom));\n }\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) {\n // P20_2 \u5750\u6807\u7CFB\u4E0B\uFF0C\u4E3A\u4E86\u548C Web \u58A8\u5361\u6258\u5750\u6807\u7CFB\u7EDF\u4E00\uFF0Czoom \u9ED8\u8BA4\u51CF3\n offset = offset * pow(2.0, (19.0 - 3.0 - u_Zoom));\n }\n } else {// \u5706\u67F1\u4F53\u56FA\u5B9A\u9AD8\u5EA6 \uFF08 \u5904\u7406 mapbox \uFF09\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n offset *= 4.0/pow(2.0, 21.0 - u_Zoom);\n }\n }\n\n\n vec4 project_pos = project_position(vec4(a_Pos.xy, 0., 1.0));\n\n // vec4 pos = vec4(project_pos.xy + offset, project_pixel(size.z) * u_r, 1.0);\n // u_r \u63A7\u5236\u5706\u67F1\u7684\u751F\u957F\n vec4 pos = vec4(project_pos.xy + offset.xy, offset.z * u_r, 1.0);\n\n // \u5706\u67F1\u5149\u7167\u6548\u679C\n // float lightWeight = u_lightEnable > 0.0 ? calc_lighting(pos): 1.0;\n float lightWeight = 1.0;\n if(u_lightEnable > 0.0) { // \u53D6\u6D88\u4E09\u5143\u8868\u8FBE\u5F0F\uFF0C\u589E\u5F3A\u5065\u58EE\u6027\n lightWeight = calc_lighting(pos);\n }\n v_lightWeight = lightWeight;\n\n v_color =vec4(a_Color.rgb * lightWeight, a_Color.w);\n\n // gl_Position = project_common_position_to_clipspace(pos);\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * pos;\n } else {\n gl_Position = project_common_position_to_clipspace(pos);\n }\n \n if(u_globel > 0.0) {\n // \u5728\u5730\u7403\u6A21\u5F0F\u4E0B\uFF0C\u5C06\u539F\u672C\u5782\u76F4\u4E8E xy \u5E73\u9762\u7684\u5706\u67F1\u8C03\u6574\u59FF\u6001\u5230\u9002\u5E94\u5706\u7684\u89D2\u5EA6\n //\u65CB\u8F6C\u77E9\u9635mx\uFF0C\u521B\u5EFA\u7ED5x\u8F74\u65CB\u8F6C\u77E9\u9635\n float r = sqrt(a_Pos.z*a_Pos.z + a_Pos.x*a_Pos.x);\n float xRadian = getXRadian(a_Pos.y, r);\n float xcos = cos(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float xsin = sin(xRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 mx = mat4(\n 1,0,0,0, \n 0,xcos,-xsin,0, \n 0,xsin,xcos,0, \n 0,0,0,1);\n\n //\u65CB\u8F6C\u77E9\u9635my\uFF0C\u521B\u5EFA\u7ED5y\u8F74\u65CB\u8F6C\u77E9\u9635\n float yRadian = getYRadian(a_Pos.x, a_Pos.z);\n float ycos = cos(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u4F59\u5F26\u503C\n float ysin = sin(yRadian);//\u6C42\u89E3\u65CB\u8F6C\u89D2\u5EA6\u6B63\u5F26\u503C\n mat4 my = mat4(\n ycos,0,-ysin,0, \n 0,1,0,0, \n ysin,0,ycos,0, \n 0,0,0,1);\n\n gl_Position = u_ViewProjectionMatrix * vec4(( my * mx * vec4(a_Position * a_Size, 1.0)).xyz + a_Pos, 1.0);\n }\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
44
44
|
|
|
45
45
|
var ExtrudeModel = function (_BaseModel) {
|
|
46
46
|
(0, _inherits2.default)(ExtrudeModel, _BaseModel);
|
package/lib/point/models/fill.js
CHANGED
|
@@ -43,7 +43,7 @@ function _createSuper(Derived) { var hasNativeReflectConstruct = _isNativeReflec
|
|
|
43
43
|
|
|
44
44
|
function _isNativeReflectConstruct() { if (typeof Reflect === "undefined" || !Reflect.construct) return false; if (Reflect.construct.sham) return false; if (typeof Proxy === "function") return true; try { Boolean.prototype.valueOf.call(Reflect.construct(Boolean, [], function () {})); return true; } catch (e) { return false; } }
|
|
45
45
|
|
|
46
|
-
var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n float r = v_radius / (v_radius + strokeWidth);\n\n // 'circle'\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n \n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float PI = 3.14159;\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n\n // TODO: \u6839\u636E\u53E0\u52A0\u6C34\u6CE2\u6548\u679C\n gl_FragColor = vec4(v_color.xyz, v_color.a * opacity * intensity);\n\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\n if(d < 0.5) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
46
|
+
var waveFillFrag = "\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\nuniform float u_time;\nuniform vec4 u_aimate: [ 0, 2., 1.0, 0.2 ];\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n float r = v_radius / (v_radius + strokeWidth);\n\n // 'circle'\n float outer_df = sdCircle(v_data.xy, 1.0);\n float inner_df = sdCircle(v_data.xy, r);\n \n float d = length(v_data.xy);\n if(d > 0.5) {\n discard;\n }\n float PI = 3.14159;\n float intensity = clamp(cos(d * PI), 0.0, 1.0) * clamp(cos(2.0 * PI * (d * 2.0 * u_aimate.z - u_aimate.y * u_time)), 0.0, 1.0);\n\n // TODO: \u6839\u636E\u53E0\u52A0\u6C34\u6CE2\u6548\u679C\n gl_FragColor = vec4(v_color.xyz, v_color.a * opacity * intensity);\n\n if(u_additive > 0.0) {\n gl_FragColor *= gl_FragColor.a;\n } \n\n // TODO: \u4F18\u5316\u5728\u6C34\u6CE2\u7EB9\u60C5\u51B5\u4E0B\u7684\u62FE\u53D6\n if(d < 0.5) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
47
47
|
var pointFillFrag = "\nuniform float u_globel;\nuniform float u_additive;\n\nvarying mat4 styleMappingMat; // \u4F20\u9012\u4ECE\u7247\u5143\u4E2D\u4F20\u9012\u7684\u6620\u5C04\u6570\u636E\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\n#pragma include \"sdf_2d\"\n#pragma include \"picking\"\n\n\nvoid main() {\n int shape = int(floor(v_data.w + 0.5));\n\n vec4 textrueStroke = vec4(\n styleMappingMat[1][0],\n styleMappingMat[1][1],\n styleMappingMat[1][2],\n styleMappingMat[1][3]\n );\n\n float opacity = styleMappingMat[0][0];\n float stroke_opacity = styleMappingMat[0][1];\n float strokeWidth = styleMappingMat[0][2];\n vec4 strokeColor = textrueStroke == vec4(0) ? v_color : textrueStroke;\n\n lowp float antialiasblur = v_data.z;\n float r = v_radius / (v_radius + strokeWidth);\n\n float outer_df;\n float inner_df;\n // 'circle', 'triangle', 'square', 'pentagon', 'hexagon', 'octogon', 'hexagram', 'rhombus', 'vesica'\n if (shape == 0) {\n outer_df = sdCircle(v_data.xy, 1.0);\n inner_df = sdCircle(v_data.xy, r);\n } else if (shape == 1) {\n outer_df = sdEquilateralTriangle(1.1 * v_data.xy);\n inner_df = sdEquilateralTriangle(1.1 / r * v_data.xy);\n } else if (shape == 2) {\n outer_df = sdBox(v_data.xy, vec2(1.));\n inner_df = sdBox(v_data.xy, vec2(r));\n } else if (shape == 3) {\n outer_df = sdPentagon(v_data.xy, 0.8);\n inner_df = sdPentagon(v_data.xy, r * 0.8);\n } else if (shape == 4) {\n outer_df = sdHexagon(v_data.xy, 0.8);\n inner_df = sdHexagon(v_data.xy, r * 0.8);\n } else if (shape == 5) {\n outer_df = sdOctogon(v_data.xy, 1.0);\n inner_df = sdOctogon(v_data.xy, r);\n } else if (shape == 6) {\n outer_df = sdHexagram(v_data.xy, 0.52);\n inner_df = sdHexagram(v_data.xy, r * 0.52);\n } else if (shape == 7) {\n outer_df = sdRhombus(v_data.xy, vec2(1.0));\n inner_df = sdRhombus(v_data.xy, vec2(r));\n } else if (shape == 8) {\n outer_df = sdVesica(v_data.xy, 1.1, 0.8);\n inner_df = sdVesica(v_data.xy, r * 1.1, r * 0.8);\n }\n\n if(u_globel > 0.0) {\n // TODO: \u5730\u7403\u6A21\u5F0F\u4E0B\u907F\u514D\u591A\u4F59\u7247\u5143\u7ED8\u5236\uFF0C\u540C\u65F6\u4E5F\u80FD\u907F\u514D\u6709\u7528\u7247\u5143\u5728\u900F\u660E\u4E14\u91CD\u53E0\u7684\u60C5\u51B5\u4E0B\u65E0\u6CD5\u5199\u5165\n // \u4ED8\u51FA\u7684\u4EE3\u4EF7\u662F\u8FB9\u7F18\u4F1A\u6709\u4E00\u4E9B\u952F\u9F7F\n if(outer_df > antialiasblur + 0.018) discard;\n }\n float opacity_t = smoothstep(0.0, antialiasblur, outer_df);\n\n float color_t = strokeWidth < 0.01 ? 0.0 : smoothstep(\n antialiasblur,\n 0.0,\n inner_df\n );\n\n if(strokeWidth < 0.01) {\n gl_FragColor = vec4(v_color.rgb, v_color.a * opacity);\n } else {\n gl_FragColor = mix(vec4(v_color.rgb, v_color.a * opacity), strokeColor * stroke_opacity, color_t);\n }\n\n if(u_additive > 0.0) {\n gl_FragColor *= opacity_t;\n } else {\n gl_FragColor.a *= opacity_t;\n }\n\n if(gl_FragColor.a > 0.0) {\n gl_FragColor = filterColor(gl_FragColor);\n }\n}\n";
|
|
48
48
|
var pointFillVert = "attribute vec4 a_Color;\nattribute vec3 a_Position;\nattribute vec3 a_Extrude;\nattribute float a_Size;\nattribute float a_Shape;\n\nvarying mat4 styleMappingMat; // \u7528\u4E8E\u5C06\u5728\u9876\u70B9\u7740\u8272\u5668\u4E2D\u8BA1\u7B97\u597D\u7684\u6837\u5F0F\u503C\u4F20\u9012\u7ED9\u7247\u5143\n\nuniform float u_globel;\nuniform mat4 u_ModelMatrix;\nuniform mat4 u_Mvp;\nuniform float u_isMeter;\n\nvarying vec4 v_data;\nvarying vec4 v_color;\nvarying float v_radius;\n\nuniform float u_opacity : 1;\nuniform float u_stroke_opacity : 1;\nuniform float u_stroke_width : 2;\nuniform vec4 u_stroke_color : [0.0, 0.0, 0.0, 0.0];\nuniform vec2 u_offsets;\n\nuniform float u_blur : 0.0;\n\n#pragma include \"styleMapping\"\n#pragma include \"styleMappingCalOpacity\"\n#pragma include \"styleMappingCalStrokeOpacity\"\n#pragma include \"styleMappingCalStrokeWidth\"\n\n#pragma include \"projection\"\n#pragma include \"picking\"\n\n\nvoid main() {\n vec3 extrude = a_Extrude;\n float shape_type = a_Shape;\n float newSize = setPickingSize(a_Size);\n\n // cal style mapping - \u6570\u636E\u7EB9\u7406\u6620\u5C04\u90E8\u5206\u7684\u8BA1\u7B97\n styleMappingMat = mat4(\n 0.0, 0.0, 0.0, 0.0, // opacity - strokeOpacity - strokeWidth - empty\n 0.0, 0.0, 0.0, 0.0, // strokeR - strokeG - strokeB - strokeA\n 0.0, 0.0, 0.0, 0.0, // offsets[0] - offsets[1]\n 0.0, 0.0, 0.0, 0.0\n );\n\n float rowCount = u_cellTypeLayout[0][0]; // \u5F53\u524D\u7684\u6570\u636E\u7EB9\u7406\u6709\u51E0\u884C\n float columnCount = u_cellTypeLayout[0][1]; // \u5F53\u770B\u5230\u6570\u636E\u7EB9\u7406\u6709\u51E0\u5217\n float columnWidth = 1.0/columnCount; // \u5217\u5BBD\n float rowHeight = 1.0/rowCount; // \u884C\u9AD8\n float cellCount = calCellCount(); // opacity - strokeOpacity - strokeWidth - stroke - offsets\n float id = a_vertexId; // \u7B2Cn\u4E2A\u9876\u70B9\n float cellCurrentRow = floor(id * cellCount / columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u884C\n float cellCurrentColumn = mod(id * cellCount, columnCount) + 1.0; // \u8D77\u59CB\u70B9\u5728\u7B2C\u51E0\u5217\n \n // cell \u56FA\u5B9A\u987A\u5E8F opacity -> strokeOpacity -> strokeWidth -> stroke ... \n // \u6309\u987A\u5E8F\u4ECE cell \u4E2D\u53D6\u503C\u3001\u82E5\u6CA1\u6709\u5219\u81EA\u52A8\u5F80\u4E0B\u53D6\u503C\n float textureOffset = 0.0; // \u5728 cell \u4E2D\u53D6\u503C\u7684\u504F\u79FB\u91CF\n\n vec2 opacityAndOffset = calOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][0] = opacityAndOffset.r;\n textureOffset = opacityAndOffset.g;\n\n vec2 strokeOpacityAndOffset = calStrokeOpacityAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][1] = strokeOpacityAndOffset.r;\n textureOffset = strokeOpacityAndOffset.g;\n\n vec2 strokeWidthAndOffset = calStrokeWidthAndOffset(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset, columnWidth, rowHeight);\n styleMappingMat[0][2] = strokeWidthAndOffset.r;\n textureOffset = strokeWidthAndOffset.g;\n\n vec4 textrueStroke = vec4(-1.0, -1.0, -1.0, -1.0);\n if(hasStroke()) {\n vec2 valueRPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][0] = pos2value(valueRPos, columnWidth, rowHeight); // R\n textureOffset += 1.0;\n\n vec2 valueGPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][1] = pos2value(valueGPos, columnWidth, rowHeight); // G\n textureOffset += 1.0;\n\n vec2 valueBPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][2] = pos2value(valueBPos, columnWidth, rowHeight); // B\n textureOffset += 1.0;\n\n vec2 valueAPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n styleMappingMat[1][3] = pos2value(valueAPos, columnWidth, rowHeight); // A\n textureOffset += 1.0;\n } else {\n if(u_stroke_color == vec4(0.0)) {\n styleMappingMat[1][0] = v_color.r;\n styleMappingMat[1][1] = v_color.g;\n styleMappingMat[1][2] = v_color.b;\n styleMappingMat[1][3] = v_color.a;\n } else {\n styleMappingMat[1][0] = u_stroke_color.r;\n styleMappingMat[1][1] = u_stroke_color.g;\n styleMappingMat[1][2] = u_stroke_color.b;\n styleMappingMat[1][3] = u_stroke_color.a;\n }\n }\n\n vec2 textrueOffsets = vec2(0.0, 0.0);\n if(hasOffsets()) {\n vec2 valueXPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.r = pos2value(valueXPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n\n vec2 valueYPos = nextPos(cellCurrentRow, cellCurrentColumn, columnCount, textureOffset);\n textrueOffsets.g = pos2value(valueYPos, columnWidth, rowHeight); // x\n textureOffset += 1.0;\n } else {\n textrueOffsets = u_offsets;\n }\n\n // cal style mapping\n\n // unpack color(vec2)\n v_color = a_Color;\n\n // radius(16-bit)\n v_radius = newSize;\n\n // TODO: billboard\n // anti-alias\n // float antialiased_blur = -max(u_blur, antialiasblur);\n float antialiasblur = -max(2.0 / u_DevicePixelRatio / a_Size, u_blur);\n\n vec2 offset = (extrude.xy * (newSize + u_stroke_width) + textrueOffsets);\n vec3 aPosition = a_Position;\n if(u_isMeter < 1.0) {\n // \u4E0D\u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n offset = project_pixel(offset);\n } else {\n // \u4EE5\u7C73\u4E3A\u5B9E\u9645\u5355\u4F4D\n antialiasblur *= pow(19.0 - u_Zoom, 2.0);\n antialiasblur = max(antialiasblur, -0.01);\n // offset *= 0.5;\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT || u_CoordinateSystem == COORDINATE_SYSTEM_LNGLAT_OFFSET) {\n aPosition.xy += offset;\n offset.x = 0.0;\n offset.y = 0.0;\n }\n }\n\n // TODP: /abs(extrude.x) \u662F\u4E3A\u4E86\u517C\u5BB9\u5730\u7403\u6A21\u5F0F\n v_data = vec4(extrude.x/abs(extrude.x), extrude.y/abs(extrude.y), antialiasblur,shape_type);\n\n\n // vec4 project_pos = project_position(vec4(a_Position.xy, 0.0, 1.0));\n vec4 project_pos = project_position(vec4(aPosition.xy, 0.0, 1.0));\n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n\n if(u_CoordinateSystem == COORDINATE_SYSTEM_P20_2) { // gaode2.x\n gl_Position = u_Mvp * vec4(project_pos.xy + offset, 0.0, 1.0);\n } else {\n gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, project_pixel(setPickingOrder(0.0)), 1.0));\n }\n\n if(u_globel > 0.0) {\n gl_Position = u_ViewProjectionMatrix * vec4(a_Position + extrude * newSize * 0.1, 1.0);\n }\n \n // gl_Position = project_common_position_to_clipspace(vec4(project_pos.xy + offset, 0.0, 1.0));\n\n setPickingColor(a_PickingColor);\n}\n";
|
|
49
49
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@antv/l7-layers",
|
|
3
|
-
"version": "2.7.
|
|
3
|
+
"version": "2.7.34",
|
|
4
4
|
"description": "L7's collection of built-in layers",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"module": "es/index.js",
|
|
@@ -24,9 +24,9 @@
|
|
|
24
24
|
"license": "ISC",
|
|
25
25
|
"dependencies": {
|
|
26
26
|
"@antv/geo-coord": "^1.0.8",
|
|
27
|
-
"@antv/l7-core": "^2.7.
|
|
28
|
-
"@antv/l7-source": "^2.7.
|
|
29
|
-
"@antv/l7-utils": "^2.7.
|
|
27
|
+
"@antv/l7-core": "^2.7.34",
|
|
28
|
+
"@antv/l7-source": "^2.7.34",
|
|
29
|
+
"@antv/l7-utils": "^2.7.34",
|
|
30
30
|
"@babel/runtime": "^7.7.7",
|
|
31
31
|
"@mapbox/martini": "^0.2.0",
|
|
32
32
|
"@turf/meta": "^6.0.2",
|
|
@@ -52,7 +52,7 @@
|
|
|
52
52
|
"@types/gl-matrix": "^2.4.5",
|
|
53
53
|
"@types/lodash": "^4.14.138"
|
|
54
54
|
},
|
|
55
|
-
"gitHead": "
|
|
55
|
+
"gitHead": "b72aef9a289ab99a95499ecf88a6690226b597b7",
|
|
56
56
|
"publishConfig": {
|
|
57
57
|
"access": "public"
|
|
58
58
|
}
|