1 line
88 KiB
Plaintext
1 line
88 KiB
Plaintext
{"version":3,"file":"view.js","sourceRoot":"","sources":["../../src/chart/view.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n clone,\n deepMix,\n each,\n filter,\n find,\n flatten,\n get,\n isBoolean,\n isFunction,\n isNil,\n isObject,\n isString,\n isUndefined,\n mix,\n remove,\n set,\n size,\n uniqueId,\n isEqual,\n} from '@antv/util';\nimport { Attribute, Coordinate, Event as GEvent, GroupComponent, ICanvas, IGroup, IShape, Scale } from '../dependents';\nimport {\n AxisOption,\n ComponentOption,\n CoordinateCfg,\n CoordinateOption,\n Data,\n Datum,\n FacetCfgMap,\n FilterCondition,\n GeometryOption,\n LegendOption,\n LooseObject,\n Options,\n Point,\n Region,\n ScaleOption,\n TooltipOption,\n ViewCfg,\n ViewPadding,\n} from '../interface';\n\nimport { GROUP_Z_INDEX, LAYER, PLOT_EVENTS, VIEW_LIFE_CIRCLE } from '../constant';\n\nimport Base from '../base';\nimport { Facet, getFacet } from '../facet';\nimport Geometry from '../geometry/base';\nimport { createInteraction, Interaction } from '../interaction';\nimport { getTheme } from '../theme';\nimport { BBox } from '../util/bbox';\nimport { getCoordinateClipCfg, isFullCircle, isPointInCoordinate } from '../util/coordinate';\nimport { uniq } from '../util/helper';\nimport { findDataByPoint } from '../util/tooltip';\nimport Chart from './chart';\nimport { getComponentController, getComponentControllerNames } from './controller';\nimport Annotation from './controller/annotation';\nimport { Controller } from './controller/base';\nimport CoordinateController from './controller/coordinate';\nimport TooltipComponent from './controller/tooltip';\nimport Event from './event';\nimport defaultLayout, { Layout } from './layout';\nimport { ScalePool } from './util/scale-pool';\n\n/**\n * G2 视图 View 类\n */\nexport class View extends Base {\n /** view id,全局唯一。 */\n public id: string = uniqueId('view');\n /** 父级 view,如果没有父级,则为空。 */\n public parent: View;\n /** 所有的子 view。 */\n public views: View[] = [];\n /** 所有的 geometry 实例。 */\n public geometries: Geometry[] = [];\n /** 所有的组件 controllers。 */\n public controllers: Controller[] = [];\n /** 所有的 Interaction 实例。 */\n public interactions: Record<string, Interaction> = {};\n\n /** view 区域空间。 */\n public viewBBox: BBox;\n /** 坐标系的位置大小,ViewBBox - padding = coordinateBBox。 */\n public coordinateBBox: BBox;\n /** view 的 padding 大小,传入的配置(不是解析之后的值)。 */\n public padding: ViewPadding;\n /** G.Canvas 实例。 */\n public canvas: ICanvas;\n /** 存储自动计算的 padding 值 */\n public autoPadding: number[];\n\n /** 三层 Group 图形中的背景层。 */\n public backgroundGroup: IGroup;\n /** 三层 Group 图形中的中间层。 */\n public middleGroup: IGroup;\n /** 三层 Group 图形中的前景层。 */\n public foregroundGroup: IGroup;\n /** 是否对超出坐标系范围的 Geometry 进行剪切 */\n public limitInPlot: boolean = false;\n\n /**\n * 标记 view 的大小位置范围,均是 0 ~ 1 范围,便于开发者使用,起始点为左上角。\n */\n protected region: Region;\n /** 主题配置,存储当前主题配置。 */\n protected themeObject: LooseObject;\n\n // 配置信息存储\n protected options: Options = {\n data: [],\n animate: true, // 默认开启动画\n }; // 初始化为空\n\n /** 过滤之后的数据 */\n protected filteredData: Data;\n\n /** 配置开启的组件插件,默认为全局配置的组件。 */\n private usedControllers: string[] = getComponentControllerNames();\n\n /** 所有的 scales */\n private scalePool: ScalePool = new ScalePool();\n\n /** 布局函数 */\n protected layoutFunc: Layout = defaultLayout;\n /** 生成的坐标系实例,{@link https://github.com/antvis/coord/blob/master/src/coord/base.ts|Coordinate} */\n protected coordinateInstance: Coordinate;\n /** Coordinate 相关的控制器类,负责坐标系实例的创建、更新、变换等 */\n protected coordinateController: CoordinateController;\n /** 分面类实例 */\n protected facetInstance: Facet;\n\n /** 当前鼠标是否在 plot 内(CoordinateBBox) */\n private isPreMouseInPlot: boolean = false;\n /** 默认标识位,用于判定数据是否更新 */\n private isDataChanged: boolean = false;\n /** 用于判断坐标系范围是否发生变化的标志位 */\n private isCoordinateChanged: boolean = false;\n /** 从当前这个 view 创建的 scale key */\n private createdScaleKeys = new Map<string, boolean>();\n\n constructor(props: ViewCfg) {\n super({ visible: props.visible });\n\n const {\n parent,\n canvas,\n backgroundGroup,\n middleGroup,\n foregroundGroup,\n region = { start: { x: 0, y: 0 }, end: { x: 1, y: 1 } },\n padding,\n theme,\n options,\n limitInPlot,\n } = props;\n\n this.parent = parent;\n this.canvas = canvas;\n this.backgroundGroup = backgroundGroup;\n this.middleGroup = middleGroup;\n this.foregroundGroup = foregroundGroup;\n this.region = region;\n this.padding = padding;\n // 接受父 view 传入的参数\n this.options = { ...this.options, ...options };\n this.limitInPlot = limitInPlot;\n\n // 初始化 theme\n this.themeObject = isObject(theme) ? deepMix({}, getTheme('default'), theme) : getTheme(theme);\n this.init();\n }\n\n /**\n * 设置 layout 布局函数\n * @param layout 布局函数\n * @returns void\n */\n public setLayout(layout: Layout) {\n this.layoutFunc = layout;\n }\n\n /**\n * 生命周期:初始化\n * @returns voids\n */\n public init() {\n // 计算画布的 viewBBox\n this.calculateViewBBox();\n\n // 事件委托机制\n this.initEvents();\n\n // 初始化组件 controller\n this.initComponentController();\n\n // 创建 coordinate controller\n this.coordinateController = new CoordinateController(this.options.coordinate);\n\n this.initOptions();\n\n // 递归初始化子 view\n const views = this.views;\n for (let i = 0; i < views.length; i++) {\n views[i].init();\n }\n }\n\n /**\n * 生命周期:渲染流程,渲染过程需要处理数据更新的情况。\n * render 函数仅仅会处理 view 和子 view。\n * @param isUpdate 是否触发更新流程。\n */\n public render(isUpdate: boolean = false) {\n this.emit(VIEW_LIFE_CIRCLE.BEFORE_RENDER);\n // 递归渲染\n this.paint(isUpdate);\n\n this.emit(VIEW_LIFE_CIRCLE.AFTER_RENDER);\n\n if (this.visible === false) {\n // 用户在初始化的时候声明 visible: false\n this.changeVisible(false);\n }\n }\n\n /**\n * 生命周期:清空图表上所有的绘制内容,但是不销毁图表,chart 仍可使用。\n * @returns void\n */\n public clear() {\n this.emit(VIEW_LIFE_CIRCLE.BEFORE_CLEAR);\n // 1. 清空缓存和计算数据\n this.filteredData = [];\n this.coordinateInstance = undefined;\n this.isDataChanged = false; // 复位\n this.isCoordinateChanged = false; // 复位\n\n // 2. 清空 geometries\n const geometries = this.geometries;\n for (let i = 0; i < geometries.length; i++) {\n geometries[i].clear();\n }\n this.geometries = [];\n\n // 3. 清空 controllers\n const controllers = this.controllers;\n for (let i = 0; i < controllers.length; i++) {\n controllers[i].clear();\n }\n\n // 4. 删除 scale 缓存\n this.createdScaleKeys.forEach((v: boolean, k: string) => {\n this.getRootView().scalePool.deleteScale(k);\n });\n this.createdScaleKeys.clear();\n\n // 递归处理子 view\n const views = this.views;\n for (let i = 0; i < views.length; i++) {\n views[i].clear();\n }\n\n this.emit(VIEW_LIFE_CIRCLE.AFTER_CLEAR);\n }\n\n /**\n * 生命周期:销毁,完全无法使用。\n * @returns void\n */\n public destroy() {\n // 销毁前事件,销毁之后已经没有意义了,所以不抛出事件\n this.emit(VIEW_LIFE_CIRCLE.BEFORE_DESTROY);\n const interactions = this.interactions;\n // 销毁 interactions\n each(interactions, (interaction) => {\n if (interaction) {\n // 有可能已经销毁,设置了 undefined\n interaction.destroy();\n }\n });\n\n this.clear();\n\n // 销毁 controller 中的组件\n const controllers = this.controllers;\n for (let i = 0, len = controllers.length; i < len; i++) {\n const controller = controllers[i];\n controller.destroy();\n }\n\n this.backgroundGroup.remove(true);\n this.middleGroup.remove(true);\n this.foregroundGroup.remove(true);\n\n super.destroy();\n }\n /* end 生命周期函数 */\n\n /**\n * 显示或者隐藏整个 view。\n * @param visible 是否可见\n * @returns View\n */\n public changeVisible(visible: boolean): View {\n super.changeVisible(visible);\n\n const geometries = this.geometries;\n for (let i = 0, len = geometries.length; i < len; i++) {\n const geometry = geometries[i];\n geometry.changeVisible(visible);\n }\n\n const controllers = this.controllers;\n for (let i = 0, len = controllers.length; i < len; i++) {\n const controller = controllers[i];\n controller.changeVisible(visible);\n }\n\n this.foregroundGroup.set('visible', visible);\n this.middleGroup.set('visible', visible);\n this.backgroundGroup.set('visible', visible);\n\n // group.set('visible', visible) 不会触发自动刷新\n this.getCanvas().draw();\n\n return this;\n }\n\n /**\n * 装载数据源。\n *\n * ```ts\n * view.data([{ city: '杭州', sale: 100 }, { city: '上海', sale: 110 } ]);\n * ```\n *\n * @param data 数据源,json 数组。\n * @returns View\n */\n public data(data: Data): View {\n set(this.options, 'data', data);\n this.isDataChanged = true;\n return this;\n }\n\n /**\n * @deprecated\n * This method will be removed at G2 V4.1. Replaced by {@link #data(data)}\n */\n public source(data: Data): View {\n console.warn('This method will be removed at G2 V4.1. Please use chart.data() instead.');\n return this.data(data);\n }\n\n /**\n * 设置数据筛选规则。\n *\n * ```ts\n * view.filter('city', (value: any, datum: Datum) => value !== '杭州');\n *\n * // 删除 'city' 字段对应的筛选规则。\n * view.filter('city', null);\n * ```\n *\n * @param field 数据字段\n * @param condition 筛选规则\n * @returns View\n */\n public filter(field: string, condition: FilterCondition | null): View {\n if (isFunction(condition)) {\n set(this.options, ['filters', field], condition);\n return this;\n }\n // condition 为空,则表示删除过滤条件\n if (!condition && get(this.options, ['filters', field])) {\n delete this.options.filters[field];\n }\n\n return this;\n }\n\n /**\n * 开启或者关闭坐标轴。\n *\n * ```ts\n * view.axis(false); // 不展示坐标轴\n * ```\n * @param field 坐标轴开关\n */\n public axis(field: boolean): View;\n /**\n * 对特定的某条坐标轴进行配置。\n *\n * @example\n * ```ts\n * view.axis('city', false); // 不展示 'city' 字段对应的坐标轴\n *\n * // 将 'city' 字段对应的坐标轴的标题隐藏\n * view.axis('city', {\n * title: null,\n * });\n * ```\n *\n * @param field 要配置的坐标轴对应的字段名称\n * @param axisOption 坐标轴具体配置,更详细的配置项可以参考:https://github.com/antvis/component#axis\n */\n public axis(field: string, axisOption: AxisOption): View;\n public axis(field: string | boolean, axisOption?: AxisOption): View {\n if (isBoolean(field)) {\n set(this.options, ['axes'], field);\n } else {\n set(this.options, ['axes', field], axisOption);\n }\n\n return this;\n }\n\n /**\n * 对图例进行整体配置。\n *\n * ```ts\n * view.legend(false); // 关闭图例\n *\n * view.legend({\n * position: 'right',\n * }); // 图例进行整体配置\n * ```\n * @param field\n * @returns View\n */\n public legend(field: LegendOption): View;\n /**\n * 对特定的图例进行配置。\n *\n * @example\n * ```ts\n * view.legend('city', false); // 关闭某个图例,通过数据字段名进行关联\n *\n * // 对特定的图例进行配置\n * view.legend('city', {\n * position: 'right',\n * });\n * ```\n *\n * @param field 图例对应的数据字段名称\n * @param legendOption 图例配置,更详细的配置项可以参考:https://github.com/antvis/component#axis\n * @returns View\n */\n public legend(field: string, legendOption: LegendOption): View;\n public legend(field: string | LegendOption, legendOption?: LegendOption): View {\n if (isBoolean(field)) {\n set(this.options, ['legends'], field);\n } else if (isString(field)) {\n set(this.options, ['legends', field], legendOption);\n } else {\n // 设置全局的 legend 配置\n set(this.options, ['legends'], field);\n }\n\n return this;\n }\n\n /**\n * 批量设置 scale 配置。\n *\n * ```ts\n * view.scale({\n * sale: {\n * min: 0,\n * max: 100,\n * }\n * });\n * ```\n * Scale 的详细配置项可以参考:https://github.com/antvis/scale#api\n * @returns View\n */\n public scale(field: Record<string, ScaleOption>): View;\n /**\n * 为特性的数据字段进行 scale 配置。\n *\n * ```ts\n * view.scale('sale', {\n * min: 0,\n * max: 100,\n * });\n * ```\n *\n * @returns View\n */\n public scale(field: string, scaleOption: ScaleOption): View;\n public scale(field: string | Record<string, ScaleOption>, scaleOption?: ScaleOption): View {\n if (isString(field)) {\n set(this.options, ['scales', field], scaleOption);\n } else if (isObject(field)) {\n each(field, (v: ScaleOption, k: string) => {\n set(this.options, ['scales', k], v);\n });\n }\n\n return this;\n }\n\n /**\n * tooltip 提示信息配置。\n *\n * ```ts\n * view.tooltip(false); // 关闭 tooltip\n *\n * view.tooltip({\n * shared: true\n * });\n * ```\n *\n * @param cfg Tooltip 配置,更详细的配置项参考:https://github.com/antvis/component#tooltip\n * @returns View\n */\n public tooltip(cfg: boolean | TooltipOption): View {\n set(this.options, 'tooltip', cfg);\n\n return this;\n }\n\n /**\n * 辅助标记配置。\n *\n * ```ts\n * view.annotation().line({\n * start: ['min', 85],\n * end: ['max', 85],\n * style: {\n * stroke: '#595959',\n * lineWidth: 1,\n * lineDash: [3, 3],\n * },\n * });\n * ```\n * 更详细的配置项:https://github.com/antvis/component#annotation\n * @returns [[Annotation]]\n */\n public annotation(): Annotation {\n return this.getController('annotation') as Annotation;\n }\n\n /**\n * @deprecated\n * This method will be removed at G2 V4.1. Replaced by {@link #guide()}\n */\n public guide(): Annotation {\n console.warn('This method will be removed at G2 V4.1. Please use chart.annotation() instead.');\n return this.annotation();\n }\n\n /**\n * 坐标系配置。\n *\n * @example\n * ```ts\n * view.coordinate({\n * type: 'polar',\n * cfg: {\n * radius: 0.85,\n * },\n * actions: [\n * [ 'transpose' ],\n * ],\n * });\n * ```\n *\n * @param option\n * @returns\n */\n public coordinate(option?: CoordinateOption): CoordinateController;\n /**\n * 声明坐标系类型,并进行配置。\n *\n * ```ts\n * // 直角坐标系,并进行转置变换\n * view.coordinate('rect').transpose();\n *\n * // 默认创建直角坐标系\n * view.coordinate();\n * ```\n *\n * @param type 坐标系类型\n * @param [coordinateCfg] 坐标系配置\n * @returns\n */\n public coordinate(type: string, coordinateCfg?: CoordinateCfg): CoordinateController;\n public coordinate(type: string | CoordinateOption, coordinateCfg?: CoordinateCfg): CoordinateController {\n // 提供语法糖,使用更简单\n if (isString(type)) {\n set(this.options, 'coordinate', { type, cfg: coordinateCfg } as CoordinateOption);\n } else {\n set(this.options, 'coordinate', type);\n }\n\n // 更新 coordinate 配置\n this.coordinateController.update(this.options.coordinate);\n\n return this.coordinateController;\n }\n\n /**\n * @deprecated\n * This method will be removed at G2 V4.1. Replaced by {@link #coordinate()}\n */\n public coord(type: string | CoordinateOption, coordinateCfg?: CoordinateCfg): CoordinateController {\n console.warn('This method will be removed at G2 V4.1. Please use chart.coordinate() instead.');\n // @ts-ignore\n return this.coordinate(type, coordinateCfg);\n }\n\n /**\n * view 分面绘制。\n *\n * ```ts\n * view.facet('rect', {\n * rowField: 'province',\n * columnField: 'category',\n * eachView: (innerView: View, facet?: FacetData) => {\n * innerView.line().position('city*sale');\n * },\n * });\n * ```\n *\n * @param type 分面类型\n * @param cfg 分面配置, [[FacetCfgMap]]\n * @returns View\n */\n public facet<T extends keyof FacetCfgMap>(type: T, cfg: FacetCfgMap[T]): View {\n // 先销毁掉之前的分面\n if (this.facetInstance) {\n this.facetInstance.destroy();\n }\n\n // 创建新的分面\n const Ctor = getFacet(type);\n\n if (!Ctor) {\n throw new Error(`facet '${type}' is not exist!`);\n }\n\n this.facetInstance = new Ctor(this, { ...cfg, type });\n\n return this;\n }\n\n /*\n * 开启或者关闭动画。\n *\n * ```ts\n * view.animate(false);\n * ```\n *\n * @param status 动画状态,true 表示开始,false 表示关闭\n * @returns View\n */\n public animate(status: boolean): View {\n set(this.options, 'animate', status);\n return this;\n }\n\n /**\n * 更新配置项,用于配置项式声明。\n * @param options 配置项\n */\n public updateOptions(options: Options) {\n this.clear(); // 清空\n mix(this.options, options);\n\n this.initOptions();\n return this;\n }\n\n /**\n * 往 `view.options` 属性中存储配置项。\n * @param name 属性名称\n * @param opt 属性值\n * @returns view\n */\n public option(name: string, opt: any): View {\n // 对于内置的 option,避免覆盖。\n // name 在原型上,说明可能是内置 API,存在 option 被覆盖的风险,不处理\n if (View.prototype[name]) {\n throw new Error(`Can't use built in variable name \"${name}\", please change another one.`);\n }\n\n // 存入到 option 中\n set(this.options, name, opt);\n return this;\n }\n\n /**\n * 设置主题。\n *\n * ```ts\n * view.theme('dark'); // 'dark' 需要事先通过 `registerTheme()` 接口注册完成\n *\n * view.theme({ defaultColor: 'red' });\n * ```\n *\n * @param theme 主题名或者主题配置\n * @returns View\n */\n public theme(theme: string | LooseObject): View {\n this.themeObject = isObject(theme) ? deepMix({}, this.themeObject, theme) : getTheme(theme);\n\n return this;\n }\n\n /* end 一系列传入配置的 API */\n\n /**\n * Call the interaction based on the interaction name\n *\n * ```ts\n * view.interaction('my-interaction', { extra: 'hello world' });\n * ```\n * 详细文档可以参考:https://g2.antv.vision/zh/docs/manual/tutorial/interaction\n * @param name interaction name\n * @param cfg interaction config\n * @returns\n */\n public interaction(name: string, cfg?: LooseObject): View {\n const existInteraction = this.interactions[name];\n // 存在则先销毁已有的\n if (existInteraction) {\n existInteraction.destroy();\n }\n\n // 新建交互实例\n const interaction = createInteraction(name, this, cfg);\n if (interaction) {\n interaction.init();\n this.interactions[name] = interaction;\n }\n return this;\n }\n\n /**\n * 移除当前 View 的 interaction\n * ```ts\n * view.removeInteraction('my-interaction');\n * ```\n * @param name interaction name\n */\n public removeInteraction(name: string) {\n const existInteraction = this.interactions[name];\n // 存在则先销毁已有的\n if (existInteraction) {\n existInteraction.destroy();\n this.interactions[name] = undefined;\n }\n }\n\n /**\n * 修改数据,数据更新逻辑,数据更新仅仅影响当前这一层的 view\n *\n * ```ts\n * view.changeData([{ city: '北京', sale: '200' }]);\n * ```\n *\n * @param data\n * @returns void\n */\n public changeData(data: Data) {\n this.isDataChanged = true;\n this.emit(VIEW_LIFE_CIRCLE.BEFORE_CHANGE_DATA);\n // 1. 保存数据\n this.data(data);\n\n // 2. 渲染\n this.paint(true);\n\n // 3. 遍历子 view 进行 change data\n const views = this.views;\n for (let i = 0, len = views.length; i < len; i++) {\n const view = views[i];\n // FIXME 子 view 有自己的数据的情况,该如何处理?\n view.changeData(data);\n }\n\n this.emit(VIEW_LIFE_CIRCLE.AFTER_CHANGE_DATA);\n }\n\n /* View 管理相关的 API */\n\n /**\n * 创建子 view\n *\n * ```ts\n * const innerView = view.createView({\n * start: { x: 0, y: 0 },\n * end: { x: 0.5, y: 0.5 },\n * padding: 8,\n * });\n * ```\n *\n * @param cfg\n * @returns View\n */\n public createView(cfg?: Partial<ViewCfg>): View {\n // 子 view 共享 options 配置数据\n const sharedOptions = {\n data: this.options.data,\n scales: clone(this.options.scales),\n axes: clone(this.options.axes),\n coordinate: clone(this.coordinateController.getOption()),\n tooltip: clone(this.options.tooltip),\n legends: clone(this.options.legends),\n animate: this.options.animate,\n visible: this.visible,\n };\n\n const v = new View({\n parent: this,\n canvas: this.canvas,\n // 子 view 共用三层 group\n backgroundGroup: this.backgroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.BG }),\n middleGroup: this.middleGroup.addGroup({ zIndex: GROUP_Z_INDEX.MID }),\n foregroundGroup: this.foregroundGroup.addGroup({ zIndex: GROUP_Z_INDEX.FORE }),\n theme: this.themeObject,\n padding: this.padding,\n ...cfg,\n options: {\n ...sharedOptions,\n ...get(cfg, 'options', {}),\n },\n });\n\n this.views.push(v);\n\n return v;\n }\n\n /**\n * @deprecated\n * This method will be removed at G2 V4.1. Replaced by {@link #createView()}\n */\n public view(cfg?: Partial<ViewCfg>) {\n console.warn('This method will be removed at G2 V4.1. Please use chart.createView() instead.')\n return this.createView(cfg);\n }\n\n /**\n * 删除一个子 view\n * @param view\n * @return removedView\n */\n public removeView(view: View): View {\n const removedView = remove(this.views, (v: View) => v === view)[0];\n\n if (removedView) {\n removedView.destroy();\n }\n\n return removedView;\n }\n /* end View 管理相关的 API */\n\n // 一些 get 方法\n\n /**\n * 获取当前坐标系实例。\n * @returns [[Coordinate]]\n */\n public getCoordinate() {\n return this.coordinateInstance;\n }\n\n /**\n * 获取当前 view 的主题配置。\n * @returns themeObject\n */\n public getTheme(): LooseObject {\n return this.themeObject;\n }\n\n /**\n * 获得 x 轴字段的 scale 实例。\n * @returns view 中 Geometry 对于的 x scale\n */\n public getXScale(): Scale {\n // 拿第一个 Geometry 的 X scale\n // 隐藏逻辑:一个 view 中的 Geometry 必须 x 字段一致\n const g = this.geometries[0];\n return g ? g.getXScale() : null;\n }\n\n /**\n * 获取 y 轴字段的 scales 实例。\n * @returns view 中 Geometry 对于的 y scale 数组\n */\n public getYScales(): Scale[] {\n // 拿到所有的 Geometry 的 Y scale,然后去重\n const tmpMap = {};\n return this.geometries.map((g: Geometry) => {\n const yScale = g.getYScale();\n const field = yScale.field;\n if (!tmpMap[field]) {\n tmpMap[field] = true;\n return yScale;\n }\n });\n }\n\n /**\n * 获取 x 轴或者 y 轴对应的所有 scale 实例。\n * @param dimType x | y\n * @returns x 轴或者 y 轴对应的所有 scale 实例。\n */\n public getScalesByDim(dimType: 'x' | 'y'): Record<string, Scale> {\n const geometries = this.geometries;\n const scales = {};\n\n for (let i = 0, len = geometries.length; i < len; i++) {\n const geometry = geometries[i];\n const scale = dimType === 'x' ? geometry.getXScale() : geometry.getYScale();\n if (scale && !scales[scale.field]) {\n scales[scale.field] = scale;\n }\n }\n\n return scales;\n }\n\n /**\n * 根据字段名去获取 scale 实例。\n * @param field 数据字段名称\n * @param key id\n */\n public getScaleByField(field: string, key?: string): Scale {\n const defaultKey = key ? key : this.getScaleKey(field);\n // 调用根节点 view 的方法获取\n return this.getRootView().scalePool.getScale(defaultKey);\n }\n\n /**\n * 返回所有配置信息。\n * @returns 所有的 view API 配置。\n */\n public getOptions(): Options {\n return this.options;\n }\n\n /**\n * 获取 view 的数据(过滤后的数据)。\n * @returns 处理过滤器之后的数据。\n */\n public getData() {\n return this.filteredData;\n }\n\n /**\n * 获得绘制的层级 group。\n * @param layer 层级名称。\n * @returns 对应层级的 Group。\n */\n public getLayer(layer: LAYER): IGroup {\n return layer === LAYER.BG\n ? this.backgroundGroup\n : layer === LAYER.MID\n ? this.middleGroup\n : layer === LAYER.FORE\n ? this.foregroundGroup\n : this.foregroundGroup;\n }\n\n /**\n * 对外暴露方法,判断一个点是否在绘图区域(即坐标系范围)内部。\n * @param point 坐标点\n */\n public isPointInPlot(point: Point): boolean {\n return isPointInCoordinate(this.getCoordinate(), point);\n }\n\n /**\n * 获得所有的 legend 对应的 attribute 实例。\n * @returns 维度字段的 Attribute 数组\n */\n public getLegendAttributes(): Attribute[] {\n return (flatten(this.geometries.map((g: Geometry) => g.getGroupAttributes())) as unknown) as Attribute[];\n }\n\n /**\n * 获取所有的分组字段的 scale 实例。\n * @returns 获得分组字段的 scale 实例数组。\n */\n public getGroupScales(): Scale[] {\n // 拿到所有的 Geometry 的 分组字段 scale,然后打平去重\n const scales = this.geometries.map((g: Geometry) => g.getGroupScales());\n return uniq(flatten(scales));\n }\n\n /**\n * 获取 G.Canvas 实例。\n * @returns G.Canvas 画布实例。\n */\n public getCanvas(): ICanvas {\n return ((this.getRootView() as unknown) as Chart).canvas;\n }\n\n /**\n * 获得根节点 view。\n */\n public getRootView(): View {\n let v = this as View;\n\n while (true) {\n if (v.parent) {\n v = v.parent;\n continue;\n }\n break;\n }\n return v;\n }\n\n /**\n * 获取该数据在可视化后,对应的画布坐标点。\n * @param data 原始数据记录\n * @returns 对应的画布坐标点\n */\n public getXY(data: Datum): Point {\n const coordinate = this.getCoordinate();\n const xScales = this.getScalesByDim('x');\n const yScales = this.getScalesByDim('y');\n let x;\n let y;\n\n each(data, (value, key) => {\n if (xScales[key]) {\n x = xScales[key].scale(value);\n }\n if (yScales[key]) {\n y = yScales[key].scale(value);\n }\n });\n\n if (!isNil(x) && !isNil(y)) {\n return coordinate.convert({ x, y });\n }\n }\n\n /**\n * 获取 name 对应的 controller 实例\n * @param name\n */\n public getController(name: string): Controller {\n return find(this.controllers, (c: Controller) => c.name === name);\n }\n\n /**\n * 显示 point 坐标点对应的 tooltip。\n * @param point 画布坐标点\n * @returns View\n */\n public showTooltip(point: Point): View {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n if (tooltip) {\n tooltip.showTooltip(point);\n }\n return this;\n }\n\n /**\n * 隐藏 tooltip。\n * @returns View\n */\n public hideTooltip(): View {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n if (tooltip) {\n tooltip.hideTooltip();\n }\n return this;\n }\n\n /**\n * 将 tooltip 锁定到当前位置不能移动。\n * @returns View\n */\n public lockTooltip(): View {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n if (tooltip) {\n tooltip.lockTooltip();\n }\n return this;\n }\n\n /**\n * 将 tooltip 锁定解除。\n * @returns View\n */\n public unlockTooltip(): View {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n if (tooltip) {\n tooltip.unlockTooltip();\n }\n return this;\n }\n\n /**\n * 是否锁定 tooltip。\n * @returns 是否锁定\n */\n public isTooltipLocked() {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n return tooltip && tooltip.isTooltipLocked();\n }\n\n /**\n * 获取当前 point 对应的 tooltip 数据项。\n * @param point 坐标点\n * @returns tooltip 数据项\n */\n public getTooltipItems(point: Point) {\n const tooltip = this.getController('tooltip') as TooltipComponent;\n\n return tooltip ? tooltip.getTooltipItems(point) : [];\n }\n\n /**\n * 获取逼近的点的数据集合\n * @param point 当前坐标点\n * @returns 数据\n */\n public getSnapRecords(point: Point) {\n const geometries = this.geometries;\n let rst = [];\n for (let i = 0, len = geometries.length; i < len; i++) {\n const geom = geometries[i];\n const dataArray = geom.dataArray;\n geom.sort(dataArray); // 先进行排序,便于 tooltip 查找\n let record;\n for (let j = 0, dataLen = dataArray.length; j < dataLen; j++) {\n const data = dataArray[j];\n record = findDataByPoint(point, data, geom);\n if (record) {\n rst.push(record);\n }\n }\n }\n\n // 同样递归处理子 views\n const views = this.views;\n for (let i = 0, len = views.length; i < len; i++) {\n const view = views[i];\n const snapRecords = view.getSnapRecords(point);\n rst = rst.concat(snapRecords);\n }\n\n return rst;\n }\n\n /**\n * 获取所有的 pure component 组件,用于布局。\n */\n public getComponents(): ComponentOption[] {\n let components = [];\n const controllers = this.controllers;\n for (let i = 0, len = controllers.length; i < len; i++) {\n const controller = controllers[i];\n components = components.concat(controller.getComponents());\n }\n\n return components;\n }\n\n /**\n * 将 data 数据进行过滤。\n * @param data\n * @returns 过滤之后的数据\n */\n public filterData(data: Data): Data {\n const { filters } = this.options;\n // 不存在 filters,则不需要进行数据过滤\n if (size(filters) === 0) {\n return data;\n }\n\n // 存在过滤器,则逐个执行过滤,过滤器之间是 与 的关系\n return filter(data, (datum: Datum, idx: number) => {\n // 所有的 filter 字段\n const fields = Object.keys(filters);\n\n // 所有的条件都通过,才算通过\n return fields.every((field: string) => {\n const condition = filters[field];\n\n // condition 返回 true,则保留\n return condition(datum[field], datum, idx);\n });\n });\n }\n\n /**\n * 对某一个字段进行过滤\n * @param field\n * @param data\n */\n public filterFieldData(field: string, data: Data): Data {\n const { filters } = this.options;\n const condition = get(filters, field);\n\n if (isUndefined(condition)) {\n return data;\n }\n return data.filter((datum: Datum, idx: number) => condition(datum[field], datum, idx));\n }\n\n /**\n * 调整 coordinate 的坐标范围。\n */\n public adjustCoordinate() {\n const { start: curStart, end: curEnd } = this.getCoordinate();\n const start = this.coordinateBBox.bl;\n const end = this.coordinateBBox.tr;\n\n // 在 defaultLayoutFn 中只会在 coordinateBBox 发生变化的时候会调用 adjustCoorinate(),所以不用担心被置位\n if (isEqual(curStart, start) && isEqual(curEnd, end)) {\n this.isCoordinateChanged = false;\n // 如果大小没有变化则不更新\n return;\n }\n this.isCoordinateChanged = true;\n this.coordinateInstance = this.coordinateController.adjust(start, end);\n }\n\n protected paint(isUpdate: boolean) {\n this.renderDataRecursive(isUpdate);\n\n // 处理 sync scale 的逻辑\n this.syncScale();\n\n this.emit(VIEW_LIFE_CIRCLE.BEFORE_PAINT);\n\n this.renderLayoutRecursive(isUpdate);\n\n this.renderPaintRecursive(isUpdate);\n\n this.emit(VIEW_LIFE_CIRCLE.AFTER_PAINT);\n\n this.isDataChanged = false; // 渲染完毕复位\n }\n\n /**\n * 替换处理 view 的布局,最终是计算各个 view 的 coordinateBBox 和 coordinateInstance\n * @param isUpdate\n */\n protected renderLayoutRecursive(isUpdate: boolean) {\n // 1. 子 view 大小相对 coordinateBBox,changeSize 的时候需要重新计算\n this.calculateViewBBox();\n // 2. 更新 coordinate\n this.adjustCoordinate();\n // 3. 初始化组件 component\n this.initComponents(isUpdate);\n // 4. 进行布局,计算 coordinateBBox,进行组件布局,update 位置\n this.doLayout();\n // 5. 更新并存储最终的 padding 值\n const viewBBox = this.viewBBox;\n const coordinateBBox = this.coordinateBBox;\n\n if (!this.padding) {\n // 用户未设置 padding 时,将自动计算的 padding 保存至 autoPadding 属性中\n this.autoPadding = [\n coordinateBBox.tl.y - viewBBox.tl.y,\n viewBBox.tr.x - coordinateBBox.tr.x,\n viewBBox.bl.y - coordinateBBox.bl.y,\n coordinateBBox.tl.x - viewBBox.tl.x\n ];\n }\n\n // 同样递归处理子 views\n const views = this.views;\n for (let i = 0, len = views.length; i < len; i++) {\n const view = views[i];\n view.renderLayoutRecursive(isUpdate);\n }\n }\n\n /**\n * 最终递归绘制组件和图形\n * @param isUpdate\n */\n protected renderPaintRecursive(isUpdate: boolean) {\n if (this.limitInPlot) {\n const middleGroup = this.middleGroup;\n const { type, attrs } = getCoordinateClipCfg(this.coordinateInstance);\n middleGroup.setClip({\n type,\n attrs,\n });\n }\n\n // 1. 渲染几何标记\n this.paintGeometries(isUpdate);\n // 2. 绘制组件\n this.renderComponents(isUpdate);\n\n // 同样递归处理子 views\n const views = this.views;\n for (let i = 0, len = views.length; i < len; i++) {\n const view = views[i];\n view.renderPaintRecursive(isUpdate);\n }\n }\n\n // end Get 方法\n\n /**\n * 创建 scale,递归到顶层 view 去创建和缓存 scale\n * @param field\n * @param data\n * @param scaleDef\n * @param key\n */\n protected createScale(field: string, data: Data, scaleDef: ScaleOption, key: string): Scale {\n // 1. 合并 field 对应的 scaleDef,合并原则是底层覆盖顶层(就近原则)\n const currentScaleDef = get(this.options.scales, [field]);\n const mergedScaleDef = { ...currentScaleDef, ...scaleDef };\n\n // 2. 是否存在父 view,在则递归,否则创建\n if (this.parent) {\n return this.parent.createScale(field, data, mergedScaleDef, key);\n }\n\n // 3. 在根节点 view 通过 scalePool 创建\n return this.scalePool.createScale(field, data, mergedScaleDef, key);\n }\n\n /**\n * 递归渲染中的数据处理\n * @param isUpdate\n */\n private renderDataRecursive(isUpdate: boolean) {\n // 1. 处理数据\n this.doFilterData();\n // 2. 创建实例\n this.createCoordinate();\n // 3. 初始化 Geometry\n this.initGeometries(isUpdate);\n // 4. 处理分面逻辑,最终都是生成子 view 和 geometry\n this.renderFacet(isUpdate);\n\n // 同样递归处理子 views\n const views = this.views;\n for (let i = 0, len = views.length; i < len; i++) {\n const view = views[i];\n view.renderDataRecursive(isUpdate);\n }\n }\n\n /**\n * 计算 region,计算实际的像素范围坐标\n * @private\n */\n private calculateViewBBox() {\n let x;\n let y;\n let width;\n let height;\n\n if (this.parent) {\n const bbox = this.parent.coordinateBBox;\n // 存在 parent, 那么就是通过父容器大小计算\n x = bbox.x;\n y = bbox.y;\n width = bbox.width;\n height = bbox.height;\n } else {\n // 顶层容器,从 canvas 中取值 宽高\n x = 0;\n y = 0;\n width = this.canvas.get('width');\n height = this.canvas.get('height');\n }\n\n const { start, end } = this.region;\n\n // 根据 region 计算当前 view 的 bbox 大小。\n const viewBBox = new BBox(\n x + width * start.x,\n y + height * start.y,\n width * (end.x - start.x),\n height * (end.y - start.y)\n );\n\n if (!this.viewBBox || !this.viewBBox.isEqual(viewBBox)) {\n // viewBBox 发生变化的时候进行更新\n this.viewBBox = new BBox(\n x + width * start.x,\n y + height * start.y,\n width * (end.x - start.x),\n height * (end.y - start.y)\n );\n\n // 初始的 coordinate bbox 大小\n this.coordinateBBox = this.viewBBox;\n }\n }\n\n /**\n * 初始化事件机制:G 4.0 底层内置支持 name:event 的机制,那么只要所有组件都有自己的 name 即可。\n *\n * G2 的事件只是获取事件委托,然后在 view 嵌套结构中,形成事件冒泡机制。\n * 当前 view 只委托自己 view 中的 Component 和 Geometry 事件,并向上冒泡\n * @private\n */\n private initEvents() {\n // 三层 group 中的 shape 事件都会通过 G 冒泡上来的\n this.foregroundGroup.on('*', this.onDelegateEvents);\n this.middleGroup.on('*', this.onDelegateEvents);\n this.backgroundGroup.on('*', this.onDelegateEvents);\n\n this.canvas.on('*', this.onCanvasEvent);\n }\n\n private onCanvasEvent = (evt: GEvent): void => {\n const name = evt.name;\n if (!name.includes(':')) {// 非委托事件\n const e = this.createViewEvent(evt);\n // 处理 plot 事件\n this.doPlotEvent(e);\n this.emit(name, e);\n }\n }\n\n /**\n * 初始化插件\n */\n private initComponentController() {\n const usedControllers = this.usedControllers;\n for (let i = 0, len = usedControllers.length; i < len; i++) {\n const controllerName = usedControllers[i];\n const Ctor = getComponentController(controllerName);\n if (Ctor) {\n this.controllers.push(new Ctor(this));\n }\n }\n }\n\n private createViewEvent(evt: GEvent) {\n const { shape, name } = evt;\n\n const data = shape ? shape.get('origin') : null;\n // 事件在 view 嵌套中冒泡(暂不提供阻止冒泡的机制)\n const e = new Event(this, evt, data);\n e.type = name;\n return e;\n }\n /**\n * 触发事件之后\n * @param evt\n */\n private onDelegateEvents = (evt: GEvent): void => {\n // 阻止继续冒泡,防止重复事件触发\n // evt.preventDefault();\n const { name } = evt;\n if (!name.includes(':')) {\n return;\n }\n // 事件在 view 嵌套中冒泡(暂不提供阻止冒泡的机制)\n const e = this.createViewEvent(evt);\n\n // 包含有基本事件、组合事件\n this.emit(name, e);\n // const currentTarget = evt.currentTarget as IShape;\n // const inheritNames = currentTarget.get('inheritNames');\n // if (evt.delegateObject || inheritNames) {\n // const events = this.getEvents();\n // each(inheritNames, (subName) => {\n // const eventName = `${subName}:${type}`;\n // if (events[eventName]) {\n // this.emit(eventName, e);\n // }\n // });\n // }\n };\n\n /**\n * 处理 PLOT_EVENTS\n * plot event 需要处理所有的基础事件,并判断是否在画布中,然后再决定是否要 emit。\n * 对于 mouseenter、mouseleave 比较特殊,需要做一下数学比较。\n * @param e\n */\n private doPlotEvent(e: Event) {\n const { type, x, y } = e;\n\n const point = { x, y };\n\n const ALL_EVENTS = [\n 'mousedown',\n 'mouseup',\n 'mousemove',\n 'mouseleave',\n 'mousewheel',\n 'touchstart',\n 'touchmove',\n 'touchend',\n 'touchcancel',\n 'click',\n 'dblclick',\n 'contextmenu',\n ];\n\n if (ALL_EVENTS.includes(type)) {\n const currentInPlot = this.isPointInPlot(point);\n\n if (currentInPlot) {\n const TYPE = `plot:${type}`; // 组合 plot 事件\n e.type = TYPE;\n this.emit(TYPE, e);\n if (type === 'mouseleave' || type === 'touchend') { // 在plot 内部却离开画布\n this.isPreMouseInPlot = false;\n }\n }\n\n // 对于 mouseenter, mouseleave 的计算处理\n if (type === 'mousemove' || type === 'touchmove') {\n if (this.isPreMouseInPlot && !currentInPlot) {\n if (type === 'mousemove') {\n e.type = PLOT_EVENTS.MOUSE_LEAVE;\n this.emit(PLOT_EVENTS.MOUSE_LEAVE, e);\n }\n e.type = PLOT_EVENTS.LEAVE;\n this.emit(PLOT_EVENTS.LEAVE, e);\n } else if (!this.isPreMouseInPlot && currentInPlot) {\n if (type === 'mousemove') {\n e.type = PLOT_EVENTS.MOUSE_ENTER;\n this.emit(PLOT_EVENTS.MOUSE_ENTER, e);\n }\n e.type = PLOT_EVENTS.ENTER;\n this.emit(PLOT_EVENTS.ENTER, e);\n }\n // 赋新的状态值\n this.isPreMouseInPlot = currentInPlot;\n } else if (type === 'mouseleave' || type === 'touchend') { // 可能不在 currentInPlot 中\n if (this.isPreMouseInPlot) {\n if (type === 'mouseleave') {\n e.type = PLOT_EVENTS.MOUSE_LEAVE;\n this.emit(PLOT_EVENTS.MOUSE_LEAVE, e);\n }\n e.type = PLOT_EVENTS.LEAVE;\n this.emit(PLOT_EVENTS.LEAVE, e);\n\n this.isPreMouseInPlot = false;\n }\n }\n }\n }\n\n // view 生命周期 —— 渲染流程\n\n /**\n * 处理筛选器,筛选数据\n * @private\n */\n private doFilterData() {\n const { data } = this.options;\n this.filteredData = this.filterData(data);\n }\n\n /**\n * 初始化 Geometries\n * @private\n */\n private initGeometries(isUpdate: boolean) {\n // 初始化图形的之前,先创建 / 更新 scales\n this.createOrUpdateScales();\n // 实例化 Geometry,然后 view 将所有的 scale 管理起来\n const coordinate = this.getCoordinate();\n const scaleDefs = get(this.options, 'scales', {});\n const geometries = this.geometries;\n for (let i = 0, len = geometries.length; i < len; i++) {\n const geometry = geometries[i];\n // 保持 scales 引用不要变化\n geometry.scales = this.getGeometryScales();\n const cfg = {\n coordinate, // 使用 coordinate 引用,可以保持 coordinate 的同步更新\n scaleDefs,\n data: this.filteredData,\n theme: this.themeObject,\n isDataChanged: this.isDataChanged,\n isCoordinateChanged: this.isCoordinateChanged,\n };\n\n if (isUpdate) {\n // 数据发生更新\n geometry.update(cfg);\n } else {\n geometry.init(cfg);\n }\n }\n\n // Geometry 初始化之后,生成了 scale,然后进行调整 scale 配置\n this.adjustScales();\n }\n\n /**\n * 根据 Geometry 的所有字段创建 scales\n * 如果存在,则更新,不存在则创建\n */\n private createOrUpdateScales() {\n const fields = this.getScaleFields();\n const groupedFields = this.getGroupedFields();\n\n const { data, scales = {} } = this.getOptions();\n const filteredData = this.filteredData;\n\n for (let i = 0, len = fields.length; i < len; i++) {\n const field = fields[i];\n const scaleDef = scales[field];\n\n // 调用方法,递归去创建\n const key = this.getScaleKey(field);\n this.createScale(\n field,\n // 分组字段的 scale 使用未过滤的数据创建\n groupedFields.includes(field) ? data : filteredData,\n scaleDef,\n key,\n );\n\n // 缓存从当前 view 创建的 scale key\n this.createdScaleKeys.set(key, true);\n }\n }\n\n /**\n * 处理 scale 同步逻辑\n */\n private syncScale() {\n // 最终调用 root view 的\n this.getRootView().scalePool.sync();\n }\n\n /**\n * 获得 Geometry 中的 scale 对象\n */\n private getGeometryScales(): Record<string, Scale> {\n const fields = this.getScaleFields();\n\n const scales = {};\n for (let i = 0; i < fields.length; i++) {\n const field = fields[i];\n scales[field] = this.getScaleByField(field);\n }\n\n return scales;\n }\n\n private getScaleFields() {\n const fields = [];\n const tmpMap = {};\n const geometries = this.geometries;\n for (let i = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n const geometryScales = geometry.getScaleFields();\n uniq(geometryScales, fields, tmpMap);\n }\n return fields;\n }\n\n private getGroupedFields() {\n const fields = [];\n const tmpMap = {};\n const geometries = this.geometries;\n for (let i = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n const groupFields = geometry.getGroupFields();\n uniq(groupFields, fields, tmpMap);\n }\n return fields;\n }\n\n /**\n * 调整 scale 配置\n * @private\n */\n private adjustScales() {\n // 调整目前包括:\n // 分类 scale,调整 range 范围\n this.adjustCategoryScaleRange();\n }\n\n /**\n * 调整分类 scale 的 range,防止超出坐标系外面\n * @private\n */\n private adjustCategoryScaleRange() {\n const xyScales = [this.getXScale(), ...this.getYScales()].filter((e) => !!e);\n const coordinate = this.getCoordinate();\n const scaleOptions = this.options.scales;\n\n each(xyScales, (scale: Scale) => {\n const { field, values, isCategory, isIdentity } = scale;\n\n // 分类或者 identity 的 scale 才进行处理\n if (isCategory || isIdentity) {\n // 存在 value 值,且用户没有配置 range 配置\n if (values && !get(scaleOptions, [field, 'range'])) {\n const count = values.length;\n let range;\n\n if (count === 1) {\n range = [0.5, 1]; // 只有一个分类时,防止计算出现 [0.5,0.5] 的状态\n } else {\n let widthRatio = 1;\n let offset = 0;\n\n if (isFullCircle(coordinate)) {\n if (!coordinate.isTransposed) {\n range = [0, 1 - 1 / count];\n } else {\n widthRatio = get(this.theme, 'widthRatio.multiplePie', 1 / 1.3);\n offset = (1 / count) * widthRatio;\n range = [offset / 2, 1 - offset / 2];\n }\n } else {\n offset = 1 / count / 2; // 两边留下分类空间的一半\n range = [offset, 1 - offset]; // 坐标轴最前面和最后面留下空白防止绘制柱状图时\n }\n }\n // 更新 range\n scale.range = range;\n }\n }\n });\n }\n\n /**\n * 根据 options 配置、Geometry 字段配置,自动生成 components\n * @param isUpdate 是否是更新\n * @private\n */\n private initComponents(isUpdate: boolean) {\n // 先全部清空,然后 render\n const controllers = this.controllers;\n for (let i = 0; i < controllers.length; i++) {\n const controller = controllers[i];\n // 更新则走更新逻辑;否则清空载重绘\n if (isUpdate) {\n controller.update();\n } else {\n controller.clear();\n controller.render();\n }\n };\n }\n\n private doLayout() {\n this.layoutFunc(this);\n }\n\n /**\n * 创建坐标系\n * @private\n */\n private createCoordinate() {\n const start = this.coordinateBBox.bl;\n const end = this.coordinateBBox.tr;\n this.coordinateInstance = this.coordinateController.create(start, end);\n }\n\n /**\n * 根据 options 配置自动渲染 geometry\n * @private\n */\n private paintGeometries(isUpdate: boolean) {\n const doAnimation = this.options.animate;\n // geometry 的 paint 阶段\n const coordinate = this.getCoordinate();\n const canvasRegion = {\n x: this.viewBBox.x,\n y: this.viewBBox.y,\n minX: this.viewBBox.minX,\n minY: this.viewBBox.minY,\n maxX: this.viewBBox.maxX,\n maxY: this.viewBBox.maxY,\n width: this.viewBBox.width,\n height: this.viewBBox.height,\n };\n const geometries = this.geometries;\n for (let i = 0; i < geometries.length; i++) {\n const geometry = geometries[i];\n geometry.coordinate = coordinate;\n geometry.canvasRegion = canvasRegion;\n if (!doAnimation) {\n // 如果 view 不执行动画,那么 view 下所有的 geometry 都不执行动画\n geometry.animate(false);\n }\n geometry.paint(isUpdate);\n }\n }\n\n /**\n * 最后的绘制组件\n * @param isUpdate\n */\n private renderComponents(isUpdate: boolean) {\n // 先全部清空,然后 render\n for (let i = 0; i < this.getComponents().length; i++) {\n const co = this.getComponents()[i];\n (co.component as GroupComponent).render();\n }\n }\n\n /**\n * 渲染分面,会在其中进行数据分面,然后进行子 view 创建\n * @param isUpdate\n */\n private renderFacet(isUpdate: boolean) {\n if (this.facetInstance) {\n if (isUpdate) {\n this.facetInstance.update();\n } else {\n this.facetInstance.clear();\n // 计算分面数据\n this.facetInstance.init();\n // 渲染组件和 views\n this.facetInstance.render();\n }\n }\n }\n\n private initOptions() {\n const { geometries = [], interactions = [], views = [], annotations = [] } = this.options;\n\n // 创建 geometry 实例\n for (let i = 0; i < geometries.length; i++) {\n const geometryOption = geometries[i];\n this.createGeometry(geometryOption);\n }\n\n // 创建 interactions 实例\n for (let j = 0; j < interactions.length; j++) {\n const interactionOption = interactions[j];\n const { type, cfg } = interactionOption;\n this.interaction(type, cfg);\n }\n\n // 创建 view 实例\n for (let k = 0; k < views.length; k++) {\n const viewOption = views[k];\n this.createView(viewOption);\n }\n\n // 设置 annotation\n const annotationComponent = this.getController('annotation') as Annotation;\n for (let l = 0; l < annotations.length; l++) {\n const annotationOption = annotations[l];\n annotationComponent.annotation(annotationOption);\n }\n }\n\n private createGeometry(geometryOption: GeometryOption) {\n const { type, cfg = {} } = geometryOption;\n if (this[type]) {\n const geometry = this[type](cfg);\n each(geometryOption, (v, k) => {\n if (isFunction(geometry[k])) {\n geometry[k](v);\n }\n });\n }\n }\n\n /**\n * scale key 的创建方式\n * @param field\n */\n private getScaleKey(field: string): string {\n return `${this.id}-${field}`;\n }\n}\n\n/**\n * 注册 geometry 组件\n * @param name\n * @param Ctor\n * @returns Geometry\n */\nexport function registerGeometry(name: string, Ctor: any) {\n // 语法糖,在 view API 上增加原型方法\n View.prototype[name.toLowerCase()] = function (cfg: any = {}) {\n const props = {\n /** 图形容器 */\n container: this.middleGroup.addGroup(),\n labelsContainer: this.foregroundGroup.addGroup(),\n ...cfg,\n };\n\n const geometry = new Ctor(props);\n this.geometries.push(geometry);\n\n return geometry;\n };\n}\n\nexport default View;\n"]} |