/* * 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 * as graphic from '../../util/graphic'; import { toggleHoverEmphasis } from '../../util/states'; import type { LineDrawSeriesScope, LineDrawModelOption } from './LineDraw'; import type SeriesData from '../../data/SeriesData'; import { BlurScope, DefaultEmphasisFocus } from '../../util/types'; class Polyline extends graphic.Group { constructor(lineData: SeriesData, idx: number, seriesScope: LineDrawSeriesScope) { super(); this._createPolyline(lineData, idx, seriesScope); } private _createPolyline(lineData: SeriesData, idx: number, seriesScope: LineDrawSeriesScope) { // let seriesModel = lineData.hostModel; const points = lineData.getItemLayout(idx); const line = new graphic.Polyline({ shape: { points: points } }); this.add(line); this._updateCommonStl(lineData, idx, seriesScope); }; updateData(lineData: SeriesData, idx: number, seriesScope: LineDrawSeriesScope) { const seriesModel = lineData.hostModel; const line = this.childAt(0) as graphic.Polyline; const target = { shape: { points: lineData.getItemLayout(idx) as number[][] } }; graphic.updateProps(line, target, seriesModel, idx); this._updateCommonStl(lineData, idx, seriesScope); }; _updateCommonStl(lineData: SeriesData, idx: number, seriesScope: LineDrawSeriesScope) { const line = this.childAt(0) as graphic.Polyline; const itemModel = lineData.getItemModel(idx); let emphasisLineStyle = seriesScope && seriesScope.emphasisLineStyle; let focus = (seriesScope && seriesScope.focus) as DefaultEmphasisFocus; let blurScope = (seriesScope && seriesScope.blurScope) as BlurScope; let emphasisDisabled = seriesScope && seriesScope.emphasisDisabled; if (!seriesScope || lineData.hasItemOption) { const emphasisModel = itemModel.getModel('emphasis'); emphasisLineStyle = emphasisModel.getModel('lineStyle').getLineStyle(); emphasisDisabled = emphasisModel.get('disabled'); focus = emphasisModel.get('focus'); blurScope = emphasisModel.get('blurScope'); } line.useStyle(lineData.getItemVisual(idx, 'style')); line.style.fill = null; line.style.strokeNoScale = true; const lineEmphasisState = line.ensureState('emphasis'); lineEmphasisState.style = emphasisLineStyle; toggleHoverEmphasis(this, focus, blurScope, emphasisDisabled); }; updateLayout(lineData: SeriesData, idx: number) { const polyline = this.childAt(0) as graphic.Polyline; polyline.setShape('points', lineData.getItemLayout(idx)); }; } export default Polyline;