From 7e6789c8de16ab5ea15ef40b945e4bf76d6b53a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=BB=8E=E6=99=BA=E6=B4=B2?= <1543046129@qq.com> Date: Sat, 24 Apr 2021 20:48:54 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E5=A4=9A=E7=A7=8D=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=BB=93=E6=9E=84=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- demo/dataStruct/BinaryTree.js | 80 ++++++++------------------- demo/dataStruct/Graph.js | 8 +-- demo/dataStruct/RingArray.js | 74 +++++++++++++++++++++++++ demo/dataStruct/linkList.js | 19 ++++++- demo/demo.html | 5 +- dist/sv.js | 2 +- src/Common/util.ts | 3 +- src/Model/modelData.ts | 18 +++++- src/RegisteredShape/binaryTreeNode.ts | 2 +- src/RegisteredShape/linkListNode.ts | 2 +- src/RegisteredShape/twoCellNode.ts | 2 +- src/View/renderer.ts | 26 ++++++++- src/options.ts | 2 + 13 files changed, 171 insertions(+), 72 deletions(-) create mode 100644 demo/dataStruct/RingArray.js diff --git a/demo/dataStruct/BinaryTree.js b/demo/dataStruct/BinaryTree.js index 3404d22..e195896 100644 --- a/demo/dataStruct/BinaryTree.js +++ b/demo/dataStruct/BinaryTree.js @@ -43,6 +43,11 @@ class BinaryTree extends Engine { offset: 14, style: { fill: '#f08a5d' + }, + labelOptions: { + style: { + fill: '#000099' + } } } }, @@ -165,63 +170,26 @@ const BTree = function(container) { return{ engine: new BinaryTree(container), data: [ - // [ - // { id: 1, child: [2, 3], root: true, external: ['treeA', 'gear'] }, - // { id: 2, child: [null, 6] }, - // { id: 3, child: [5, 4] }, - // { id: 4, external: 'foo' }, - // { id: 5 }, - // { id: 6, external: 'bar', child: [null, 7] }, - // { id: 7 }, - // { id: 8, child: [9, 10], root: true }, - // { id: 9, child: [11, null] }, - // { id: 10 }, - // { id: 11 } - // ], - // [ - // { id: 1, child: [2, 3], root: true, external: 'treeA' }, - // { id: 2, external: 'gear' }, - // { id: 3, child: [5, 4] }, - // { id: 4, external: 'foo' }, - // { id: 5, child: [12, 13] }, - // { id: 12 }, { id: 13 } - // ] [ - { - "external": [ - "r", - "T1" - ], - "child": [ - 6385376, - 6385424 - ], - "id": 6385328, - "name": "T1", - "data": "Z", - "root": true - }, - { - "child": [ - 0, - 0 - ], - "id": 6385376, - "name": "T1.lchild", - "data": "A" - }, - { - "external": [ - "t" - ], - "child": [ - 0, - 0 - ], - "id": 6385424, - "name": "T1.rchild", - "data": "B" - } + { id: 1, child: [2, 3], root: true, external: ['treeA', 'gear'] }, + { id: 2, child: [null, 6] }, + { id: 3, child: [5, 4] }, + { id: 4, external: 'foo', child: [5, null] }, + { id: 5 }, + { id: 6, external: 'bar', child: [null, 7] }, + { id: 7 }, + { id: 8, child: [9, 10], root: true }, + { id: 9, child: [11, null] }, + { id: 10 }, + { id: 11 } + ], + [ + { id: 1, child: [2, 3], root: true, external: 'treeA' }, + { id: 2, external: 'gear' }, + { id: 3, child: [5, 4] }, + { id: 4, external: 'foo' }, + { id: 5, child: [12, 13] }, + { id: 12 }, { id: 13 } ] ] } diff --git a/demo/dataStruct/Graph.js b/demo/dataStruct/Graph.js index 279c061..37b27f0 100644 --- a/demo/dataStruct/Graph.js +++ b/demo/dataStruct/Graph.js @@ -41,11 +41,11 @@ class Graph extends Engine { radius = layoutOptions.radius, intervalAngle = 2 * Math.PI / nodes.length; - for (let i = 0; i < nodes.length; i++) { - let [x, y] = Vector.rotation(-intervalAngle * i, [0, -radius]); + for (let i = 0; i < nodes.length; i++) { + let [x, y] = Vector.rotation(-intervalAngle * i, [0, -radius]); - nodes[i].set({x, y}); - } + nodes[i].set({x, y}); + } } } diff --git a/demo/dataStruct/RingArray.js b/demo/dataStruct/RingArray.js new file mode 100644 index 0000000..4fe91f9 --- /dev/null +++ b/demo/dataStruct/RingArray.js @@ -0,0 +1,74 @@ + + + + + +class RingArray extends Engine { + defineOptions() { + return { + element: { + default: { + type: 'rect', + label: '[id]', + size: [60, 30], + style: { + stroke: '#333', + fill: '#95e1d3' + } + } + }, + pointer: { + external: { + offset: 8, + style: { + fill: '#f08a5d' + } + } + }, + interaction: { + dragNode: false + } + }; + } + + layout(elements) { + let arr = elements.default, + width = arr[0].get('size')[0], + radius = width * 1.1 / (2 * Math.sin(Math.PI / arr.length)), + intervalAngle = 2 * Math.PI / arr.length; + + for (let i = 0; i < arr.length; i++) { + let [x, y] = Vector.rotation(-intervalAngle * i, [0, radius]); + + arr[i].set({x, y}); + arr[i].set('rotation', intervalAngle * i); + } + } +} + + +const RA = function(container) { + return{ + engine: new RingArray(container), + data: [[ + { id: 1 }, + { id: 2 }, + { id: 3 }, + { id: 4 }, + { id: 5 }, + { id: 6 }, + { id: 7 }, + { id: 8 }, + { id: 9 }, + { id: 10 } + ], + [ + { id: 1 }, + { id: 2 }, + { id: 3 }, + { id: 6 }, + { id: 7 }, + { id: 8 } + ]] + } +}; \ No newline at end of file diff --git a/demo/dataStruct/linkList.js b/demo/dataStruct/linkList.js index cbe0656..1fa4959 100644 --- a/demo/dataStruct/linkList.js +++ b/demo/dataStruct/linkList.js @@ -33,6 +33,23 @@ class LinkList extends Engine { fill: '#333' } } + }, + loopNext: { + type: 'arc', + curveOffset: 50, + sourceAnchor: 1, + targetAnchor: 3, + style: { + stroke: '#333', + endArrow: { + path: G6.Arrow.triangle(6, 6, -2), + fill: '#333' + }, + startArrow: { + path: G6.Arrow.circle(2, -1), + fill: '#333' + } + } } }, pointer: { @@ -107,7 +124,7 @@ const LList = function(container) { { id: 2, next: 3 }, { id: 3, next: 4 }, { id: 4, next: 5 }, - { id: 5 }, + { id: 5, loopNext: 6 }, { id: 6, root: true, next: 7 }, { id: 7, next: 8 }, { id: 8, next: 4 }, diff --git a/demo/demo.html b/demo/demo.html index 401ac6c..ae2df7c 100644 --- a/demo/demo.html +++ b/demo/demo.html @@ -48,11 +48,12 @@ const Engine = SV.Engine, +