jmgraph 3.2.27 → 3.2.29

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 (42) hide show
  1. package/dist/jmgraph.core.min.js +1 -1
  2. package/dist/jmgraph.core.min.js.map +1 -1
  3. package/dist/jmgraph.js +2657 -415
  4. package/dist/jmgraph.min.js +1 -1
  5. package/package.json +1 -1
  6. package/src/core/jmControl.js +824 -127
  7. package/src/core/jmEvents.js +154 -0
  8. package/src/core/jmFilter.js +38 -1
  9. package/src/core/jmGradient.js +47 -2
  10. package/src/core/jmGraph.js +51 -7
  11. package/src/core/jmLayer.js +34 -2
  12. package/src/core/jmList.js +167 -0
  13. package/src/core/jmObject.js +128 -8
  14. package/src/core/jmPath.js +43 -5
  15. package/src/core/jmProperty.js +181 -2
  16. package/src/core/jmShadow.js +36 -7
  17. package/src/core/jmUtils.js +149 -12
  18. package/src/lib/webgl/base.js +211 -83
  19. package/src/lib/webgl/core/buffer.js +43 -12
  20. package/src/lib/webgl/core/mapSize.js +16 -7
  21. package/src/lib/webgl/core/mapType.js +41 -22
  22. package/src/lib/webgl/core/program.js +94 -54
  23. package/src/lib/webgl/core/shader.js +20 -8
  24. package/src/lib/webgl/core/texture.js +55 -32
  25. package/src/lib/webgl/gradient.js +49 -17
  26. package/src/lib/webgl/index.js +173 -24
  27. package/src/lib/webgl/path.js +61 -12
  28. package/src/shapes/jmArc.js +48 -2
  29. package/src/shapes/jmArrow.js +35 -2
  30. package/src/shapes/jmArrowLine.js +33 -2
  31. package/src/shapes/jmBezier.js +50 -4
  32. package/src/shapes/jmCircle.js +35 -2
  33. package/src/shapes/jmEllipse.js +29 -3
  34. package/src/shapes/jmHArc.js +39 -2
  35. package/src/shapes/jmImage.js +49 -3
  36. package/src/shapes/jmLabel.js +41 -2
  37. package/src/shapes/jmLine.js +42 -2
  38. package/src/shapes/jmPolygon.js +42 -3
  39. package/src/shapes/jmPrismatic.js +34 -2
  40. package/src/shapes/jmRect.js +45 -3
  41. package/src/shapes/jmResize.js +42 -4
  42. package/src/shapes/jmStar.js +38 -4
@@ -1,9 +1,26 @@
1
+ /**
2
+ * @fileoverview jmEllipse 椭圆类
3
+ *
4
+ * jmEllipse 提供了椭圆图形的绘制功能。
5
+ * 椭圆是通过缩放圆形来实现的,支持完整的椭圆和椭圆弧。
6
+ *
7
+ * 主要功能:
8
+ * - 椭圆绘制
9
+ * - 椭圆弧绘制
10
+ * - 支持 WebGL 和 Canvas 2D 模式
11
+ *
12
+ * @module jmEllipse
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmArc} from "./jmArc.js";
2
18
 
3
19
  /**
4
- * 画椭圆
5
- * 椭圆是通过缩放圆形来实现的,支持完整的椭圆和椭圆弧
6
- * 可以指定起始角度和结束角度来绘制椭圆弧
20
+ * 椭圆类
21
+ *
22
+ * 绘制椭圆图形,继承自 jmArc。
23
+ * 可以指定起始角度和结束角度来绘制椭圆弧。
7
24
  *
8
25
  * @class jmEllipse
9
26
  * @extends jmArc
@@ -14,6 +31,15 @@ import {jmArc} from "./jmArc.js";
14
31
  * @param {number} [params.startAngle=0] 起始角度(弧度)
15
32
  * @param {number} [params.endAngle=Math.PI*2] 结束角度(弧度)
16
33
  * @param {boolean} [params.anticlockwise=false] 是否逆时针绘制
34
+ *
35
+ * @example
36
+ * // 创建椭圆
37
+ * const ellipse = graph.createShape('ellipse', {
38
+ * center: {x: 200, y: 200},
39
+ * width: 200,
40
+ * height: 100,
41
+ * style: { fill: '#ff0000', stroke: '#000' }
42
+ * });
17
43
  */
18
44
  export default class jmEllipse extends jmArc {
19
45
 
@@ -1,10 +1,47 @@
1
+ /**
2
+ * @fileoverview jmHArc 空心圆弧类
3
+ *
4
+ * jmHArc 提供了空心圆弧(圆环弧)的绘制功能。
5
+ * 由内圆和外圆两个半径定义,形成一个环形的弧。
6
+ *
7
+ * 主要功能:
8
+ * - 空心圆弧绘制
9
+ * - 支持顺时针/逆时针绘制
10
+ * - 支持填充和描边
11
+ *
12
+ * @module jmHArc
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmArc} from "./jmArc.js";
18
+
2
19
  /**
3
- * 画空心圆弧,继承自jmPath
20
+ * 空心圆弧类
21
+ *
22
+ * 绘制空心圆弧(圆环弧),继承自 jmArc。
23
+ * 由内圆半径和外圆半径定义环形区域。
4
24
  *
5
25
  * @class jmHArc
6
26
  * @extends jmArc
7
- * @param {object} params 空心圆参数:minRadius=中心小圆半径,maxRadius=大圆半径,start=起始角度,end=结束角度,anticlockwise=false 顺时针,true 逆时针
27
+ * @param {object} params 空心圆弧参数
28
+ * @param {object} [params.center] 圆弧中心点 {x, y}
29
+ * @param {number} [params.minRadius] 内圆半径
30
+ * @param {number} [params.maxRadius] 外圆半径
31
+ * @param {number} [params.start=0] 起始角度(弧度)
32
+ * @param {number} [params.end=Math.PI*2] 结束角度(弧度)
33
+ * @param {boolean} [params.anticlockwise=false] 是否逆时针绘制
34
+ *
35
+ * @example
36
+ * // 创建空心圆弧
37
+ * const hArc = graph.createShape('hArc', {
38
+ * center: {x: 200, y: 200},
39
+ * minRadius: 30,
40
+ * maxRadius: 50,
41
+ * start: 0,
42
+ * end: Math.PI,
43
+ * style: { fill: '#ff0000' }
44
+ * });
8
45
  */
9
46
 
10
47
  export default class jmHArc extends jmArc {
@@ -1,12 +1,58 @@
1
+ /**
2
+ * @fileoverview jmImage 图片类
3
+ *
4
+ * jmImage 提供了图片显示功能。
5
+ * 支持从 URL 或 Image 对象加载图片,支持图片裁剪和缩放。
6
+ *
7
+ * 主要功能:
8
+ * - 图片加载和显示
9
+ * - 图片裁剪
10
+ * - 图片缩放
11
+ * - 支持 WebGL 和 Canvas 2D 模式
12
+ *
13
+ * @module jmImage
14
+ * @author jmGraph Team
15
+ * @license MIT
16
+ */
17
+
1
18
  import {jmControl} from "../core/jmControl.js";
19
+
2
20
  /**
3
- * 图片控件,继承自jmControl
4
- * params参数中image为指定的图片源地址或图片img对象,
5
- * postion=当前控件的位置,width=其宽度,height=高度,sourcePosition=从当前图片中展示的位置,sourceWidth=从图片中截取的宽度,sourceHeight=从图片中截取的高度。
21
+ * 图片类
6
22
  *
23
+ * 显示图片控件,支持从 URL 或 Image 对象加载图片。
24
+ * 支持图片裁剪和缩放功能。
25
+ *
7
26
  * @class jmImage
8
27
  * @extends jmControl
9
28
  * @param {object} params 控件参数
29
+ * @param {string|HTMLImageElement} [params.image] 图片源地址或图片对象
30
+ * @param {object} [params.position] 图片位置 {x, y}
31
+ * @param {number} [params.width] 图片显示宽度
32
+ * @param {number} [params.height] 图片显示高度
33
+ * @param {object} [params.sourcePosition] 图片裁剪起始位置 {x, y}
34
+ * @param {number} [params.sourceWidth] 图片裁剪宽度
35
+ * @param {number} [params.sourceHeight] 图片裁剪高度
36
+ *
37
+ * @example
38
+ * // 从 URL 加载图片
39
+ * const img = graph.createShape('image', {
40
+ * image: 'path/to/image.png',
41
+ * position: {x: 100, y: 100},
42
+ * width: 200,
43
+ * height: 150
44
+ * });
45
+ *
46
+ * // 裁剪图片
47
+ * const croppedImg = graph.createShape('image', {
48
+ * image: 'path/to/sprite.png',
49
+ * position: {x: 100, y: 100},
50
+ * sourcePosition: {x: 0, y: 0},
51
+ * sourceWidth: 50,
52
+ * sourceHeight: 50,
53
+ * width: 100,
54
+ * height: 100
55
+ * });
10
56
  */
11
57
  export default class jmImage extends jmControl {
12
58
 
@@ -1,10 +1,49 @@
1
+ /**
2
+ * @fileoverview jmLabel 文本标签类
3
+ *
4
+ * jmLabel 提供了文本显示功能。
5
+ * 支持单行和多行文本,支持自动换行。
6
+ *
7
+ * 主要功能:
8
+ * - 文本绘制
9
+ * - 自动换行
10
+ * - 文本对齐(水平/垂直)
11
+ * - 字体样式设置
12
+ *
13
+ * @module jmLabel
14
+ * @author jmGraph Team
15
+ * @license MIT
16
+ */
17
+
1
18
  import {jmControl} from "../core/jmControl.js";
19
+
2
20
  /**
3
- * 显示文字控件
21
+ * 文本标签类
22
+ *
23
+ * 显示文字控件,支持多种文本样式和对齐方式。
4
24
  *
5
25
  * @class jmLabel
6
26
  * @extends jmControl
7
- * @param {object} params params参数:style=样式,value=显示的文字
27
+ * @param {object} params 参数
28
+ * @param {string} [params.text=''] 显示的文字内容
29
+ * @param {object} [params.center] 文本中心点坐标
30
+ * @param {object} [params.style] 样式对象
31
+ * @param {string} [params.style.font] 字体样式
32
+ * @param {string} [params.style.textAlign='left'] 水平对齐方式
33
+ * @param {string} [params.style.textBaseline='middle'] 垂直对齐方式
34
+ * @param {number} [params.style.maxWidth] 最大宽度(用于自动换行)
35
+ *
36
+ * @example
37
+ * // 创建文本标签
38
+ * const label = graph.createShape('label', {
39
+ * position: {x: 100, y: 100},
40
+ * text: 'Hello World',
41
+ * style: {
42
+ * fill: '#000',
43
+ * font: '20px Arial',
44
+ * textAlign: 'center'
45
+ * }
46
+ * });
8
47
  */
9
48
  export default class jmLabel extends jmControl {
10
49
 
@@ -1,10 +1,50 @@
1
+ /**
2
+ * @fileoverview jmLine 直线类
3
+ *
4
+ * jmLine 提供了直线图形的绘制功能,支持实线和虚线。
5
+ * 虚线支持自定义间隔长度。
6
+ *
7
+ * 主要功能:
8
+ * - 直线绘制
9
+ * - 虚线模式
10
+ * - 自定义虚线间隔
11
+ *
12
+ * @module jmLine
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmPath} from "../core/jmPath.js";
18
+
2
19
  /**
3
- * 画一条直线
20
+ * 直线类
21
+ *
22
+ * 绘制从起点到终点的直线,支持实线和虚线两种模式。
4
23
  *
5
24
  * @class jmLine
6
25
  * @extends jmPath
7
- * @param {object} params 直线参数:start=起始点,end=结束点,lineType=线类型(solid=实线,dotted=虚线),dashLength=虚线间隔(=4)
26
+ * @param {object} params 直线参数
27
+ * @param {object} [params.start] 起始点 {x, y}
28
+ * @param {object} [params.end] 结束点 {x, y}
29
+ * @param {string} [params.lineType='solid'] 线类型:'solid'=实线,'dotted'=虚线
30
+ * @param {number} [params.dashLength=4] 虚线间隔长度
31
+ *
32
+ * @example
33
+ * // 创建实线
34
+ * const line = graph.createShape('line', {
35
+ * start: {x: 0, y: 0},
36
+ * end: {x: 100, y: 100},
37
+ * style: { stroke: '#000', lineWidth: 2 }
38
+ * });
39
+ *
40
+ * // 创建虚线
41
+ * const dottedLine = graph.createShape('line', {
42
+ * start: {x: 0, y: 0},
43
+ * end: {x: 100, y: 100},
44
+ * lineType: 'dotted',
45
+ * dashLength: 5,
46
+ * style: { stroke: '#000' }
47
+ * });
8
48
  */
9
49
  export default class jmLine extends jmPath {
10
50
 
@@ -1,9 +1,27 @@
1
+ /**
2
+ * @fileoverview jmPolygon 多边形类
3
+ *
4
+ * jmPolygon 提供了多边形图形的绘制功能。
5
+ * 支持规则多边形(正多边形)和自定义多边形。
6
+ *
7
+ * 主要功能:
8
+ * - 规则多边形(正三角形、正方形、正五边形等)
9
+ * - 自定义多边形(通过顶点数组定义)
10
+ * - 填充和描边样式
11
+ *
12
+ * @module jmPolygon
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmPath} from "../core/jmPath.js";
2
18
 
3
19
  /**
4
- * 画多边形
5
- * 支持规则多边形(正多边形)和自定义多边形
6
- * 规则多边形通过边数和半径自动计算顶点,自定义多边形通过顶点数组定义
20
+ * 多边形类
21
+ *
22
+ * 绘制多边形图形,支持规则多边形和自定义多边形。
23
+ * 规则多边形通过边数和半径自动计算顶点,
24
+ * 自定义多边形通过顶点数组定义。
7
25
  *
8
26
  * @class jmPolygon
9
27
  * @extends jmPath
@@ -12,6 +30,27 @@ import {jmPath} from "../core/jmPath.js";
12
30
  * @param {number} [params.sides=3] 多边形边数(3-100)
13
31
  * @param {number} [params.radius=50] 多边形半径(像素)
14
32
  * @param {object} [params.center={x:0,y:0}] 多边形中心点坐标
33
+ *
34
+ * @example
35
+ * // 创建正六边形
36
+ * const hexagon = graph.createShape('polygon', {
37
+ * center: {x: 200, y: 200},
38
+ * sides: 6,
39
+ * radius: 50,
40
+ * style: { fill: '#ff0000', stroke: '#000' }
41
+ * });
42
+ *
43
+ * // 创建自定义多边形
44
+ * const polygon = graph.createShape('polygon', {
45
+ * points: [
46
+ * {x: 100, y: 100},
47
+ * {x: 200, y: 50},
48
+ * {x: 300, y: 100},
49
+ * {x: 250, y: 200},
50
+ * {x: 150, y: 200}
51
+ * ],
52
+ * style: { fill: '#00ff00' }
53
+ * });
15
54
  */
16
55
  export default class jmPolygon extends jmPath {
17
56
 
@@ -1,10 +1,42 @@
1
+ /**
2
+ * @fileoverview jmPrismatic 棱形类
3
+ *
4
+ * jmPrismatic 提供了棱形(菱形)图形的绘制功能。
5
+ * 棱形是一个四边形,其对角线互相垂直平分。
6
+ *
7
+ * 主要功能:
8
+ * - 棱形绘制
9
+ * - 支持填充和描边
10
+ * - 自定义宽高
11
+ *
12
+ * @module jmPrismatic
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmPath} from "../core/jmPath.js";
18
+
2
19
  /**
3
- * 画棱形
20
+ * 棱形类
21
+ *
22
+ * 绘制棱形(菱形)图形,继承自 jmPath。
23
+ * 棱形由中心点、宽度和高度定义。
4
24
  *
5
25
  * @class jmPrismatic
6
26
  * @extends jmPath
7
- * @param {object} params 参数 center=棱形中心点,width=棱形宽,height=棱形高
27
+ * @param {object} params 参数
28
+ * @param {object} [params.center] 棱形中心点 {x, y}
29
+ * @param {number} [params.width] 棱形宽度
30
+ * @param {number} [params.height] 棱形高度
31
+ *
32
+ * @example
33
+ * // 创建棱形
34
+ * const prismatic = graph.createShape('prismatic', {
35
+ * center: {x: 200, y: 200},
36
+ * width: 100,
37
+ * height: 80,
38
+ * style: { fill: '#ff0000', stroke: '#000' }
39
+ * });
8
40
  */
9
41
  export default class jmPrismatic extends jmPath {
10
42
 
@@ -1,14 +1,56 @@
1
+ /**
2
+ * @fileoverview jmRect 矩形类
3
+ *
4
+ * jmRect 提供了矩形图形的绘制功能,支持圆角矩形。
5
+ * 圆角支持四角独立设置,可以创建各种样式的矩形。
6
+ *
7
+ * 主要功能:
8
+ * - 矩形绘制
9
+ * - 圆角矩形(支持四角独立圆角)
10
+ * - 虚线边框
11
+ * - 填充和描边样式
12
+ *
13
+ * @module jmRect
14
+ * @author jmGraph Team
15
+ * @license MIT
16
+ */
17
+
1
18
  import {jmPath} from "../core/jmPath.js";
2
19
  import {jmArc} from './jmArc.js';
3
20
  import {jmLine} from './jmLine.js';
4
21
 
5
22
  /**
6
- * 画矩形
23
+ * 矩形类
24
+ *
25
+ * 绘制矩形图形,支持圆角和虚线边框。
26
+ * 圆角可以统一设置或四角独立设置。
7
27
  *
8
28
  * @class jmRect
9
29
  * @extends jmPath
10
- * @param {object} params 参数 position=矩形左上角顶点坐标,width=宽,height=高,radius=边角弧度
11
- * radius支持数字(四角相同)或对象 { topLeft, topRight, bottomRight, bottomLeft }
30
+ * @param {object} params 参数
31
+ * @param {object} [params.position] 矩形左上角顶点坐标 {x, y}
32
+ * @param {number} [params.width] 矩形宽度
33
+ * @param {number} [params.height] 矩形高度
34
+ * @param {number|object} [params.radius] 边角弧度,支持数字(四角相同)或对象 { topLeft, topRight, bottomRight, bottomLeft }
35
+ *
36
+ * @example
37
+ * // 创建普通矩形
38
+ * const rect = graph.createShape('rect', {
39
+ * position: {x: 100, y: 100},
40
+ * width: 200,
41
+ * height: 150,
42
+ * style: { fill: '#ff0000', stroke: '#000' }
43
+ * });
44
+ *
45
+ * // 创建圆角矩形
46
+ * const roundedRect = graph.createShape('rect', {
47
+ * position: {x: 100, y: 100},
48
+ * width: 200,
49
+ * height: 150,
50
+ * radius: 10, // 四角统一圆角
51
+ * // 或 radius: { topLeft: 5, topRight: 10, bottomRight: 15, bottomLeft: 20 }
52
+ * style: { fill: '#00ff00' }
53
+ * });
12
54
  */
13
55
  export default class jmRect extends jmPath {
14
56
 
@@ -1,11 +1,49 @@
1
+ /**
2
+ * @fileoverview jmResize 可缩放控件类
3
+ *
4
+ * jmResize 提供了可缩放的矩形控件功能。
5
+ * 在矩形四边和四角添加可拖拽的控制点,实现图形的缩放和调整。
6
+ *
7
+ * 主要功能:
8
+ * - 8个方向的控制点
9
+ * - 鼠标拖拽缩放
10
+ * - 支持旋转后的缩放
11
+ * - 自定义最小尺寸
12
+ *
13
+ * @module jmResize
14
+ * @author jmGraph Team
15
+ * @license MIT
16
+ */
17
+
1
18
  import {jmRect} from "./jmRect.js";
19
+
2
20
  /**
3
- * 可拉伸的缩放控件
4
- * 继承jmRect
5
- * 如果此控件加入到了当前控制的对象的子控件中,请在参数中加入movable:false,否则导致当前控件会偏离被控制的控件。
21
+ * 可缩放控件类
22
+ *
23
+ * 继承自 jmRect,在矩形四边和四角添加可拖拽的控制点。
24
+ * 用于实现图形的缩放和调整功能。
6
25
  *
7
26
  * @class jmResize
8
27
  * @extends jmRect
28
+ * @param {object} params 控件参数
29
+ * @param {boolean} [params.resizable=true] 是否可缩放
30
+ * @param {boolean} [params.movable] 是否可移动
31
+ * @param {number} [params.rectSize=8] 控制点大小
32
+ *
33
+ * @example
34
+ * // 创建可缩放矩形
35
+ * const resize = graph.createShape('resize', {
36
+ * position: {x: 100, y: 100},
37
+ * width: 200,
38
+ * height: 150,
39
+ * resizable: true,
40
+ * movable: true
41
+ * });
42
+ *
43
+ * // 监听缩放事件
44
+ * resize.on('resize', (px, py, dx, dy) => {
45
+ * console.log('缩放中', px, py, dx, dy);
46
+ * });
9
47
  */
10
48
  export default class jmResize extends jmRect {
11
49
 
@@ -315,7 +353,7 @@ export default class jmResize extends jmRect {
315
353
  break;
316
354
  }
317
355
  case 6: {
318
- r.position.x = (newLocation.width - r.height) / 2;
356
+ r.position.x = (newLocation.width - r.width) / 2;
319
357
  r.position.y = newLocation.height - r.height / 2;
320
358
  break;
321
359
  }
@@ -1,18 +1,52 @@
1
+ /**
2
+ * @fileoverview jmStar 星形类
3
+ *
4
+ * jmStar 提供了星形图形的绘制功能。
5
+ * 支持自定义顶点数和内外半径,创建各种星形图案。
6
+ *
7
+ * 主要功能:
8
+ * - 星形绘制
9
+ * - 自定义角数
10
+ * - 自定义内外半径
11
+ *
12
+ * @module jmStar
13
+ * @author jmGraph Team
14
+ * @license MIT
15
+ */
16
+
1
17
  import {jmPath} from "../core/jmPath.js";
2
18
 
3
19
  /**
4
- * 画星形
5
- * 支持自定义顶点数和内外半径,创建各种星形图案
6
- * 星形由交替的外半径和内半径顶点组成
20
+ * 星形类
21
+ *
22
+ * 绘制星形图形,支持自定义顶点数和内外半径。
23
+ * 星形由交替的外半径和内半径顶点组成。
7
24
  *
8
25
  * @class jmStar
9
26
  * @extends jmPath
10
27
  * @param {object} params 星形的参数
11
- * @param {array} [params.points] 自定义顶点数组,如果提供则忽略其他参数
12
28
  * @param {number} [params.points=5] 星形顶点数(角数,3-50)
13
29
  * @param {number} [params.radius=50] 星形外半径(从中心到尖角的距离)
14
30
  * @param {number} [params.innerRadius=25] 星形内半径(从中心到凹陷处的距离)
15
31
  * @param {object} [params.center={x:0,y:0}] 星形中心点坐标
32
+ *
33
+ * @example
34
+ * // 创建五角星
35
+ * const star = graph.createShape('star', {
36
+ * center: {x: 200, y: 200},
37
+ * points: 5,
38
+ * radius: 50,
39
+ * innerRadius: 25,
40
+ * style: { fill: '#ff0000', stroke: '#000' }
41
+ * });
42
+ *
43
+ * // 创建六角星
44
+ * const hexStar = graph.createShape('star', {
45
+ * center: {x: 200, y: 200},
46
+ * points: 6,
47
+ * radius: 60,
48
+ * innerRadius: 30
49
+ * });
16
50
  */
17
51
  export default class jmStar extends jmPath {
18
52