NuclearDispersionSystem/ant-design-vue-jeecg/node_modules/@antv/g2/esm/geometry/base.js.map
2023-09-14 14:47:11 +08:00

1 line
91 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/geometry/base.ts"],"names":[],"mappings":"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","sourcesContent":["import { Adjust, getAdjust as getAdjustClass } from '@antv/adjust';\nimport { Attribute, getAttribute as getAttributeClass } from '@antv/attr';\nimport {\n clone,\n deepMix,\n each,\n flatten,\n get,\n isArray,\n isEmpty,\n isEqual,\n isFunction,\n isNil,\n isNumber,\n isObject,\n isPlainObject,\n isString,\n set,\n} from '@antv/util';\nimport { doGroupAppearAnimate, getDefaultAnimateCfg } from '../animate';\nimport Base from '../base';\nimport { FIELD_ORIGIN, GROUP_ATTRS } from '../constant';\nimport { BBox, Coordinate, IGroup, IShape, Scale } from '../dependents';\nimport {\n AdjustOption,\n AdjustType,\n AnimateOption,\n AttributeOption,\n ColorAttrCallback,\n Data,\n Datum,\n GeometryLabelCfg,\n GeometryTooltipOption,\n LabelCallback,\n LabelOption,\n LooseObject,\n MappingDatum,\n ScaleOption,\n ShapeAttrCallback,\n ShapeFactory,\n ShapeInfo,\n ShapeMarkerCfg,\n ShapePoint,\n SizeAttrCallback,\n StateOption,\n StyleCallback,\n StyleOption,\n TooltipCallback,\n} from '../interface';\nimport { uniq } from '../util/helper';\nimport Element from './element';\nimport { getGeometryLabel } from './label';\nimport GeometryLabel from './label/base';\nimport { getShapeFactory } from './shape/base';\nimport { group } from './util/group-data';\nimport { isModelChange } from './util/is-model-change';\nimport { parseFields } from './util/parse-fields';\n\n/** @ignore */\ninterface AttributeInstanceCfg {\n fields?: string[];\n callback?: (...args) => any;\n values?: string[] | number[];\n scales?: Scale[];\n}\n\n/** @ignore */\ninterface AdjustInstanceCfg {\n type: AdjustType;\n adjustNames?: string[];\n xField?: string;\n yField?: string;\n\n dodgeBy?: string;\n marginRatio?: number;\n dodgeRatio?: number;\n\n size?: number;\n height?: number;\n reverseOrder?: boolean;\n}\n\n/** geometry.init() 传入参数 */\nexport interface InitCfg {\n /** 坐标系 */\n coordinate?: Coordinate;\n /** 数据 */\n data?: Data;\n /** 主题对象 */\n theme?: LooseObject;\n /** 列定义 */\n scaleDefs?: Record<string, ScaleOption>;\n /** 因为数据使用的引用,所以需要有一个标识位标识数据是否发生了更新 */\n isDataChanged?: boolean;\n isCoordinateChanged?: boolean;\n}\n\n/** Geometry 构造函数参数 */\nexport interface GeometryCfg {\n /** Geometry shape 的容器。 */\n container: IGroup;\n /** 绘制的坐标系对象。 */\n coordinate?: Coordinate;\n /** 绘制数据。 */\n data?: Data;\n /** 需要的 scales。 */\n scales?: Record<string, Scale>;\n /** 列定义 */\n scaleDefs?: Record<string, ScaleOption>;\n /** Geometry labels 的容器 */\n labelsContainer?: IGroup;\n /** 是否对数据进行排序 */\n sortable?: boolean;\n /** 是否可见 */\n visible?: boolean;\n /** 主题配置 */\n theme?: LooseObject;\n}\n\n// 根据 elementId 查找对应的 label因为有可能一个 element 对应多个 labels所以在给 labels 打标识时做了处理\n// 打标规则详见 ./label/base.ts#L263\nfunction filterLabelsById(id: string, labelsMap: Record<string, IGroup>) {\n const labels = [];\n each(labelsMap, (label: IGroup, labelId: string) => {\n const elementId = labelId.split(' ')[0];\n if (elementId === id) {\n labels.push(label);\n }\n });\n\n return labels;\n}\n\n/**\n * Geometry 几何标记基类,主要负责数据到图形属性的映射以及绘制逻辑。\n */\nexport default class Geometry extends Base {\n /** Geometry 几何标记类型。 */\n public readonly type: string = 'base';\n /** ShapeFactory 对应的类型。 */\n public readonly shapeType: string;\n\n // 在创建 Geometry 实例时可以传入的属性\n /** Coordinate 坐标系实例。 */\n public coordinate: Coordinate;\n /** 用户绘制数据。 */\n public data: Data;\n /** 图形绘制容器。 */\n public readonly container: IGroup;\n /** label 绘制容器。 */\n public readonly labelsContainer: IGroup;\n /** 是否对数据进行排序,默认为 false。 */\n public sortable: boolean;\n /** 当前 Geometry 实例主题。 */\n public theme: LooseObject;\n /** 存储 geometry 需要的 scales需要外部传入。 */\n public scales: Record<string, Scale>;\n /** scale 定义,需要外部传入。 */\n public scaleDefs: Record<string, ScaleOption>;\n /** 画布区域,用于 label 布局。 */\n public canvasRegion: BBox;\n\n // 内部产生的属性\n /** Attribute map */\n public attributes: Record<string, Attribute> = {};\n /** Element map */\n public elements: Element[] = [];\n /**\n * 存储处理后的数据,\n * + init() 及 updateData() 逻辑后, 结构为 Data[]\n * + paint() 逻辑后,结构为 MappingDatum[][]。\n */\n public dataArray: MappingDatum[][];\n /** 存储 tooltip 配置信息。 */\n public tooltipOption: GeometryTooltipOption | boolean;\n /** 存储 label 配置信息。 */\n public labelOption: LabelOption | false;\n /** 状态量相关的配置项 */\n public stateOption: StateOption;\n /** 使用 key-value 结构存储 Elementkey 为每个 Element 实例对应的唯一 ID */\n public elementsMap: Record<string, Element> = {};\n /** animate 配置项 */\n public animateOption: AnimateOption | boolean = true;\n /** 图形属性映射配置 */\n protected attributeOption: Record<string, AttributeOption> = {};\n /** adjust 配置项 */\n protected adjustOption: AdjustOption[];\n /** style 配置项 */\n protected styleOption: StyleOption;\n /** 每个 Geometry 对应的 Shape 工厂实例,用于创建各个 Shape */\n protected shapeFactory: ShapeFactory;\n /** 存储上一次渲染时的 element 映射表,用于更新逻辑 */\n protected lastElementsMap: Record<string, Element> = {};\n /** 是否生成多个点来绘制图形。 */\n protected generatePoints: boolean = false;\n /** 存储发生图形属性映射前的数据 */\n protected beforeMappingData: Data[] = null;\n /** 存储每个 shape 的默认 size用于 Interval、Schema 几何标记 */\n protected defaultSize: number;\n\n // 用户通过 geometry 构造函数设置的主题\n private userTheme: LooseObject;\n private adjusts: Record<string, Adjust> = {};\n private lastAttributeOption;\n private idFields: string[] = [];\n private geometryLabel: GeometryLabel;\n /** 虚拟 Group用于图形更新 */\n private offscreenGroup: IGroup;\n private groupScales: Scale[];\n private hasSorted: boolean = false;\n protected isCoordinateChanged: boolean = false;\n\n /**\n * 创建 Geometry 实例。\n * @param cfg\n */\n constructor(cfg: GeometryCfg) {\n super(cfg);\n\n const {\n container,\n labelsContainer,\n coordinate,\n data,\n sortable = false,\n visible = true,\n theme,\n scales = {},\n scaleDefs = {},\n } = cfg;\n\n this.container = container;\n this.labelsContainer = labelsContainer;\n this.coordinate = coordinate;\n this.data = data;\n this.sortable = sortable;\n this.visible = visible;\n this.userTheme = theme;\n this.scales = scales;\n this.scaleDefs = scaleDefs;\n }\n\n /**\n * 配置 position 通道映射规则。\n *\n * @example\n * ```typescript\n * // 数据结构: [{ x: 'A', y: 10, color: 'red' }]\n * geometry.position('x*y');\n * geometry.position([ 'x', 'y' ]);\n * geometry.position({\n * fields: [ 'x', 'y' ],\n * });\n * ```\n *\n * @param cfg 映射规则\n * @returns\n */\n public position(cfg: string | string[] | AttributeOption): Geometry {\n let positionCfg = cfg;\n if (!isPlainObject(cfg)) {\n // 字符串字段或者数组字段\n positionCfg = {\n fields: parseFields(cfg),\n };\n }\n\n const fields = get(positionCfg, 'fields');\n if (fields.length === 1) {\n // 默认填充一维 1*xx\n fields.unshift('1');\n set(positionCfg, 'fields', fields);\n }\n set(this.attributeOption, 'position', positionCfg);\n\n return this;\n }\n\n /**\n * 配置 color 通道映射规则。\n *\n * @example\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n * geometry.color({\n * fields: [ 'x' ],\n * values: [ '#1890ff', '#5AD8A6' ],\n * });\n * ```\n *\n * @param field 映射规则\n * @returns\n */\n public color(field: AttributeOption): Geometry;\n /**\n * @example\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n *\n * // 使用 '#1890ff' 颜色渲染图形\n * geometry.color('#1890ff');\n *\n * // 根据 x 字段的数据值进行颜色的映射,这时候 G2 会在内部调用默认的回调函数,读取默认提供的颜色进行数据值到颜色值的映射。\n * geometry.color('x');\n *\n * // 将 'x' 字段的数据值映射至指定的颜色值 colors可以是字符串也可以是数组此时用于通常映射分类数据\n * geometry.color('x', [ '#1890ff', '#5AD8A6' ]);\n *\n * // 使用回调函数进行颜色值的自定义;可以使用多个字段使用、*号连接\n * geometry.color('x', (xVal) => {\n * if (xVal === 'a') {\n * return 'red';\n * }\n * return 'blue';\n * });\n *\n * // 指定颜色的渐变路径,用于映射连续的数据\n * geometry.color('x', '#BAE7FF-#1890FF-#0050B3');\n * ```\n *\n * @param field 参与颜色映射的数据字段,多个字段使用 '*' 连接符进行连接。\n * @param cfg Optional, color 映射规则。\n * @returns\n */\n public color(field: string, cfg?: string | string[] | ColorAttrCallback): Geometry;\n public color(field: AttributeOption | string, cfg?: string | string[] | ColorAttrCallback): Geometry {\n this.createAttrOption('color', field, cfg);\n\n return this;\n }\n\n /**\n * 配置 shape 通道映射规则。\n *\n * @example\n *\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n * geometry.shape({\n * fields: [ 'x' ],\n * });\n * ```\n *\n * @param field 映射规则配置。\n * @returns\n */\n public shape(field: AttributeOption): Geometry;\n /**\n *\n * @example\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n *\n * // 指定常量,将所有数据值映射到固定的 shape\n * geometry.shape('circle');\n *\n * // 将指定的字段映射到内置的 shapes 数组中\n * geometry.shape('x');\n *\n * // 将指定的字段映射到指定的 shapes 数组中\n * geometry.shape('x', [ 'circle', 'diamond', 'square' ]);\n *\n * // 使用回调函数获取 shape用于个性化的 shape 定制,可以根据单个或者多个字段确定\n * geometry.shape('x', (xVal) => {\n * if (xVal === 'a') {\n * return 'circle';\n * }\n * return 'diamond';\n * });\n * ```\n *\n * @param field 参与 shape 映射的数据字段,多个字段使用 '*' 连接符进行连接。\n * @param cfg Optional, shape 映射规则。\n * @returns\n */\n public shape(field: string, cfg?: string[] | ShapeAttrCallback): Geometry;\n public shape(field: AttributeOption | string, cfg?: string[] | ShapeAttrCallback): Geometry {\n this.createAttrOption('shape', field, cfg);\n\n return this;\n }\n\n /**\n * 配置 size 通道映射规则。\n *\n * @example\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n * geometry.size({\n * values: [ 10 ],\n * })\n * ```\n *\n * @param field 映射规则。\n * @returns\n */\n public size(field: AttributeOption): Geometry;\n /**\n *\n * @example\n * ```typescript\n * // data: [{ x: 'A', y: 10, color: 'red' }, { x: 'B', y: 30, color: 'yellow' }]\n *\n * // 直接指定像素大小\n * geometry.size(10);\n *\n * // 指定映射到 size 的字段,使用内置的默认大小范围为 [1, 10]\n * geometry.size('x');\n *\n * // 指定映射到 size 字段外,还提供了 size 的最大值和最小值范围\n * geometry.size('x', [ 5, 30 ]);\n *\n * // 使用回调函数映射 size用于个性化的 size 定制,可以使用多个字段进行映射\n * geometry.size('x', (xVal) => {\n * if (xVal === 'a') {\n * return 10;\n * }\n * return 5;\n * });\n * ```\n *\n * @param field 参与 size 映射的数据字段,多个字段使用 '*' 连接符进行连接。\n * @param cfg Optional, size 映射规则\n * @returns\n */\n public size(field: number | string, cfg?: [number, number] | SizeAttrCallback): Geometry;\n public size(field: AttributeOption | number | string, cfg?: [number, number] | SizeAttrCallback): Geometry {\n this.createAttrOption('size', field, cfg);\n\n return this;\n }\n\n /**\n * 设置数据调整方式。G2 目前内置了四种类型:\n * 1. dodge\n * 2. stack\n * 3. symmetric\n * 4. jitter\n *\n *\n * **Tip**\n * + 对于 'dodge' 类型,可以额外进行如下属性的配置:\n * ```typescript\n * geometry.adjust('dodge', {\n * marginRatio: 0, // 取 0 到 1 范围的值(相对于每个柱子宽度),用于控制一个分组中柱子之间的间距\n * dodgeBy: 'x', // 该属性只对 'dodge' 类型生效,声明以哪个数据字段为分组依据\n * });\n * ```\n *\n * + 对于 'stack' 类型,可以额外进行如下属性的配置:\n * ```typescript\n * geometry.adjust('stack', {\n * reverseOrder: false, // 用于控制是否对数据进行反序操作\n * });\n * ```\n *\n * @example\n * ```typescript\n * geometry.adjust('stack');\n *\n * geometry.adjust({\n * type: 'stack',\n * reverseOrder: false,\n * });\n *\n * // 组合使用 adjust\n * geometry.adjust([ 'stack', 'dodge' ]);\n *\n * geometry.adjust([\n * { type: 'stack' },\n * { type: 'dodge', dodgeBy: 'x' },\n * ]);\n * ```\n *\n * @param adjustCfg 数据调整配置\n * @returns\n */\n public adjust(adjustCfg: string | string[] | AdjustOption | AdjustOption[]): Geometry {\n let adjusts: any = adjustCfg;\n if (isString(adjustCfg) || isPlainObject(adjustCfg)) {\n adjusts = [adjustCfg];\n }\n each(adjusts, (adjust, index) => {\n if (!isObject(adjust)) {\n adjusts[index] = { type: adjust };\n }\n });\n\n this.adjustOption = adjusts;\n return this;\n }\n\n /**\n * 图形样式配置。\n *\n * @example\n * ```typescript\n * // 配置图形样式\n * style({\n * lineWidth: 2,\n * stroke: '#1890ff',\n * });\n *\n * // 根据具体的数据进行详细配置\n * style({\n * fields: [ 'x', 'y' ], // 数据字段\n * callback: (xVal, yVal) => {\n * const style = { lineWidth: 2, stroke: '#1890ff' };\n * if (xVal === 'a') {\n * style.lineDash = [ 2, 2 ];\n * }\n * return style;\n * },\n * });\n * ```\n *\n * @param field 配置样式属性或者样式规则。\n * @returns\n */\n public style(field: StyleOption | LooseObject): Geometry;\n /**\n * @example\n * ```typescript\n * style('x*y', (xVal, yVal) => {\n * const style = { lineWidth: 2, stroke: '#1890ff' };\n * if (xVal === 'a') {\n * style.lineDash = [ 2, 2 ];\n * }\n * return style;\n * });\n * ```\n *\n * @param field 数据字段或者样式配置规则。\n * @param styleFunc Optional, 样式配置回调函数。\n * @returns\n */\n public style(field: string, styleFunc: StyleCallback): Geometry;\n public style(field: StyleOption | LooseObject | string, styleFunc?: StyleCallback): Geometry {\n if (isString(field)) {\n const fields = parseFields(field);\n this.styleOption = {\n fields,\n callback: styleFunc,\n };\n } else {\n const { fields, callback, cfg } = field as StyleOption;\n if (fields || callback || cfg) {\n this.styleOption = field;\n } else {\n this.styleOption = {\n cfg: field,\n };\n }\n }\n\n return this;\n }\n\n /**\n * 配置 Geometry 显示的 tooltip 内容。\n *\n * `tooltip(false)` 代表关闭 tooltip。\n * `tooltip(true)` 代表开启 tooltip。\n *\n * Geometry 默认允许 tooltip 展示,我们可以使用以下方法对 tooltip 的展示内容进行配置:\n *\n * @example\n * ```typescript\n * // data: [{x: 'a', y: 10}]\n * tooltip({\n * fields: [ 'x' ],\n * });\n * ```\n * ![](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*268uQ50if60AAAAAAAAAAABkARQnAQ)\n *\n * ```typescript\n * tooltip({\n * fields: [ 'x', 'y' ],\n * });\n * ```\n * ![](https://gw.alipayobjects.com/mdn/rms_2274c3/afts/img/A*A_ujSa8QhtcAAAAAAAAAAABkARQnAQ)\n *\n * tooltip() 方法同样支持数据映射及回调用法:\n *\n * @example\n * ```typescript\n * chart.tooltip({\n * itemTpl: '<li>{x}: {y}</li>',\n * });\n *\n * chart.line()\n * .position('x*y')\n * .tooltip({\n * fields: [ 'x', 'y' ],\n * callback: (x, y) => {\n * return {\n * x,\n * y,\n * };\n * },\n * });\n * ```\n *\n * 其返回的值必须为对象,该值中的属性同 chart.tooltip() 的 itemTpl 模板相对应,返回的变量可用于 itemTpl 的字符串模板。\n *\n * @param field tooltip 配置信息。\n * @returns\n */\n public tooltip(field: GeometryTooltipOption | boolean): Geometry;\n /**\n * @example\n * ```typescript\n * // data: [{x: 'a', y: 10}]\n *\n * // 等同于 tooltip({ fields: [ 'x' ] })\n * tooltip('x');\n *\n * // 等同于 tooltip({ fields: [ 'x', 'y' ] })\n * tooltip('x*y');\n *\n * // 等同于 tooltip({ fields: [ 'x', 'y' ], callback: (x, y) => { x, y } })\n * tooltip('x*y', (x, y) => {\n * return {\n * x,\n * y,\n * };\n * });\n * ```\n *\n * @param field 参与映射的字段。\n * @param cfg Optional, 回调函数\n * @returns\n */\n public tooltip(field: string, cfg?: TooltipCallback): Geometry;\n public tooltip(field: GeometryTooltipOption | boolean | string, cfg?: TooltipCallback): Geometry {\n if (isString(field)) {\n const fields = parseFields(field);\n this.tooltipOption = {\n fields,\n callback: cfg,\n };\n } else {\n this.tooltipOption = field;\n }\n\n return this;\n }\n\n /**\n * Geometry 动画配置。\n *\n * + `animate(false)` 关闭动画\n * + `animate(true)` 开启动画,默认开启。\n *\n * 我们将动画分为四个场景:\n * 1. appear: 图表第一次加载时的入场动画;\n * 2. enter: 图表绘制完成,发生更新后,产生的新图形的进场动画;\n * 3. update: 图表绘制完成,数据发生变更后,有状态变更的图形的更新动画;\n * 4. leave: 图表绘制完成,数据发生变更后,被销毁图形的销毁动画。\n *\n * @example\n * ```typescript\n * animate({\n * enter: {\n * duration: 1000, // enter 动画执行时间\n * },\n * leave: false, // 关闭 leave 销毁动画\n * });\n * ```\n *\n * @param cfg 动画配置\n * @returns\n */\n public animate(cfg: AnimateOption | boolean): Geometry {\n this.animateOption = cfg;\n return this;\n }\n\n /**\n * Geometry label 配置。\n *\n * @example\n * ```ts\n * // data: [ {x: 1, y: 2, z: 'a'}, {x: 2, y: 2, z: 'b'} ]\n * // 在每个图形上显示 z 字段对应的数值\n * label({\n * fields: [ 'z' ]\n * });\n *\n * label(false); // 不展示 label\n *\n * // 在每个图形上显示 x 字段对应的数值,同时配置文本颜色为红色\n * label('x', {\n * style: {\n * fill: 'red',\n * },\n * })\n *\n * // 以 type 类型的 label 渲染每个图形上显示 x 字段对应的数值,同时格式化文本内容\n * label('x', (xValue) => {\n * return {\n * content: xValue + '%',\n * };\n * }, {\n * type: 'base' // 声明 label 类型\n * })\n * ```\n *\n * @param field\n * @returns label\n */\n public label(field: LabelOption | false | string): Geometry;\n public label(field: string, secondParam: GeometryLabelCfg | LabelCallback): Geometry;\n public label(field: string, secondParam: LabelCallback, thirdParam: GeometryLabelCfg): Geometry;\n public label(\n field: string | LabelOption | false,\n secondParam?: GeometryLabelCfg | LabelCallback,\n thirdParam?: GeometryLabelCfg\n ): Geometry {\n if (isString(field)) {\n const labelOption: LabelOption = {};\n const fields = parseFields(field);\n labelOption.fields = fields;\n if (isFunction(secondParam)) {\n labelOption.callback = secondParam;\n } else if (isPlainObject(secondParam)) {\n labelOption.cfg = secondParam;\n }\n\n if (thirdParam) {\n labelOption.cfg = thirdParam;\n }\n this.labelOption = labelOption;\n } else {\n this.labelOption = field;\n }\n\n return this;\n }\n\n /**\n * 设置状态对应的样式。\n *\n * @example\n * ```ts\n * chart.interval().state({\n * selected: {\n * animate: { duration: 100, easing: 'easeLinear' },\n * style: {\n * lineWidth: 2,\n * stroke: '#000',\n * },\n * },\n * });\n * ```\n *\n * 如果图形 shape 是由多个 shape 组成,即为一个 G.Group 对象,那么针对 group 中的每个 shape我们需要使用下列方式进行状态样式设置\n * 如果我们为 group 中的每个 shape 设置了 'name' 属性(shape.set('name', 'xx')),则以 'name' 作为 key否则默认以索引值即 shape 的 添加顺序)为 key。\n *\n * ```ts\n * chart.interval().shape('groupShape').state({\n * selected: {\n * style: {\n * 0: { lineWidth: 2 },\n * 1: { fillOpacity: 1 },\n * }\n * }\n * });\n * ```\n *\n * @param cfg 状态样式\n */\n public state(cfg: StateOption) {\n this.stateOption = cfg;\n return this;\n }\n\n /**\n * 初始化 Geomtry 实例:\n * 创建 [[Attribute]] and [[Scale]] 实例,进行数据处理,包括分组、数值化以及数据调整。\n */\n public init(cfg: InitCfg = {}) {\n this.setCfg(cfg);\n this.initAttributes(); // 创建图形属性\n\n // 数据加工:分组 -> 数字化 -> adjust\n this.processData(this.data);\n\n // 调整 scale\n this.adjustScale();\n }\n\n /**\n * Geometry 更新。\n * @param [cfg] 更新的配置\n */\n public update(cfg: InitCfg = {}) {\n const { data, isDataChanged, isCoordinateChanged } = cfg;\n const { attributeOption, lastAttributeOption } = this;\n\n if (!isEqual(attributeOption, lastAttributeOption)) {\n // 映射发生改变,则重新创建图形属性\n this.init(cfg);\n } else if (data && (isDataChanged || !isEqual(data, this.data))) {\n // 数据发生变化\n this.setCfg(cfg);\n this.processData(data); // 数据加工:分组 -> 数字化 -> adjust\n } else {\n // 有可能 coordinate 变化\n this.setCfg(cfg);\n }\n\n // 调整 scale\n this.adjustScale();\n this.isCoordinateChanged = isCoordinateChanged;\n }\n\n /**\n * 将原始数据映射至图形空间,同时创建图形对象。\n */\n public paint(isUpdate: boolean = false) {\n if (this.animateOption) {\n this.animateOption = deepMix({}, getDefaultAnimateCfg(this.type, this.coordinate), this.animateOption)\n }\n\n this.defaultSize = undefined;\n this.elements = [];\n this.elementsMap = {};\n const offscreenGroup = this.getOffscreenGroup();\n offscreenGroup.clear();\n\n const beforeMappingData = this.beforeMappingData;\n const dataArray = this.beforeMapping(beforeMappingData);\n\n const mappingArray = [];\n for (let index = 0, length = dataArray.length; index < length; index++) {\n const eachGroup = dataArray[index];\n const mappingData = this.mapping(eachGroup);\n mappingArray.push(mappingData);\n this.createElements(mappingData, index, isUpdate);\n }\n\n if (this.canDoGroupAnimation(isUpdate)) {\n // 如果用户没有配置 appear.animation就默认走整体动画\n const container = this.container;\n const type = this.type;\n const coordinate = this.coordinate;\n const animateCfg = get(this.animateOption, 'appear');\n const yScale = this.getYScale();\n const yMinPoint = coordinate.convert({\n x: 0,\n y: yScale.scale(this.getYMinValue()),\n });\n doGroupAppearAnimate(container, animateCfg, type, coordinate, yMinPoint);\n }\n\n // 添加 label\n if (this.labelOption) {\n this.renderLabels(flatten(mappingArray), isUpdate);\n }\n\n this.dataArray = mappingArray;\n\n // 销毁被删除的 elements\n each(this.lastElementsMap, (deletedElement: Element) => {\n // 更新动画配置,用户有可能在更新之前有对动画进行配置操作\n deletedElement.animate = this.animateOption;\n deletedElement.destroy();\n });\n\n this.lastElementsMap = this.elementsMap;\n\n // 缓存,用于更新\n this.lastAttributeOption = {\n ...this.attributeOption,\n };\n\n if (this.visible === false) {\n // 用户在初始化的时候声明 visible: false\n this.changeVisible(false);\n }\n }\n\n /**\n * 清空当前 Geometry配置项仍保留但是内部创建的对象全部清空。\n * @override\n */\n public clear() {\n const { container, geometryLabel, offscreenGroup } = this;\n if (container) {\n container.clear();\n }\n\n if (geometryLabel) {\n geometryLabel.clear();\n }\n\n if (offscreenGroup) {\n offscreenGroup.clear();\n }\n\n // 属性恢复至出厂状态\n this.scaleDefs = undefined;\n this.attributes = {};\n this.scales = {};\n this.elementsMap = {};\n this.lastElementsMap = {};\n this.elements = [];\n this.adjusts = {};\n this.dataArray = null;\n this.beforeMappingData = null;\n this.lastAttributeOption = undefined;\n this.defaultSize = undefined;\n this.idFields = [];\n this.groupScales = undefined;\n this.hasSorted = false;\n this.isCoordinateChanged = false;\n }\n\n /**\n * 销毁 Geometry 实例。\n */\n public destroy() {\n this.clear();\n const container = this.container;\n container.remove(true);\n\n if (this.offscreenGroup) {\n this.offscreenGroup.remove(true);\n this.offscreenGroup = null;\n }\n\n if (this.geometryLabel) {\n this.geometryLabel.destroy();\n this.geometryLabel = null;\n }\n this.theme = undefined;\n this.shapeFactory = undefined;\n\n super.destroy();\n }\n\n /**\n * 获取决定分组的图形属性对应的 scale 实例。\n * @returns\n */\n public getGroupScales(): Scale[] {\n return this.groupScales;\n }\n\n /**\n * 根据名字获取图形属性实例。\n */\n public getAttribute(name: string): Attribute {\n return this.attributes[name];\n }\n\n /** 获取 x 轴对应的 scale 实例。 */\n public getXScale(): Scale {\n return this.getAttribute('position').scales[0];\n }\n\n /** 获取 y 轴对应的 scale 实例。 */\n public getYScale(): Scale {\n return this.getAttribute('position').scales[1];\n }\n\n /**\n * 获取决定分组的图形属性实例。\n */\n public getGroupAttributes(): Attribute[] {\n const rst = [];\n each(this.attributes, (attr: Attribute) => {\n if (GROUP_ATTRS.includes(attr.type)) {\n rst.push(attr);\n }\n });\n return rst;\n }\n\n /** 获取图形属性默认的映射值。 */\n public getDefaultValue(attrName: string) {\n let value: any;\n const attr = this.getAttribute(attrName);\n if (attr && isEmpty(attr.scales)) {\n // 获取映射至常量的值\n value = attr.values[0];\n }\n return value;\n }\n\n /**\n * 获取该数据发生图形映射后对应的 Attribute 图形空间数据。\n * @param attr Attribute 图形属性实例。\n * @param obj 需要进行映射的原始数据。\n * @returns\n */\n public getAttributeValues(attr: Attribute, obj: Datum) {\n const params = [];\n const scales = attr.scales;\n for (let index = 0, length = scales.length; index < length; index++) {\n const scale = scales[index];\n const field = scale.field;\n if (scale.isIdentity) {\n params.push(scale.values);\n } else {\n params.push(obj[field]);\n }\n }\n\n return attr.mapping(...params);\n }\n\n public getAdjust(adjustType: string) {\n return this.adjusts[adjustType];\n }\n\n /**\n * 获取 shape 对应的 marker 样式。\n * @param shapeName shape 具体名字\n * @param cfg marker 信息\n * @returns\n */\n public getShapeMarker(shapeName: string, cfg: ShapeMarkerCfg) {\n const shapeFactory = this.getShapeFactory();\n return shapeFactory.getMarker(shapeName, cfg);\n }\n\n /**\n * 根据一定的规则查找 Geometry 的 Elements。\n *\n * ```typescript\n * getElementsBy((element) => {\n * const data = element.getData();\n *\n * return data.a === 'a';\n * });\n * ```\n *\n * @param condition 定义查找规则的回调函数。\n * @returns\n */\n public getElementsBy(condition: (element: Element) => boolean): Element[] {\n return this.elements.filter((element) => {\n return condition(element);\n });\n }\n\n /**\n * 获取数据对应的唯一 id。\n * @param data Element 对应的绘制数据\n * @returns\n */\n public getElementId(data: MappingDatum | MappingDatum[]) {\n data = isArray(data) ? data[0] : data;\n const originData = data[FIELD_ORIGIN];\n\n // 如果用户声明了使用哪些字段作为 id 值\n if (this.idFields.length) {\n let elementId = originData[this.idFields[0]];\n for (let index = 1; index < this.idFields.length; index++) {\n elementId += '-' + originData[this.idFields[index]];\n }\n\n return elementId;\n }\n\n const type = this.type;\n const xScale = this.getXScale();\n const yScale = this.getYScale();\n const xField = xScale.field || 'x';\n const yField = yScale.field || 'y';\n const yVal = originData[yField];\n let xVal;\n if (xScale.type === 'identity') {\n xVal = xScale.values[0];\n } else {\n xVal = originData[xField];\n }\n\n let id: string;\n if (type === 'interval' || type === 'schema') {\n id = xVal;\n } else if (type === 'line' || type === 'area' || type === 'path') {\n id = type;\n } else {\n id = `${xVal}-${yVal}`;\n }\n\n const groupScales = this.groupScales;\n for (let index = 0, length = groupScales.length; index < length; index++) {\n const groupScale = groupScales[index];\n const field = groupScale.field;\n id = `${id}-${originData[field]}`;\n }\n\n // 用户在进行 dodge 类型的 adjust 调整的时候设置了 dodgeBy 属性\n const dodgeAdjust = this.getAdjust('dodge');\n if (dodgeAdjust) {\n const dodgeBy = dodgeAdjust.dodgeBy;\n if (dodgeBy) {\n id = `${id}-${originData[dodgeBy]}`;\n }\n }\n\n if (this.getAdjust('jitter')) {\n id = `${id}-${data.x}-${data.y}`;\n }\n\n return id;\n }\n\n /**\n * 获取所有需要创建 scale 的字段名称。\n */\n public getScaleFields(): string[] {\n const fields = [];\n const tmpMap = {};\n const { attributeOption, labelOption, tooltipOption } = this;\n // 获取图形属性上的 fields\n for (const attributeType in attributeOption) {\n if (attributeOption.hasOwnProperty(attributeType)) {\n const eachOpt = attributeOption[attributeType];\n if (eachOpt.fields) {\n uniq(eachOpt.fields, fields, tmpMap);\n } else if (eachOpt.values) {\n // 考虑 size(10), shape('circle') 等场景\n uniq(eachOpt.values, fields, tmpMap);\n }\n }\n }\n // 获取 label 上的字段\n if (labelOption && labelOption.fields) {\n uniq(labelOption.fields, fields, tmpMap);\n }\n\n // 获取 tooltip 上的字段\n if (isObject(tooltipOption) && tooltipOption.fields) {\n uniq(tooltipOption.fields, fields, tmpMap);\n }\n\n return fields;\n }\n\n /**\n * 显示或者隐藏 geometry。\n * @param visible\n */\n public changeVisible(visible: boolean) {\n super.changeVisible(visible);\n const elements = this.elements;\n for (let index = 0, length = elements.length; index < length; index++) {\n const element = elements[index];\n element.changeVisible(visible);\n }\n if (visible) {\n if (this.container) {\n this.container.show();\n }\n if (this.labelsContainer) {\n this.labelsContainer.show();\n }\n } else {\n if (this.container) {\n this.container.hide();\n }\n if (this.labelsContainer) {\n this.labelsContainer.hide();\n }\n }\n }\n\n /**\n * 获取当前配置中的所有分组 & 分类的字段。\n * @return fields string[]\n */\n public getGroupFields(): string[] {\n const groupFields = [];\n const tmpMap = {}; // 用于去重过滤\n for (let index = 0, length = GROUP_ATTRS.length; index < length; index++) {\n const attributeName = GROUP_ATTRS[index];\n const cfg = this.attributeOption[attributeName];\n if (cfg && cfg.fields) {\n uniq(cfg.fields, groupFields, tmpMap);\n }\n }\n\n return groupFields;\n }\n\n /**\n * 获得图形的 x y 字段。\n */\n public getXYFields() {\n const [x, y] = this.attributeOption.position.fields;\n return [x, y];\n }\n\n /**\n * 获取该 Geometry 下所有生成的 shapes。\n * @returns shapes\n */\n public getShapes(): Array<IShape | IGroup> {\n return this.elements.map((element: Element) => element.shape);\n }\n\n /**\n * 获取虚拟 Group。\n * @returns\n */\n public getOffscreenGroup() {\n if (!this.offscreenGroup) {\n const GroupCtor = this.container.getGroupBase(); // 获取分组的构造函数\n this.offscreenGroup = new GroupCtor({});\n }\n return this.offscreenGroup;\n }\n\n // 对数据进行排序\n public sort(mappingArray: Data[]) {\n if (!this.hasSorted) {\n // 未发生过排序\n const xScale = this.getXScale();\n const xField = xScale.field;\n for (let index = 0; index < mappingArray.length; index++) {\n const itemArr = mappingArray[index];\n itemArr.sort((obj1: Datum, obj2: Datum) => {\n return xScale.translate(obj1[FIELD_ORIGIN][xField]) - xScale.translate(obj2[FIELD_ORIGIN][xField]);\n });\n };\n }\n\n this.hasSorted = true;\n }\n\n /**\n * 调整度量范围。主要针对发生层叠以及一些特殊需求的 Geometry比如 Interval 下的柱状图 Y 轴默认从 0 开始。\n */\n protected adjustScale() {\n const yScale = this.getYScale();\n // 如果数据发生过 stack adjust需要调整下 yScale 的数据范围\n if (yScale && this.getAdjust('stack')) {\n this.updateStackRange(yScale, this.beforeMappingData);\n }\n }\n\n /**\n * 获取当前 Geometry 对应的 Shape 工厂实例。\n */\n protected getShapeFactory() {\n const shapeType = this.shapeType;\n if (!getShapeFactory(shapeType)) {\n return;\n }\n if (!this.shapeFactory) {\n this.shapeFactory = clone(getShapeFactory(shapeType)); // 防止多个 view 共享一个 shapeFactory 实例,导致 coordinate 被篡改\n }\n // 因为这里缓存了 shapeFactory但是外部可能会变更 coordinate导致无法重新设置到 shapeFactory 中\n this.shapeFactory.coordinate = this.coordinate;\n // theme 原因同上\n this.shapeFactory.theme = this.theme.geometries[shapeType] || {};\n\n return this.shapeFactory;\n }\n\n /**\n * 获取每个 Shape 对应的关键点数据。\n * @param obj 经过分组 -> 数字化 -> adjust 调整后的数据记录\n * @returns\n */\n protected createShapePointsCfg(obj: Datum): ShapePoint {\n const xScale = this.getXScale();\n const yScale = this.getYScale();\n const x = this.normalizeValues(obj[xScale.field], xScale);\n let y; // 存在没有 y 的情况\n\n if (yScale) {\n y = this.normalizeValues(obj[yScale.field], yScale);\n } else {\n y = obj.y ? obj.y : 0.1;\n }\n\n return {\n x,\n y,\n y0: yScale ? yScale.scale(this.getYMinValue()) : undefined,\n };\n }\n\n /**\n * 创建 Element 实例。\n * @param mappingDatum Element 对应的绘制数据\n * @param [isUpdate] 是否处于更新阶段\n * @returns element 返回创建的 Element 实例\n */\n protected createElement(mappingDatum: MappingDatum, isUpdate: boolean = false): Element {\n const { container } = this;\n\n const shapeCfg = this.getDrawCfg(mappingDatum); // 获取绘制图形的配置信息\n const shapeFactory = this.getShapeFactory();\n\n const element = new Element({\n shapeFactory,\n container,\n offscreenGroup: this.getOffscreenGroup(),\n });\n element.animate = this.animateOption;\n element.geometry = this;\n element.draw(shapeCfg, isUpdate); // 绘制\n\n return element;\n }\n\n /**\n * 获取每条数据对应的图形绘制数据。\n * @param mappingDatum 映射后的数据\n * @returns draw cfg\n */\n protected getDrawCfg(mappingDatum: MappingDatum): ShapeInfo {\n const originData = mappingDatum[FIELD_ORIGIN]; // 原始数据\n const cfg: ShapeInfo = {\n mappingData: mappingDatum, // 映射后的数据\n data: originData, // 原始数据\n x: mappingDatum.x,\n y: mappingDatum.y,\n color: mappingDatum.color,\n size: mappingDatum.size,\n isInCircle: this.coordinate.isPolar,\n };\n\n let shapeName = mappingDatum.shape;\n if (!shapeName && this.getShapeFactory()) {\n shapeName = this.getShapeFactory().defaultShapeType;\n }\n cfg.shape = shapeName;\n // 获取默认样式\n const theme = this.theme.geometries[this.shapeType];\n cfg.defaultStyle = get(theme, [ shapeName, 'default' ], {}).style;\n\n const styleOption = this.styleOption;\n if (styleOption) {\n cfg.style = this.getStyleCfg(styleOption, originData);\n }\n if (this.generatePoints) {\n cfg.points = mappingDatum.points;\n cfg.nextPoints = mappingDatum.nextPoints;\n }\n\n return cfg;\n }\n\n /**\n * 创建所有的 Elements。\n * @param mappingData\n * @param [isUpdate]\n * @returns elements\n */\n protected createElements(mappingData: MappingDatum[], index: number, isUpdate: boolean = false): Element[] {\n const { lastElementsMap, elementsMap, elements } = this;\n for (let subIndex = 0, length = mappingData.length; subIndex < length; subIndex++) {\n const mappingDatum = mappingData[subIndex];\n let id = this.getElementId(mappingDatum);\n if (elementsMap[id]) {\n // 存在重复数据,则根据再根据 index 进行区分\n id = `${id}-${index}-${subIndex}`;\n }\n\n let result = lastElementsMap[id];\n if (!result) {\n // 创建新的 element\n result = this.createElement(mappingDatum, isUpdate);\n } else {\n // element 已经创建\n const currentShapeCfg = this.getDrawCfg(mappingDatum);\n const preShapeCfg = result.getModel();\n if (this.isCoordinateChanged || isModelChange(currentShapeCfg, preShapeCfg)) {\n result.animate = this.animateOption;\n // 通过绘制数据的变更来判断是否需要更新,因为用户有可能会修改图形属性映射\n result.update(currentShapeCfg); // 更新对应的 element\n }\n\n delete lastElementsMap[id];\n }\n\n elements.push(result);\n elementsMap[id] = result;\n }\n\n return elements;\n }\n\n /**\n * 获取渲染的 label 类型。\n */\n protected getLabelType(): string {\n const { labelOption, coordinate, type } = this;\n const coordinateType = coordinate.type;\n let labelType = get(labelOption, ['cfg', 'type']);\n if (!labelType) {\n // 用户未定义,则进行默认的逻辑\n if (coordinateType === 'polar') {\n // 极坐标下使用通用的极坐标文本\n labelType = 'polar';\n } else if (coordinateType === 'theta') {\n // theta 坐标系下使用饼图文本\n labelType = 'pie';\n } else if (type === 'interval' || type === 'polygon') {\n labelType = 'interval';\n } else {\n labelType = 'base';\n }\n }\n\n return labelType;\n }\n\n /**\n * 获取 Y 轴上的最小值。\n */\n protected getYMinValue(): number {\n const yScale = this.getYScale();\n const { min, max } = yScale;\n let value: number;\n\n if (min >= 0) {\n value = min;\n } else if (max <= 0) {\n // 当值全位于负区间时,需要保证 ymin 在区域内,不可为 0\n value = max;\n } else {\n value = 0;\n }\n return value;\n }\n\n // 创建图形属性相关的配置项\n private createAttrOption(attrName: string, field: AttributeOption | string | number, cfg?) {\n if (isNil(field) || isObject(field)) {\n if (isObject(field) && isEqual(Object.keys(field), ['values'])) {\n // shape({ values: [ 'funnel' ] })\n set(this.attributeOption, attrName, {\n fields: field.values,\n });\n } else {\n set(this.attributeOption, attrName, field);\n }\n } else {\n const attrCfg: AttributeOption = {};\n if (isNumber(field)) {\n // size(3)\n attrCfg.values = [field];\n } else {\n attrCfg.fields = parseFields(field);\n }\n\n if (cfg) {\n if (isFunction(cfg)) {\n attrCfg.callback = cfg;\n } else {\n attrCfg.values = cfg;\n }\n }\n\n set(this.attributeOption, attrName, attrCfg);\n }\n }\n\n private initAttributes() {\n const { attributes, attributeOption, theme, shapeType } = this;\n this.groupScales = [];\n const tmpMap = {};\n\n // 遍历每一个 attrOption各自创建 Attribute 实例\n for (const attrType in attributeOption) {\n if (attributeOption.hasOwnProperty(attrType)) {\n const option: AttributeOption = attributeOption[attrType];\n if (!option) {\n return;\n }\n const attrCfg: AttributeInstanceCfg = {\n ...option,\n };\n const { callback, values, fields = [] } = attrCfg;\n\n // 获取每一个字段对应的 scale\n const scales = fields.map((field) => {\n const scale = this.scales[field];\n if (scale.isCategory && !tmpMap[field] && GROUP_ATTRS.includes(attrType)) {\n this.groupScales.push(scale);\n tmpMap[field] = true;\n }\n return scale;\n });\n\n attrCfg.scales = scales;\n\n if (attrType !== 'position' && scales.length === 1 && scales[0].type === 'identity') {\n // 用户在图形通道上声明了常量字段 color('red'), size(5)\n attrCfg.values = scales[0].values;\n } else if (!callback && !values) {\n // 用户没有指定任何规则,则使用默认的映射规则\n if (attrType === 'size') {\n attrCfg.values = theme.sizes;\n } else if (attrType === 'shape') {\n attrCfg.values = theme.shapes[shapeType] || [];\n } else if (attrType === 'color') {\n if (scales.length) {\n // 根据数值个数使用对应的色板\n attrCfg.values = scales[0].values.length <= 10 ? theme.colors10 : theme.colors20;\n } else {\n attrCfg.values = theme.colors10;\n }\n }\n }\n const AttributeCtor = getAttributeClass(attrType);\n attributes[attrType] = new AttributeCtor(attrCfg);\n }\n }\n }\n\n // 处理数据:分组 -> 数字化 -> adjust 调整\n private processData(data: Data) {\n this.hasSorted = false;\n const { scales } = this.getAttribute('position');\n const categoryScales = scales.filter((scale: Scale) => scale.isCategory);\n\n const groupedArray = this.groupData(data); // 数据分组\n const beforeAdjust = [];\n for(let i = 0, len = groupedArray.length; i < len; i++) {\n const subData = groupedArray[i];\n const arr = [];\n for(let j = 0, subLen = subData.length; j < subLen; j++) {\n const originData = subData[j];\n const item = {};\n // tslint:disable-next-line: forin\n for (const k in originData) {\n item[k] = originData[k];\n }\n item[FIELD_ORIGIN] = originData;\n\n // 将分类数据翻译成数据, 仅对位置相关的度量进行数字化处理\n for (const scale of categoryScales) {\n const field = scale.field;\n item[field] = scale.translate(item[field]);\n }\n arr.push(item);\n }\n beforeAdjust.push(arr);\n }\n\n const dataArray = this.adjustData(beforeAdjust); // 进行 adjust 数据调整\n this.beforeMappingData = dataArray;\n\n return dataArray;\n }\n\n // 调整数据\n private adjustData(dataArray: Data[]): Data[] {\n const adjustOption = this.adjustOption;\n let result = dataArray;\n if (adjustOption) {\n const xScale = this.getXScale();\n const yScale = this.getYScale();\n const xField = xScale.field;\n const yField = yScale ? yScale.field : null;\n for (let i = 0, len = adjustOption.length; i < len; i++) {\n const adjust = adjustOption[i];\n const adjustCfg: AdjustInstanceCfg = {\n xField,\n yField,\n ...adjust,\n };\n const type = adjust.type;\n if (type === 'dodge') {\n const adjustNames = [];\n if (xScale.isCategory || xScale.type === 'identity') {\n adjustNames.push('x');\n } else if (!yScale) {\n adjustNames.push('y');\n } else {\n throw new Error('dodge is not support linear attribute, please use category attribute!');\n }\n adjustCfg.adjustNames = adjustNames;\n // 每个分组内每条柱子的宽度占比,用户不可指定,用户需要通过 columnWidthRatio 指定\n adjustCfg.dodgeRatio = this.theme.columnWidthRatio;\n } else if (type === 'stack') {\n const coordinate = this.coordinate;\n if (!yScale) {\n // 一维的情况下获取高度和默认size\n adjustCfg.height = coordinate.getHeight();\n const size = this.getDefaultValue('size') || 3;\n adjustCfg.size = size;\n }\n // 不进行 transpose 时,用户又没有设置这个参数时,默认从上向下\n if (!coordinate.isTransposed && isNil(adjustCfg.reverseOrder)) {\n adjustCfg.reverseOrder = true;\n }\n }\n const adjustCtor = getAdjustClass(type);\n const adjustInstance = new adjustCtor(adjustCfg);\n\n result = adjustInstance.process(result);\n\n this.adjusts[type] = adjustInstance;\n }\n }\n\n return result;\n }\n\n // 对数据进行分组\n private groupData(data: Data): Data[] {\n const groupScales = this.getGroupScales();\n const scaleDefs = this.scaleDefs;\n const appendConditions = {};\n const groupFields = [];\n for (let index = 0; index < groupScales.length; index++) {\n const scale = groupScales[index];\n const field = scale.field;\n groupFields.push(field);\n if (get(scaleDefs, [field, 'values'])) {\n // 用户通过 view.scale() 接口指定了 values 属性\n appendConditions[field] = scaleDefs[field].values;\n }\n }\n\n return group(data, groupFields, appendConditions);\n }\n\n // 更新发生层叠后的数据对应的度量范围\n private updateStackRange(scale: Scale, dataArray: Data[]) {\n const mergeArray = flatten(dataArray);\n const field = scale.field;\n let min = scale.min;\n let max = scale.max;\n for (let index = 0; index < mergeArray.length; index++) {\n const obj = mergeArray[index];\n const tmpMin = Math.min.apply(null, obj[field]);\n const tmpMax = Math.max.apply(null, obj[field]);\n if (tmpMin < min) {\n min = tmpMin;\n }\n if (tmpMax > max) {\n max = tmpMax;\n }\n }\n const scaleDefs = this.scaleDefs;\n const cfg: LooseObject = {};\n if ((min < scale.min) && !get(scaleDefs, [field, 'min'])) {\n // 用户如果在列定义中定义了 min则以用户定义的为准\n cfg.min = min;\n }\n if ((max > scale.max) && !get(scaleDefs, [field, 'max'])) {\n // 用户如果在列定义中定义了 max\n cfg.max = max;\n }\n\n scale.change(cfg);\n }\n\n // 将数据映射至图形空间前的操作:排序以及关键点的生成\n private beforeMapping(beforeMappingData: Data[]) {\n // 当初加 clone 是因为 points 的引用关系,导致更新失败,可是现在貌似复现不出来了,所以暂时不进行 clone\n // const source = clone(beforeMappingData);\n const source = beforeMappingData;\n if (this.sortable) {\n this.sort(source);\n }\n if (this.generatePoints) {\n // 需要生成关键点\n for (let index = 0, length = source.length; index < length; index++) {\n const currentData = source[index];\n this.generateShapePoints(currentData);\n const nextData = source[index + 1];\n if (nextData) {\n this.generateShapePoints(nextData);\n currentData[0].nextPoints = nextData[0].points;\n }\n }\n }\n\n return source;\n }\n\n // 生成 shape 的关键点\n private generateShapePoints(data: Data) {\n const shapeFactory = this.getShapeFactory();\n const shapeAttr = this.getAttribute('shape');\n for (let index = 0; index < data.length; index++) {\n const obj = data[index];\n const cfg = this.createShapePointsCfg(obj);\n const shape = shapeAttr ? this.getAttributeValues(shapeAttr, obj) : null;\n const points = shapeFactory.getShapePoints(shape, cfg);\n obj.points = points;\n }\n }\n\n // 将数据归一化\n private normalizeValues(values, scale) {\n let rst = [];\n if (isArray(values)) {\n for (let index = 0; index < values.length; index++) {\n const value = values[index];\n rst.push(scale.scale(value));\n }\n } else {\n rst = scale.scale(values);\n }\n return rst;\n }\n\n // 将数据映射至图形空间\n private mapping(data: Data): MappingDatum[] {\n const attributes = this.attributes;\n const mappingData = [];\n for (let index = 0; index < data.length; index++) {\n const record = data[index];\n const newRecord: MappingDatum = {\n _origin: record[FIELD_ORIGIN],\n points: record.points,\n nextPoints: record.nextPoints,\n };\n for (const k in attributes) {\n if (attributes.hasOwnProperty(k)) {\n const attr = attributes[k];\n const names = attr.names;\n const values = this.getAttributeValues(attr, record);\n if (names.length > 1) {\n // position 之类的生成多个字段的属性\n for (let j = 0; j < values.length; j += 1) {\n const val = values[j];\n const name = names[j];\n newRecord[name] = isArray(val) && val.length === 1 ? val[0] : val; // 只有一个值时返回第一个属性值\n }\n } else {\n // values.length === 1 的判断是以下情况,获取用户设置的图形属性值\n // shape('a', ['dot', 'dash']), color('a', ['red', 'yellow'])\n newRecord[names[0]] = values.length === 1 ? values[0] : values;\n }\n }\n }\n\n this.convertPoint(newRecord); // 将 x、y 转换成画布坐标\n mappingData.push(newRecord);\n }\n\n return mappingData;\n }\n\n // 将归一化的坐标值转换成画布坐标\n private convertPoint(mappingRecord: MappingDatum) {\n const { x, y } = mappingRecord;\n\n let rstX;\n let rstY;\n let obj;\n const coordinate = this.coordinate;\n if (isArray(x) && isArray(y)) {\n rstX = [];\n rstY = [];\n for (let i = 0, j = 0, xLen = x.length, yLen = y.length; i < xLen && j < yLen; i += 1, j += 1) {\n obj = coordinate.convert({\n x: x[i],\n y: y[j],\n });\n rstX.push(obj.x);\n rstY.push(obj.y);\n }\n } else if (isArray(y)) {\n rstY = [];\n for (let index = 0; index < y.length; index++) {\n const yVal = y[index];\n obj = coordinate.convert({\n x: x as number,\n y: yVal,\n });\n if (rstX && rstX !== obj.x) {\n if (!isArray(rstX)) {\n rstX = [rstX];\n }\n rstX.push(obj.x);\n } else {\n rstX = obj.x;\n }\n rstY.push(obj.y);\n }\n } else if (isArray(x)) {\n rstX = [];\n for (let index = 0; index < x.length; index++) {\n const xVal = x[index];\n obj = coordinate.convert({\n x: xVal,\n y,\n });\n if (rstY && rstY !== obj.y) {\n if (!isArray(rstY)) {\n rstY = [rstY];\n }\n rstY.push(obj.y);\n } else {\n rstY = obj.y;\n }\n rstX.push(obj.x);\n }\n } else {\n const point = coordinate.convert({\n x,\n y,\n });\n rstX = point.x;\n rstY = point.y;\n }\n mappingRecord.x = rstX;\n mappingRecord.y = rstY;\n }\n\n // 获取 style 配置\n private getStyleCfg(styleOption: StyleOption, originData: Datum) {\n const { fields = [], callback, cfg } = styleOption;\n if (cfg) {\n // 用户直接配置样式属性\n return cfg;\n }\n\n const params = fields.map((field) => {\n return originData[field];\n });\n\n return callback(...params);\n }\n\n private setCfg(cfg: InitCfg) {\n const { coordinate, data, theme, scaleDefs } = cfg;\n if (coordinate) {\n this.coordinate = coordinate;\n }\n if (data) {\n this.data = data;\n }\n if (scaleDefs) {\n this.scaleDefs = scaleDefs;\n this.idFields = [];\n each(scaleDefs, (scaleDef, field) => {\n if (scaleDef && scaleDef.key) {\n this.idFields.push(field);\n }\n });\n }\n if (theme) {\n this.theme = this.userTheme ? deepMix({}, theme, this.userTheme) : theme; // 支持 geometry 层级的主题设置\n }\n }\n\n private renderLabels(mappingArray: MappingDatum[], isUpdate: boolean = false) {\n let geometryLabel = this.geometryLabel;\n\n if (!geometryLabel) {\n // 初次创建\n const labelType = this.getLabelType();\n const GeometryLabelsCtor = getGeometryLabel(labelType);\n geometryLabel = new GeometryLabelsCtor(this);\n this.geometryLabel = geometryLabel;\n }\n geometryLabel.render(mappingArray, isUpdate);\n\n // 将 label 同 element 进行关联\n const labelsMap = geometryLabel.labelsRenderer.shapesMap;\n each(this.elementsMap, (element: Element, id) => {\n const labels = filterLabelsById(id, labelsMap); // element 实例同 label 进行绑定\n if (labels.length) {\n element.labelShape = labels;\n for (let i = 0; i < labels.length; i++) {\n const label = labels[i];\n const labelChildren = label.getChildren();\n for (let j = 0; j < labelChildren.length; j++) {\n const child = labelChildren[j];\n child.cfg.name = [ 'element', 'label'];\n child.cfg.element = element;\n }\n }\n }\n });\n }\n /**\n * 是否需要进行群组入场动画\n * 规则:\n * 1. 如果发生更新,则不进行\n * 2. 如果用户关闭 geometry 动画,则不进行\n * 3. 如果用户关闭了 appear 动画,则不进行\n * 4. 如果用户配置了 appear.animation则不进行\n */\n private canDoGroupAnimation(isUpdate: boolean) {\n return (\n !isUpdate &&\n this.animateOption &&\n (get(this.animateOption, 'appear') === undefined ||\n (get(this.animateOption, 'appear') && get(this.animateOption, ['appear', 'animation']) === undefined))\n );\n }\n}\n"]}