/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import createSeriesData from '../helper/createSeriesData'; import SeriesModel from '../../model/Series'; import { SeriesOption, SeriesOnPolarOptionMixin, SeriesOnCartesianOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, OptionDataValue, ItemStyleOption, SeriesLabelOption, StatesOptionMixin, SeriesEncodeOptionMixin, CallbackDataParams, DefaultEmphasisFocus } from '../../util/types'; import GlobalModel from '../../model/Global'; import SeriesData from '../../data/SeriesData'; import type { SymbolDrawItemModelOption } from '../helper/SymbolDraw'; import { BrushCommonSelectorsForSeries } from '../../component/brush/selector'; type ScatterDataValue = OptionDataValue | OptionDataValue[]; interface EffectScatterStatesOptionMixin { emphasis?: { focus?: DefaultEmphasisFocus scale?: boolean | number } } export interface EffectScatterStateOption { itemStyle?: ItemStyleOption label?: SeriesLabelOption } export interface EffectScatterDataItemOption extends SymbolOptionMixin, EffectScatterStateOption, StatesOptionMixin { name?: string value?: ScatterDataValue rippleEffect?: SymbolDrawItemModelOption['rippleEffect'] } export interface EffectScatterSeriesOption extends SeriesOption, EffectScatterStatesOptionMixin>, EffectScatterStateOption, SeriesOnCartesianOptionMixin, SeriesOnPolarOptionMixin, SeriesOnCalendarOptionMixin, SeriesOnGeoOptionMixin, SeriesOnSingleOptionMixin, SymbolOptionMixin, SeriesEncodeOptionMixin { type?: 'effectScatter' coordinateSystem?: string effectType?: 'ripple' /** * When to show the effect */ showEffectOn?: 'render' | 'emphasis' clip?: boolean /** * Ripple effect config */ rippleEffect?: SymbolDrawItemModelOption['rippleEffect'] data?: (EffectScatterDataItemOption | ScatterDataValue)[] } class EffectScatterSeriesModel extends SeriesModel { static readonly type = 'series.effectScatter'; type = EffectScatterSeriesModel.type; static readonly dependencies = ['grid', 'polar']; hasSymbolVisual = true; getInitialData(option: EffectScatterSeriesOption, ecModel: GlobalModel): SeriesData { return createSeriesData(null, this, {useEncodeDefaulter: true}); } brushSelector(dataIndex: number, data: SeriesData, selectors: BrushCommonSelectorsForSeries): boolean { return selectors.point(data.getItemLayout(dataIndex)); } static defaultOption: EffectScatterSeriesOption = { coordinateSystem: 'cartesian2d', // zlevel: 0, z: 2, legendHoverLink: true, effectType: 'ripple', progressive: 0, // When to show the effect, option: 'render'|'emphasis' showEffectOn: 'render', clip: true, // Ripple effect config rippleEffect: { period: 4, // Scale of ripple scale: 2.5, // Brush type can be fill or stroke brushType: 'fill', // Ripple number number: 3 }, universalTransition: { divideShape: 'clone' }, // Cartesian coordinate system // xAxisIndex: 0, // yAxisIndex: 0, // Polar coordinate system // polarIndex: 0, // Geo coordinate system // geoIndex: 0, // symbol: null, // 图形类型 symbolSize: 10 // 图形大小,半宽(半径)参数,当图形为方向或菱形则总宽度为symbolSize * 2 // symbolRotate: null, // 图形旋转控制 // itemStyle: { // opacity: 1 // } }; } export default EffectScatterSeriesModel;