vislite 1.6.1 → 1.7.0-alpha.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (58) hide show
  1. package/CHANGELOG +9 -1
  2. package/lib/BarLayout/index.es.js +1 -1
  3. package/lib/BarLayout/index.es.min.js +1 -1
  4. package/lib/Buffer/index.es.js +1 -1
  5. package/lib/Buffer/index.es.min.js +1 -1
  6. package/lib/Canvas/index.es.js +1 -1
  7. package/lib/Canvas/index.es.min.js +1 -1
  8. package/lib/Cardinal/index.es.js +1 -1
  9. package/lib/Cardinal/index.es.min.js +1 -1
  10. package/lib/Eoap/index.es.js +1 -1
  11. package/lib/Eoap/index.es.min.js +1 -1
  12. package/lib/Hermite/index.es.js +1 -1
  13. package/lib/Hermite/index.es.min.js +1 -1
  14. package/lib/MapCoordinate/index.es.js +1 -1
  15. package/lib/MapCoordinate/index.es.min.js +1 -1
  16. package/lib/Matrix4/index.es.js +1 -1
  17. package/lib/Matrix4/index.es.min.js +1 -1
  18. package/lib/Mercator/index.es.js +1 -1
  19. package/lib/Mercator/index.es.min.js +1 -1
  20. package/lib/PieLayout/index.es.js +1 -1
  21. package/lib/PieLayout/index.es.min.js +1 -1
  22. package/lib/RawCanvas/index.es.js +1 -1
  23. package/lib/RawCanvas/index.es.min.js +1 -1
  24. package/lib/SVG/index.es.js +90 -1
  25. package/lib/SVG/index.es.min.js +2 -2
  26. package/lib/Shader/index.es.js +1 -1
  27. package/lib/Shader/index.es.min.js +1 -1
  28. package/lib/Texture/index.es.js +1 -1
  29. package/lib/Texture/index.es.min.js +1 -1
  30. package/lib/TreeLayout/index.es.js +1 -1
  31. package/lib/TreeLayout/index.es.min.js +1 -1
  32. package/lib/animation/index.es.js +1 -1
  33. package/lib/animation/index.es.min.js +1 -1
  34. package/lib/assemble/index.es.js +1 -1
  35. package/lib/assemble/index.es.min.js +1 -1
  36. package/lib/getLoopColors/index.es.js +1 -1
  37. package/lib/getLoopColors/index.es.min.js +1 -1
  38. package/lib/getWebGLContext/index.es.js +1 -1
  39. package/lib/getWebGLContext/index.es.min.js +1 -1
  40. package/lib/index.umd.js +90 -1
  41. package/lib/index.umd.min.js +2 -2
  42. package/lib/initOption/index.es.js +1 -1
  43. package/lib/initOption/index.es.min.js +1 -1
  44. package/lib/mergeOption/index.es.js +1 -1
  45. package/lib/mergeOption/index.es.min.js +1 -1
  46. package/lib/move/index.es.js +1 -1
  47. package/lib/move/index.es.min.js +1 -1
  48. package/lib/rotate/index.es.js +1 -1
  49. package/lib/rotate/index.es.min.js +1 -1
  50. package/lib/ruler/index.es.js +1 -1
  51. package/lib/ruler/index.es.min.js +1 -1
  52. package/lib/scale/index.es.js +1 -1
  53. package/lib/scale/index.es.min.js +1 -1
  54. package/lib/throttle/index.es.js +1 -1
  55. package/lib/throttle/index.es.min.js +1 -1
  56. package/package.json +2 -2
  57. package/src/common/svg/index.ts +88 -1
  58. package/types/SVG.d.ts +31 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "vislite",
3
- "version": "1.6.1",
3
+ "version": "1.7.0-alpha.1",
4
4
  "description": "灵活、快速、简单的数据可视化交互式跨端前端库",
5
5
  "main": "./lib/index.umd.min.js",
6
6
  "typings": "./types/index.d.ts",
@@ -70,6 +70,6 @@
70
70
  "webpack-dev-server": "^4.7.4"
71
71
  },
72
72
  "dependencies": {
73
- "oipage": "^1.3.1"
73
+ "oipage": "^1.5.0"
74
74
  }
75
75
  }
@@ -19,6 +19,10 @@ class SVG {
19
19
  private __path: string = ""
20
20
  private __currentPosition: number[] = []
21
21
 
22
+ // 变换(和canvas2D的类似,内部维护了用于记录)
23
+ private __transform_history: Array<string> = []
24
+ private __transform_current = ""
25
+
22
26
  protected __svg: SVGElement
23
27
  constructor(svg: SVGElement) {
24
28
  this.__svg = svg
@@ -128,18 +132,27 @@ class SVG {
128
132
  // deg表示文字旋转角度,是角度值,不是弧度
129
133
  fillText(text: string, x: number, y: number, deg: number = 0) {
130
134
  initText(this.__useEl, this.__config, x, y, deg)
135
+ this.attr({
136
+ transform: this.__transform_current
137
+ })
131
138
  this.__useEl.textContent = text
132
139
  fill(this.__useEl, this.__config)
133
140
  return this
134
141
  }
135
142
  strokeText(text: string, x: number, y: number, deg: number = 0) {
136
143
  initText(this.__useEl, this.__config, x, y, deg)
144
+ this.attr({
145
+ transform: this.__transform_current
146
+ })
137
147
  this.__useEl.textContent = text
138
148
  stroke(this.__useEl, this.__config)
139
149
  return this
140
150
  }
141
151
  fullText(text: string, x: number, y: number, deg: number = 0) {
142
152
  initText(this.__useEl, this.__config, x, y, deg)
153
+ this.attr({
154
+ transform: this.__transform_current
155
+ })
143
156
  this.__useEl.textContent = text
144
157
  full(this.__useEl, this.__config)
145
158
  return this
@@ -155,6 +168,9 @@ class SVG {
155
168
  deg: number
156
169
  ) {
157
170
  initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
171
+ this.attr({
172
+ transform: this.__transform_current
173
+ })
158
174
  fill(this.__useEl, this.__config)
159
175
  return this
160
176
  }
@@ -167,6 +183,9 @@ class SVG {
167
183
  deg: number
168
184
  ) {
169
185
  initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
186
+ this.attr({
187
+ transform: this.__transform_current
188
+ })
170
189
  stroke(this.__useEl, this.__config)
171
190
  return this
172
191
  }
@@ -179,6 +198,9 @@ class SVG {
179
198
  deg: number
180
199
  ) {
181
200
  initArc(this.__useEl, this.__config, cx, cy, r1, r2, beginDeg, deg)
201
+ this.attr({
202
+ transform: this.__transform_current
203
+ })
182
204
  full(this.__useEl, this.__config)
183
205
  return this
184
206
  }
@@ -186,16 +208,25 @@ class SVG {
186
208
  // 圆形
187
209
  fillCircle(cx: number, cy: number, r: number) {
188
210
  initCircle(this.__useEl, cx, cy, r)
211
+ this.attr({
212
+ transform: this.__transform_current
213
+ })
189
214
  fill(this.__useEl, this.__config)
190
215
  return this
191
216
  }
192
217
  strokeCircle(cx: number, cy: number, r: number) {
193
218
  initCircle(this.__useEl, cx, cy, r)
219
+ this.attr({
220
+ transform: this.__transform_current
221
+ })
194
222
  stroke(this.__useEl, this.__config)
195
223
  return this
196
224
  }
197
225
  fullCircle(cx: number, cy: number, r: number) {
198
226
  initCircle(this.__useEl, cx, cy, r)
227
+ this.attr({
228
+ transform: this.__transform_current
229
+ })
199
230
  full(this.__useEl, this.__config)
200
231
  return this
201
232
  }
@@ -203,16 +234,25 @@ class SVG {
203
234
  // 矩形
204
235
  fillRect(x: number, y: number, width: number, height: number) {
205
236
  initRect(this.__useEl, this.__config, x, y, width, height)
237
+ this.attr({
238
+ transform: this.__transform_current
239
+ })
206
240
  fill(this.__useEl, this.__config)
207
241
  return this
208
242
  }
209
243
  strokeRect(x: number, y: number, width: number, height: number) {
210
244
  initRect(this.__useEl, this.__config, x, y, width, height)
245
+ this.attr({
246
+ transform: this.__transform_current
247
+ })
211
248
  stroke(this.__useEl, this.__config)
212
249
  return this
213
250
  }
214
251
  fullRect(x: number, y: number, width: number, height: number) {
215
252
  initRect(this.__useEl, this.__config, x, y, width, height)
253
+ this.attr({
254
+ transform: this.__transform_current
255
+ })
216
256
  full(this.__useEl, this.__config)
217
257
  return this
218
258
  }
@@ -241,20 +281,38 @@ class SVG {
241
281
  }
242
282
  fill() {
243
283
  initPath(this.__useEl, this.__path)
284
+ this.attr({
285
+ transform: this.__transform_current
286
+ })
244
287
  fill(this.__useEl, this.__config)
245
288
  return this
246
289
  }
247
290
  stroke() {
248
291
  initPath(this.__useEl, this.__path)
292
+ this.attr({
293
+ transform: this.__transform_current
294
+ })
249
295
  stroke(this.__useEl, this.__config)
250
296
  return this
251
297
  }
252
298
  full() {
253
299
  initPath(this.__useEl, this.__path)
300
+ this.attr({
301
+ transform: this.__transform_current
302
+ })
254
303
  full(this.__useEl, this.__config)
255
304
  return this
256
305
  }
257
306
 
307
+ save() {
308
+ this.__transform_history.push(this.__transform_current);
309
+ return this
310
+ }
311
+ restore() {
312
+ if (this.__transform_history.length > 0) this.__transform_current = this.__transform_history.pop() as string;
313
+ return this
314
+ }
315
+
258
316
  arc(x: number, y: number, r: number, beginDeg: number, deg: number) {
259
317
  const begPosition = rotate(x, y, (beginDeg / 180) * Math.PI, x + r, y)
260
318
  const endPosition = rotate(
@@ -317,7 +375,6 @@ class SVG {
317
375
  return this
318
376
  }
319
377
 
320
-
321
378
  // 线性渐变
322
379
  createLinearGradient(x0: number, y0: number, x1: number, y1: number) {
323
380
  return linearGradient(this.__svg, x0, y0, x1, y1)
@@ -327,6 +384,36 @@ class SVG {
327
384
  createRadialGradient(cx: number, cy: number, r: number) {
328
385
  return radialGradient(this.__svg, cx, cy, r)
329
386
  }
387
+
388
+ // 转换画布
389
+ translate(dx: number, dy: number) {
390
+ this.__transform_current += ' translate(' + dx + ',' + dy + ')'
391
+ return this
392
+ }
393
+ rotate(deg: number) {
394
+ this.__transform_current += ' rotate(' + deg + ')'
395
+ return this
396
+ }
397
+
398
+ // 扩展绘制方法
399
+ install(methods: {
400
+ [key: string]: Function
401
+ }): any {
402
+ for (const key in methods) {
403
+
404
+ if (key in this) {
405
+ throw new Error("VISLite SVG:Method already exists and cannot be overwritten.")
406
+ } else {
407
+ (this as any)[key] = (...args: any) => {
408
+ const value = methods[key].apply(this, args)
409
+ if (value != void 0) return value
410
+ return this
411
+ }
412
+ }
413
+
414
+ }
415
+ return this
416
+ }
330
417
  }
331
418
 
332
419
  export default SVG
package/types/SVG.d.ts CHANGED
@@ -199,6 +199,16 @@ export default interface SVGType {
199
199
  */
200
200
  bezierCurveTo(cp1x: number, cp1y: number, cp2x: number, cp2y: number, x: number, y: number): this
201
201
 
202
+ /**
203
+ * 保存当前的绘图状态
204
+ */
205
+ save(): this
206
+
207
+ /**
208
+ * 恢复之前保存的绘图状态
209
+ */
210
+ restore(): this
211
+
202
212
  /**
203
213
  * 把当前路径包裹的区域填充颜色
204
214
  */
@@ -245,4 +255,25 @@ export default interface SVGType {
245
255
  * 把画布变成url
246
256
  */
247
257
  toDataURL(): Promise<string>
258
+
259
+ /**
260
+ * 将画布的坐标原点向左右方向移动dx,向上下方向移动dy
261
+ * @param dx
262
+ * @param dy
263
+ */
264
+ translate(dx: number, dy: number): this
265
+
266
+ /**
267
+ * 将画布顺时针旋转deg弧度
268
+ * @param deg
269
+ */
270
+ rotate(deg: number): this
271
+
272
+ /**
273
+ * 扩展绘制方法
274
+ * @param methods
275
+ */
276
+ install(methods: {
277
+ [key: string]: Function
278
+ }): this
248
279
  }