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,
+