diff --git a/copyDist2Anyview.js b/copyDist2Anyview.js
index bd475e3..5550fb7 100644
--- a/copyDist2Anyview.js
+++ b/copyDist2Anyview.js
@@ -1,6 +1,6 @@
const fs = require('fs');
-const sourcePath = 'D:\\个人项目\\v\\StructV2\\dist\\sv.js';
-const targetPath = 'D:\\个人项目\\froend_student\\src\\pages\\student\\assets\\js\\sv.js'
+const sourcePath = 'E:\\研究生\\StructV2\\dist\\sv.js';
+const targetPath = 'E:\\研究生\\froend_student\\src\\pages\\student\\assets\\js\\sv.js'
function COPY(from, to) {
diff --git a/demo/Layouter/Force.js b/demo/Layouter/Force.js
new file mode 100644
index 0000000..92c264c
--- /dev/null
+++ b/demo/Layouter/Force.js
@@ -0,0 +1,68 @@
+
+
+
+SV.registerLayout('Force', {
+ defineOptions() {
+ return {
+ node: {
+ default: {
+ type: 'force-node',
+ label: '[data]',
+ size: 20,
+ labelOptions: {
+ style: { fontSize: 20 }
+ },
+ style: {
+ stroke: 'red',
+ fill: 'red'
+ }
+ }
+ },
+ link: {
+ next: {
+ type: 'line',
+ sourceAnchor: 0,
+ targetAnchor: 0,
+ style: {
+ stroke: '#333',
+ lineAppendWidth: 6,
+ cursor: 'pointer',
+ // endArrow: 'default',
+ startArrow: {
+ path: G6.Arrow.circle(2, -1),
+ fill: '#333'
+ }
+ }
+ }
+ },
+ marker: {
+ headExternal: {
+ type: 'pointer',
+ anchor: 3,
+ style: {
+ fill: '#f08a5d'
+ }
+ },
+ external: {
+ type: 'pointer',
+ anchor: 0,
+ style: {
+ fill: '#f08a5d'
+ }
+ }
+ },
+ indexLabel: {
+ index: { position: 'bottom' },
+ indexRight: { position: 'right' }
+ },
+ behavior: {
+ dragNode: true
+ }
+ };
+ },
+
+ layout(e) {
+
+ }
+});
+
diff --git a/demo/data.js b/demo/data.js
index 2804eef..9b9bd21 100644
--- a/demo/data.js
+++ b/demo/data.js
@@ -289,4 +289,140 @@ const SOURCES_DATA = [{
"isEnterFunction": false,
"isFirstDebug": false
}
+}, {
+ "force0": {
+ "data": [
+ {
+ "id": "0x617eb1",
+ "data": "A",
+ "next": "0x617eb2"
+ },
+ {
+ "id": "0x617eb2",
+ "data": "B",
+ "next": "0x617eb3"
+ },
+ {
+ "id": "0x617eb3",
+ "data": "C",
+ "next": "0x617eb5"
+ },
+ {
+ "id": "0x617eb5",
+ "data": "D",
+ "next": "0x617eb3"
+ },
+ {
+ "id": "0x617eb6",
+ "data": "D",
+ "next": "0x617eb5"
+ },
+ {
+ "id": "0x617eb7",
+ "data": "D",
+ "next": "0x617eb6"
+ },
+ {
+ "id": "0x617eb8",
+ "data": "D",
+ "next": "0x617eb7"
+ },
+ {
+ "id": "0x617eb9",
+ "data": "D",
+ "next": "0x617eb8"
+ },
+ {
+ "id": "0x617eba",
+ "data": "D",
+ "next": "0x617eb9"
+ },
+ {
+ "id": "0x617ebb",
+ "data": "D",
+ "next": "0x617eba"
+ },
+ {
+ "id": "0x617ebc",
+ "data": "D",
+ "next": "0x617ebb"
+ },
+ {
+ "id": "0x617ebd",
+ "data": "D",
+ "next": "0x617ebc"
+ },
+ {
+ "id": "0x617ebe",
+ "data": "D",
+ "next": "0x617ebd"
+ },
+ {
+ "id": "0x627ebe",
+ "data": "D",
+ "next": "0x617ebe"
+ },
+ {
+ "id": "0x637ebe",
+ "data": "D",
+ "next": "0x627ebe"
+ },
+ {
+ "id": "0x647ebe",
+ "data": "D",
+ "next": "0x637ebe"
+ },
+ {
+ "id": "0x657ebe",
+ "data": "D",
+ "next": "0x647ebe"
+ },
+ {
+ "id": "0x667ebe",
+ "data": "D",
+ "next": "0x657ebe"
+ },
+ {
+ "id": "0x677ebe",
+ "data": "D",
+ "next": "0x667ebe"
+ },
+ {
+ "id": "0x687ebe",
+ "data": "D",
+ "next": "0x677ebe"
+ },
+ {
+ "id": "0x697ebe",
+ "data": "D",
+ "next": "0x687ebe"
+ },
+ {
+ "id": "0x6a7ebe",
+ "data": "D",
+ "next": "0x697ebe"
+ },
+ {
+ "id": "0x6b7ebe",
+ "data": "D",
+ "next": "0x6a7ebe"
+ },
+ {
+ "id": "0x6c7ebe",
+ "data": "D",
+ "next": "0x6b7ebe"
+ },
+ {
+ "id": "0x6d7ebe",
+ "data": "X",
+ "next": "0x6c7ebe"
+ },
+ {
+ "id": "0x6e7ebe",
+ "data": "Y",
+ "next": "0x6d7ebe"
+ },
+ ],
+ "layouter": "Force"
+ }
}];
\ No newline at end of file
diff --git a/demo/demo.html b/demo/demo.html
index e4fbadd..a2a37f4 100644
--- a/demo/demo.html
+++ b/demo/demo.html
@@ -86,18 +86,24 @@
+