diff --git a/src/component/marker/MarkAreaView.ts b/src/component/marker/MarkAreaView.ts index e23403cbfe..f9b762cf1e 100644 --- a/src/component/marker/MarkAreaView.ts +++ b/src/component/marker/MarkAreaView.ts @@ -27,7 +27,7 @@ import { enableHoverEmphasis, setStatesStylesFromModel } from '../../util/states import * as markerHelper from './markerHelper'; import MarkerView from './MarkerView'; import { retrieve, mergeAll, map, curry, filter, HashMap, extend } from 'zrender/src/core/util'; -import { ScaleDataValue, ParsedValue, ZRColor } from '../../util/types'; +import { ParsedValue, ScaleDataValue, ZRColor } from '../../util/types'; import { CoordinateSystem, isCoordinateSystemType } from '../../coord/CoordinateSystem'; import MarkAreaModel, { MarkArea2DDataItemOption } from './MarkAreaModel'; import SeriesModel from '../../model/Series'; @@ -41,6 +41,7 @@ import { getVisualFromData } from '../../visual/helper'; import { setLabelStyle, getLabelStatesModels } from '../../label/labelStyle'; import { getECData } from '../../util/innerStore'; import Axis2D from '../../coord/cartesian/Axis2D'; +import { parseDataValue } from '../../data/helper/dataValueHelper'; interface MarkAreaDrawGroup { group: graphic.Group @@ -362,11 +363,11 @@ function createList( maModel: MarkAreaModel ) { - let coordDimsInfos: SeriesDimensionDefine[]; let areaData: SeriesData; + let dataDims: SeriesDimensionDefine[]; const dims = ['x0', 'y0', 'x1', 'y1']; if (coordSys) { - coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { + const coordDimsInfos: SeriesDimensionDefine[] = map(coordSys && coordSys.dimensions, function (coordDim) { const data = seriesModel.getData(); const info = data.getDimensionInfo( data.mapDimension(coordDim) @@ -378,19 +379,18 @@ function createList( ordinalMeta: null }); }); - areaData = new SeriesData(map(dims, function (dim, idx) { - return { - name: dim, - type: coordDimsInfos[idx % 2].type - }; - }), maModel); + dataDims = map(dims, (dim, idx) => ({ + name: dim, + type: coordDimsInfos[idx % 2].type + })); + areaData = new SeriesData(dataDims, maModel); } else { - coordDimsInfos = [{ + dataDims = [{ name: 'value', type: 'float' }]; - areaData = new SeriesData(coordDimsInfos, maModel); + areaData = new SeriesData(dataDims, maModel); } let optData = map(maModel.get('data'), curry( @@ -402,17 +402,15 @@ function createList( ); } - const dimValueGetter = coordSys ? function ( - item: MarkAreaMergedItemOption, - dimName: string, - dataIndex: number, - dimIndex: number - ) { - // TODO should convert to ParsedValue? - return item.coord[Math.floor(dimIndex / 2)][dimIndex % 2] as ParsedValue; - } : function (item: MarkAreaMergedItemOption) { - return item.value; - }; + const dimValueGetter: markerHelper.MarkerDimValueGetter = coordSys + ? function (item, dimName, dataIndex, dimIndex) { + // TODO should convert to ParsedValue? + const rawVal = item.coord[Math.floor(dimIndex / 2)][dimIndex % 2]; + return parseDataValue(rawVal, dataDims[dimIndex]); + } + : function (item, dimName, dataIndex, dimIndex) { + return parseDataValue(item.value, dataDims[dimIndex]); + }; areaData.initData(optData, null, dimValueGetter); areaData.hasItemOption = true; return areaData; diff --git a/src/component/marker/MarkLineView.ts b/src/component/marker/MarkLineView.ts index 212ce68ced..7c651b6bd7 100644 --- a/src/component/marker/MarkLineView.ts +++ b/src/component/marker/MarkLineView.ts @@ -50,6 +50,7 @@ import { makeInner } from '../../util/model'; import { LineDataVisual } from '../../visual/commonVisualTypes'; import { getVisualFromData } from '../../visual/helper'; import Axis2D from '../../coord/cartesian/Axis2D'; +import SeriesDimensionDefine from '../../data/SeriesDimensionDefine'; // Item option for configuring line and each end of symbol. // Line option. be merged from configuration of two ends. @@ -435,7 +436,7 @@ class MarkLineView extends MarkerView { function createList(coordSys: CoordinateSystem, seriesModel: SeriesModel, mlModel: MarkLineModel) { - let coordDimsInfos; + let coordDimsInfos: SeriesDimensionDefine[]; if (coordSys) { coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { const info = seriesModel.getData().getDimensionInfo( @@ -469,9 +470,9 @@ function createList(coordSys: CoordinateSystem, seriesModel: SeriesModel, mlMode optData, curry(markLineFilter, coordSys) ); } - const dimValueGetter = coordSys ? markerHelper.dimValueGetter : function (item: MarkLineMergedItemOption) { - return item.value; - }; + + const dimValueGetter = markerHelper.createMarkerDimValueGetter(!!coordSys, coordDimsInfos); + fromData.initData( map(optData, function (item) { return item[0]; diff --git a/src/component/marker/MarkPointView.ts b/src/component/marker/MarkPointView.ts index f0693da1fe..d5e4fc1fa7 100644 --- a/src/component/marker/MarkPointView.ts +++ b/src/component/marker/MarkPointView.ts @@ -29,10 +29,11 @@ import MarkPointModel, {MarkPointDataItemOption} from './MarkPointModel'; import GlobalModel from '../../model/Global'; import MarkerModel from './MarkerModel'; import ExtensionAPI from '../../core/ExtensionAPI'; -import { HashMap, isFunction, map, defaults, filter, curry, extend } from 'zrender/src/core/util'; +import { HashMap, isFunction, map, filter, curry, extend } from 'zrender/src/core/util'; import { getECData } from '../../util/innerStore'; import { getVisualFromData } from '../../visual/helper'; import { ZRColor } from '../../util/types'; +import SeriesDimensionDefine from '../../data/SeriesDimensionDefine'; function updateMarkerLayout( mpData: SeriesData, @@ -180,7 +181,7 @@ function createData( seriesModel: SeriesModel, mpModel: MarkPointModel ) { - let coordDimsInfos; + let coordDimsInfos: SeriesDimensionDefine[]; if (coordSys) { coordDimsInfos = map(coordSys && coordSys.dimensions, function (coordDim) { const info = seriesModel.getData().getDimensionInfo( @@ -211,11 +212,8 @@ function createData( ); } - mpData.initData(dataOpt, null, - coordSys ? markerHelper.dimValueGetter : function (item: MarkPointDataItemOption) { - return item.value; - } - ); + const dimValueGetter = markerHelper.createMarkerDimValueGetter(!!coordSys, coordDimsInfos); + mpData.initData(dataOpt, null, dimValueGetter); return mpData; } diff --git a/src/component/marker/markerHelper.ts b/src/component/marker/markerHelper.ts index 0987473a59..f0394b7f6a 100644 --- a/src/component/marker/markerHelper.ts +++ b/src/component/marker/markerHelper.ts @@ -26,6 +26,8 @@ import { indexOf, curry, clone, isArray } from 'zrender/src/core/util'; import Axis from '../../coord/Axis'; import { CoordinateSystem } from '../../coord/CoordinateSystem'; import { ScaleDataValue, ParsedValue, DimensionLoose, DimensionName } from '../../util/types'; +import { parseDataValue } from '../../data/helper/dataValueHelper'; +import SeriesDimensionDefine from '../../data/SeriesDimensionDefine'; interface MarkerAxisInfo { valueDataDim: DimensionName @@ -34,6 +36,13 @@ interface MarkerAxisInfo { baseDataDim: DimensionName } +export type MarkerDimValueGetter = ( + item: TMarkerItemOption, + dimName: string, + dataIndex: number, + dimIndex: number +) => ParsedValue; + function hasXOrY(item: MarkerPositionOption) { return !(isNaN(parseFloat(item.x as string)) && isNaN(parseFloat(item.y as string))); } @@ -187,17 +196,21 @@ export function dataFilter( ? coordSys.containData(item.coord) : true; } -export function dimValueGetter( - item: MarkerPositionOption, - dimName: string, - dataIndex: number, - dimIndex: number -) { - // x, y, radius, angle - if (dimIndex < 2) { - return item.coord && item.coord[dimIndex] as ParsedValue; - } - return item.value; +export function createMarkerDimValueGetter( + inCoordSys: boolean, + dims: SeriesDimensionDefine[] +): MarkerDimValueGetter { + return inCoordSys + ? function (item, dimName, dataIndex, dimIndex) { + const rawVal = dimIndex < 2 + // x, y, radius, angle + ? (item.coord && item.coord[dimIndex]) + : item.value; + return parseDataValue(rawVal, dims[dimIndex]); + } + : function (item, dimName, dataIndex, dimIndex) { + return parseDataValue(item.value, dims[dimIndex]); + }; } export function numCalculate( diff --git a/test/marker-case.html b/test/marker-case.html new file mode 100644 index 0000000000..756fa49dda --- /dev/null +++ b/test/marker-case.html @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + +