| /* |
| * 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<LineDrawModelOption>(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; |