UNPKG

5.51 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3exports.getShapeFactory = exports.registerShape = exports.registerShapeFactory = void 0;
4var tslib_1 = require("tslib");
5var path_util_1 = require("@antv/path-util");
6var util_1 = require("@antv/util");
7var path_1 = require("./util/path");
8/** ShapeFactory 基类 */
9var ShapeFactoryBase = {
10 /** 坐标系对象 */
11 coordinate: null,
12 /** 默认绘制的 Shape 类型 */
13 defaultShapeType: null,
14 /** 主题样式 */
15 theme: null,
16 /**
17 * 获取 shape 绘制需要的关键点
18 * @param shapeType shape 类型
19 * @param shapePoint 每条数据映射后的坐标点以及 size 数值
20 * @returns 图形关键点信息
21 */
22 getShapePoints: function (shapeType, shapePoint) {
23 var shape = this.getShape(shapeType);
24 if (shape.getPoints) {
25 return shape.getPoints(shapePoint);
26 }
27 return this.getDefaultPoints(shapePoint);
28 },
29 /**
30 * 根据 shape 类型获取具体的 shape 实例
31 * @param shapeType string shape 的类型
32 * @returns
33 */
34 getShape: function (shapeType) {
35 var shape = this[shapeType] || this[this.defaultShapeType];
36 shape.coordinate = this.coordinate;
37 return shape;
38 },
39 /**
40 * 获取 shape 的默认关键点
41 * @override
42 */
43 getDefaultPoints: function () {
44 return [];
45 },
46 /**
47 * 获取 shape 的默认绘制样式 (内置的 shapeFactory 均有注册默认样式)
48 */
49 getDefaultStyle: function (geometryTheme) {
50 return (0, util_1.get)(geometryTheme, [this.defaultShapeType, 'default', 'style'], {});
51 },
52 /**
53 * 获取 shape 对应的缩略图配置信息。
54 * @param shapeType shape 类型
55 * @param color 颜色
56 * @param isInPolar 是否在极坐标系下
57 * @returns 返回缩略图 marker 配置。
58 */
59 getMarker: function (shapeType, markerCfg) {
60 var shape = this.getShape(shapeType);
61 if (!shape.getMarker) {
62 var defaultShapeType = this.defaultShapeType;
63 shape = this.getShape(defaultShapeType);
64 }
65 var theme = this.theme;
66 var shapeStyle = (0, util_1.get)(theme, [shapeType, 'default'], {});
67 var markerStyle = shape.getMarker(markerCfg);
68 return (0, util_1.deepMix)({}, shapeStyle, markerStyle);
69 },
70 /**
71 * 绘制 shape
72 * @override
73 * @param shapeType 绘制的 shape 类型
74 * @param cfg 绘制 shape 需要的信息
75 * @param element Element 实例
76 * @returns
77 */
78 drawShape: function (shapeType, cfg, container) {
79 var shape = this.getShape(shapeType);
80 return shape.draw(cfg, container);
81 },
82};
83/** Shape 基类 */
84var ShapeBase = {
85 /** 坐标系对象 */
86 coordinate: null,
87 /**
88 * 将归一化的 path 转换成坐标系下的 path
89 * @param path 归一化的路径
90 * @returns
91 */
92 parsePath: function (path) {
93 var coordinate = this.coordinate;
94 var parsedPath = (0, path_util_1.parsePathString)(path);
95 if (coordinate.isPolar) {
96 parsedPath = (0, path_1.convertPolarPath)(coordinate, parsedPath);
97 }
98 else {
99 parsedPath = (0, path_1.convertNormalPath)(coordinate, parsedPath);
100 }
101 return parsedPath;
102 },
103 /**
104 * 将归一化的坐标转换成画布坐标
105 * @param point 归一化的坐标点数据
106 * @returns
107 */
108 parsePoint: function (point) {
109 var coordinate = this.coordinate;
110 return coordinate.convert(point);
111 },
112 /**
113 * 0~1 points 转 画布 points
114 * @param points 节点集合
115 * @returns
116 */
117 parsePoints: function (points) {
118 var coordinate = this.coordinate;
119 return points.map(function (point) {
120 return coordinate.convert(point);
121 });
122 },
123 /**
124 * 绘制 shape
125 * @override
126 */
127 draw: function (cfg, container) { },
128};
129var ShapeFactoryMap = {};
130/**
131 * 注册 ShapeFactory。
132 * @param factoryName ShapeFactory 名称,对应 Geometry 几何标记名称。
133 * @param cfg 注册 ShapeFactory 需要覆写定义的属性。
134 * @returns 返回 ShapeFactory 对象。
135 */
136function registerShapeFactory(factoryName, cfg) {
137 var className = (0, util_1.upperFirst)(factoryName);
138 var geomObj = tslib_1.__assign(tslib_1.__assign(tslib_1.__assign({}, ShapeFactoryBase), cfg), { geometryType: factoryName });
139 ShapeFactoryMap[className] = geomObj;
140 return geomObj;
141}
142exports.registerShapeFactory = registerShapeFactory;
143/**
144 * 注册 Shape。
145 * @param factoryName 对应的 ShapeFactory 名称。
146 * @param shapeType 注册的 shape 名称。
147 * @param cfg 注册 Shape 需要覆写定义的属性。
148 * @returns shape 返回注册的 shape 对象。
149 */
150function registerShape(factoryName, shapeType, cfg) {
151 var className = (0, util_1.upperFirst)(factoryName);
152 var factory = ShapeFactoryMap[className];
153 var shapeObj = tslib_1.__assign(tslib_1.__assign({}, ShapeBase), cfg);
154 factory[shapeType] = shapeObj;
155 return shapeObj;
156}
157exports.registerShape = registerShape;
158/**
159 * 获取 factoryName 对应的 shapeFactory
160 * @param factoryName
161 * @returns shape factory
162 */
163function getShapeFactory(factoryName) {
164 var className = (0, util_1.upperFirst)(factoryName);
165 return ShapeFactoryMap[className];
166}
167exports.getShapeFactory = getShapeFactory;
168//# sourceMappingURL=base.js.map
\No newline at end of file