sybotan преди 4 години
родител
ревизия
be0c2ebd19
променени са 100 файла, в които са добавени 1301 реда и са изтрити 597 реда
  1. 1 1
      docs/.vuepress/components/example/web/graph/Circle1.vue
  2. 1 1
      docs/.vuepress/components/example/web/graph/DrawLine1.vue
  3. 1 1
      docs/.vuepress/components/example/web/graph/DrawLine2.vue
  4. 1 1
      docs/.vuepress/components/example/web/graph/DrawPolyline1.vue
  5. 1 1
      docs/.vuepress/components/example/web/graph/DrawRect1.vue
  6. 2 2
      docs/.vuepress/components/example/web/graph/MapDemo.vue
  7. 2 2
      docs/.vuepress/components/example/web/graph/scene/Align.vue
  8. 2 2
      docs/.vuepress/components/example/web/graph/scene/ClockItem.vue
  9. 1 1
      docs/.vuepress/components/example/web/graph/scene/ImageItem.vue
  10. 2 2
      docs/.vuepress/components/example/web/graph/scene/PolylineItem.vue
  11. 3 3
      docs/.vuepress/components/example/web/graph/scene/SEditLine.vue
  12. 4 4
      docs/.vuepress/components/example/web/graph/scene/SImgTextItem.vue
  13. 3 3
      docs/.vuepress/components/example/web/graph/scene/TextItem.vue
  14. 4 4
      docs/.vuepress/components/example/web/graph/scene/Undo1.vue
  15. 1 1
      docs/.vuepress/components/example/web/graph/style/shadow.vue
  16. 0 568
      docs/.vuepress/components/example/web/graph/scene/SEditPolygon.vue
  17. 83 0
      docs/.vuepress/config.js
  18. BIN
      docs/.vuepress/public/assets/img/logo.png
  19. 5 0
      docs/.vuepress/shims-vue.d.ts
  20. 8 0
      docs/.vuepress/styles/palette.styl
  21. 12 0
      docs/README.md
  22. 1 0
      docs/dev/graph/README.md
  23. 1 0
      docs/dev/graph/big/README.md
  24. 0 0
      docs/dev/graph/big/divide.md
  25. 6 0
      docs/dev/graph/big/downloadFile.md
  26. BIN
      docs/dev/graph/big/img/equipLocation.png
  27. BIN
      docs/dev/graph/big/img/liucheng.png
  28. BIN
      docs/dev/graph/big/img/space.png
  29. 147 0
      docs/dev/graph/big/jsonFile.md
  30. 10 0
      docs/dev/graph/big/mapDemo.md
  31. 98 0
      docs/dev/graph/big/workLine.md
  32. 37 0
      docs/dev/graph/engine/README.md
  33. 184 0
      docs/dev/graph/engine/arrow.md
  34. 4 0
      docs/dev/graph/engine/clip.md
  35. 127 0
      docs/dev/graph/engine/composite.md
  36. 4 0
      docs/dev/graph/engine/custom-engine.md
  37. 49 0
      docs/dev/graph/engine/draw.md
  38. 89 0
      docs/dev/graph/engine/gradient.md
  39. 2 0
      docs/dev/graph/engine/image.md
  40. BIN
      docs/dev/graph/engine/img/basic-arrow.png
  41. BIN
      docs/dev/graph/engine/img/basic-jisuan.png
  42. BIN
      docs/dev/graph/engine/img/circle-arrow.png
  43. BIN
      docs/dev/graph/engine/img/circle-jisuan.png
  44. BIN
      docs/dev/graph/engine/img/copy.png
  45. BIN
      docs/dev/graph/engine/img/destination-atop.png
  46. BIN
      docs/dev/graph/engine/img/destination-in.png
  47. BIN
      docs/dev/graph/engine/img/destination-out.png
  48. BIN
      docs/dev/graph/engine/img/destination-over.png
  49. BIN
      docs/dev/graph/engine/img/diamond-arrow.png
  50. BIN
      docs/dev/graph/engine/img/diamond-jisuan.jpg
  51. BIN
      docs/dev/graph/engine/img/draw-engine.png
  52. BIN
      docs/dev/graph/engine/img/drawconstruction.png
  53. BIN
      docs/dev/graph/engine/img/gradient-attr1.png
  54. BIN
      docs/dev/graph/engine/img/gradient-attr2.png
  55. BIN
      docs/dev/graph/engine/img/gradient-construction.png
  56. BIN
      docs/dev/graph/engine/img/huabishixian.png
  57. BIN
      docs/dev/graph/engine/img/huashuajiegou.png
  58. BIN
      docs/dev/graph/engine/img/huizhijiegou.png
  59. BIN
      docs/dev/graph/engine/img/jianbianjiegou.png
  60. BIN
      docs/dev/graph/engine/img/lighter.png
  61. BIN
      docs/dev/graph/engine/img/line-gradient.png
  62. BIN
      docs/dev/graph/engine/img/line-gradient2.png
  63. BIN
      docs/dev/graph/engine/img/mutli-engine.png
  64. BIN
      docs/dev/graph/engine/img/radial-gradient.png
  65. BIN
      docs/dev/graph/engine/img/radial-gradient2.png
  66. BIN
      docs/dev/graph/engine/img/radial-gradient3.png
  67. BIN
      docs/dev/graph/engine/img/radial-gradient4.png
  68. BIN
      docs/dev/graph/engine/img/radial-gradient5.png
  69. BIN
      docs/dev/graph/engine/img/radial-gradient6.png
  70. BIN
      docs/dev/graph/engine/img/radial-gradient7.png
  71. BIN
      docs/dev/graph/engine/img/source-atop.png
  72. BIN
      docs/dev/graph/engine/img/source-in.png
  73. BIN
      docs/dev/graph/engine/img/source-out.png
  74. BIN
      docs/dev/graph/engine/img/source-over.png
  75. BIN
      docs/dev/graph/engine/img/square-arrow.png
  76. BIN
      docs/dev/graph/engine/img/square-jisuan.png
  77. BIN
      docs/dev/graph/engine/img/triangle-arrow.png
  78. BIN
      docs/dev/graph/engine/img/wenbenshixian.png
  79. BIN
      docs/dev/graph/engine/img/xor.png
  80. 93 0
      docs/dev/graph/engine/style.md
  81. 3 0
      docs/dev/graph/engine/text.md
  82. 4 0
      docs/dev/graph/engine/transform.md
  83. 3 0
      docs/dev/graph/feng-map/typeIdMap.md
  84. 58 0
      docs/dev/graph/index.js
  85. 11 0
      docs/dev/graph/scene/README.md
  86. 16 0
      docs/dev/graph/scene/align.md
  87. 1 0
      docs/dev/graph/scene/items/README.md
  88. 10 0
      docs/dev/graph/scene/items/clock.md
  89. 15 0
      docs/dev/graph/scene/items/editLine.md
  90. 17 0
      docs/dev/graph/scene/items/editPolygon.md
  91. 15 0
      docs/dev/graph/scene/items/editPolyline.md
  92. 10 0
      docs/dev/graph/scene/items/image.md
  93. 6 0
      docs/dev/graph/scene/items/imgText.md
  94. 10 0
      docs/dev/graph/scene/items/text.md
  95. 10 0
      docs/dev/graph/scene/undo.md
  96. 11 0
      docs/dev/graph/system-diagram/README.md
  97. BIN
      docs/dev/graph/system-diagram/img/factoryAndParser.png
  98. BIN
      docs/dev/graph/system-diagram/img/systemdiagram.png
  99. 112 0
      docs/dev/graph/system-diagram/json-file.md
  100. 0 0
      docs/public/assets/img/logo.png

+ 1 - 1
docs/.vuepress/components/example/web/graph/Circle1.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-    import {SCanvasView, SColor, SPainter, SRect, SLineCapStyle} from "@saga-web/draw/lib";
+    import {SCanvasView, SColor, SPainter, SRect, SLineCapStyle} from "@persagy-web/draw/lib";
 
     class TestView extends SCanvasView {
 

+ 1 - 1
docs/.vuepress/components/example/web/graph/DrawLine1.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-    import { SCanvasView, SColor, SPainter } from "@saga-web/draw/lib";
+    import { SCanvasView, SColor, SPainter } from "@persagy-web/draw/lib";
 
     class TestView extends SCanvasView {
 

+ 1 - 1
docs/.vuepress/components/example/web/graph/DrawLine2.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-    import { SCanvasView, SColor, SPainter } from "@saga-web/draw/lib";
+    import { SCanvasView, SColor, SPainter } from "@persagy-web/draw/lib";
 
     class TestView extends SCanvasView {
 

+ 1 - 1
docs/.vuepress/components/example/web/graph/DrawPolyline1.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-    import {SCanvasView, SColor, SPainter, SPoint} from "@saga-web/draw/lib";
+    import {SCanvasView, SColor, SPainter, SPoint} from "@persagy-web/draw/lib";
 
     class TestView extends SCanvasView {
         arr:SPoint[]=[new SPoint(10,10),new SPoint(10,40),new SPoint(30,30)]

+ 1 - 1
docs/.vuepress/components/example/web/graph/DrawRect1.vue

@@ -3,7 +3,7 @@
 </template>
 
 <script lang="ts">
-    import { SCanvasView, SColor, SPainter, SPoint, SRect, SSize } from "@saga-web/draw/lib";
+    import { SCanvasView, SColor, SPainter, SPoint, SRect, SSize } from "@persagy-web/draw/lib";
 
     class TestView extends SCanvasView {
 

+ 2 - 2
docs/.vuepress/components/example/web/graph/MapDemo.vue

@@ -7,8 +7,8 @@
 </template>
 
 <script>
-    import { SGraphScene, SGraphView } from "@saga-web/graph/lib";
-    import { SFloorParser } from "@saga-web/big/lib";
+    import { SGraphScene, SGraphView } from "@persagy-web/graph/lib";
+    import { SFloorParser } from "@persagy-web/big/lib";
     export default {
         name: "mapDemo",
         data(){

+ 2 - 2
docs/.vuepress/components/example/web/graph/scene/Align.vue

@@ -10,8 +10,8 @@
 </template>
 
 <script>
-    import {SGraphItem, SGraphScene, SGraphView, SGraphLayoutType} from "@saga-web/graph/lib";
-    import { SColor, SPainter, SRect } from "@saga-web/draw/lib";
+    import {SGraphItem, SGraphScene, SGraphView, SGraphLayoutType} from "@persagy-web/graph/lib";
+    import { SColor, SPainter, SRect } from "@persagy-web/draw/lib";
 
     class RectItem extends SGraphItem {
         width = 200;

+ 2 - 2
docs/.vuepress/components/example/web/graph/scene/ClockItem.vue

@@ -3,8 +3,8 @@
 </template>
 
 <script lang="ts">
-    import { SColor, SPainter, SRect } from "@saga-web/draw";
-    import { SGraphItem, SGraphScene, SGraphView } from "@saga-web/graph";
+    import { SColor, SPainter, SRect } from "@persagy-web/draw";
+    import { SGraphItem, SGraphScene, SGraphView } from "@persagy-web/graph";
 
     class ClockItem extends SGraphItem {
         /** 宽度 */

+ 1 - 1
docs/.vuepress/components/example/web/graph/scene/ImageItem.vue

@@ -10,7 +10,7 @@
 </template>
 
 <script lang="ts">
-    import { SGraphScene, SGraphView, SImageShowType, SImageItem } from "@saga-web/graph";
+    import { SGraphScene, SGraphView, SImageShowType, SImageItem } from "@persagy-web/graph";
 
     class SScene extends SGraphScene {
         imageItem: SImageItem = new SImageItem(null);

+ 2 - 2
docs/.vuepress/components/example/web/graph/scene/PolylineItem.vue

@@ -8,8 +8,8 @@
 </template>
 
 <script>
-    import {SGraphScene, SGraphView} from "@saga-web/graph/lib";
-    import {SPolylineItem,SItemStatus} from "@saga-web/big/lib";
+    import {SGraphScene, SGraphView} from "@persagy-web/graph/lib";
+    import {SPolylineItem,SItemStatus} from "@persagy-web/big/lib";
     export default {
         name: "editPolyline",
         data() {

+ 3 - 3
docs/.vuepress/components/example/web/graph/scene/SEditLine.vue

@@ -7,9 +7,9 @@
     </div>
 </template>
 <script>
-    import { SGraphScene, SGraphView } from "@saga-web/graph/";
-    import { SItemStatus } from "@saga-web/big/lib/enums/SItemStatus";
-    import { SLineItem } from "@saga-web/big/lib";
+    import { SGraphScene, SGraphView } from "@persagy-web/graph/";
+    import { SItemStatus } from "@persagy-web/big/lib/enums/SItemStatus";
+    import { SLineItem } from "@persagy-web/big/lib";
 
     export default {
         data() {

+ 4 - 4
docs/.vuepress/components/example/web/graph/scene/SImgTextItem.vue

@@ -7,10 +7,10 @@
 </template>
 
 <script lang="ts">
-    import {SGraphItem, SGraphScene, SGraphView, SObjectItem, STextItem, SImageItem, SAnchorItem} from "@saga-web/graph/lib";
-    import { SItemStatus }from "@saga-web/big/lib";
-    import {SColor, SPainter, SRect, SSize} from "@saga-web/draw/lib";
-    import {SMouseEvent} from "@saga-web/base/lib";
+    import {SGraphItem, SGraphScene, SGraphView, SObjectItem, STextItem, SImageItem, SAnchorItem} from "@persagy-web/graph/lib";
+    import { SItemStatus }from "@persagy-web/big/lib";
+    import {SColor, SPainter, SRect, SSize} from "@persagy-web/draw/lib";
+    import {SMouseEvent} from "@persagy-web/base/lib";
 
     /**
      * 图例item  icon

+ 3 - 3
docs/.vuepress/components/example/web/graph/scene/TextItem.vue

@@ -13,9 +13,9 @@
 </template>
 
 <script>
-	import { SUndoStack } from "@saga-web/base/lib";
-    import { SFont } from "@saga-web/draw/lib";
-	import { SGraphScene, SGraphView, SGraphPropertyCommand, SGraphMoveCommand, STextItem } from "@saga-web/graph/lib";
+	import { SUndoStack } from "@persagy-web/base/lib";
+    import { SFont } from "@persagy-web/draw/lib";
+	import { SGraphScene, SGraphView, SGraphPropertyCommand, SGraphMoveCommand, STextItem } from "@persagy-web/graph/lib";
 
 	class SScene extends SGraphScene {
 		undoStack = new SUndoStack();

+ 4 - 4
docs/.vuepress/components/example/web/graph/scene/Undo1.vue

@@ -11,10 +11,10 @@
 </template>
 
 <script lang="ts">
-    import { SMouseEvent, SUndoStack } from "@saga-web/base";
-    import { SColor, SPainter, SRect } from "@saga-web/draw";
-    import { SGraphItem, SGraphScene, SGraphView, SGraphAddCommand, SGraphMoveCommand } from "@saga-web/graph";
-    import {SPoint} from "@saga-web/draw/lib";
+    import { SMouseEvent, SUndoStack } from "@persagy-web/base";
+    import { SColor, SPainter, SRect } from "@persagy-web/draw";
+    import { SGraphItem, SGraphScene, SGraphView, SGraphAddCommand, SGraphMoveCommand } from "@persagy-web/graph";
+    import {SPoint} from "@persagy-web/draw/lib";
 
     class RectItem extends SGraphItem {
         width = 100;

+ 1 - 1
docs/.vuepress/components/example/web/graph/style/shadow.vue

@@ -9,7 +9,7 @@
 </template>
 
 <script>
-    import { SCanvasView, SColor, SPainter } from "@saga-web/draw/lib";
+    import { SCanvasView, SColor, SPainter } from "@persagy-web/draw/lib";
 
     class shadowView extends SCanvasView {
 

+ 0 - 568
docs/.vuepress/components/example/web/graph/scene/SEditPolygon.vue

@@ -1,568 +0,0 @@
-<template>
-  <div>
-    <el-button @click="show">展示</el-button>
-    <el-button @click="create">创建</el-button>
-    <el-button @click="edit">编辑</el-button>
-    <canvas id="editPolygon" width="800" height="400"  tabindex="0" />
-  </div>
-</template>
-<script lang='ts'>
-import { SGraphItem, SGraphView, SGraphScene } from "@saga-web/graph/";
-import { SMouseEvent } from "@saga-web/base/";
-import {
-  SColor,
-  SLineCapStyle,
-  SPainter,
-  SPath2D,
-  SPoint,
-  SPolygonUtil,
-  SRect,
-  SLine
-} from "@saga-web/draw";
-import { SRelationState } from "@saga-web/big/lib/enums/SRelationState";
-import { SMathUtil } from "@saga-web/big/lib/utils/SMathUtil";
-
-export default {
-  data() {
-    return {
-      scene: null,
-      view: null
-    };
-  },
-  mounted(): void {
-    this.view = new SGraphView("editPolygon");
-  },
-  methods: {
-    show() {
-      const scene = new SGraphScene();
-      this.view.scene = scene;
-      const spolygonItem = new SPolygonItem(null);
-      spolygonItem.setStatus = SRelationState.Normal;
-      const PointList: SPoint[] = [
-        new SPoint(0, 0),
-        new SPoint(50, 0),
-        new SPoint(50, 50),
-        new SPoint(0, 50)
-      ];
-      spolygonItem.setPointList = PointList;
-      scene.addItem(spolygonItem);
-      this.view.fitSceneToView();
-    },
-    create() {
-      const scene = new SGraphScene();
-      this.view.scene = scene;
-      const spolygonItem = new SPolygonItem(null);
-      spolygonItem.setStatus = SRelationState.Create;
-      scene.addItem(spolygonItem);
-      scene.grabItem = spolygonItem;
-      this.view.fitSceneToView();
-    },
-    edit() {
-      const scene = new SGraphScene();
-      this.view.scene = scene;
-      const spolygonItem = new SPolygonItem(null);
-      spolygonItem.setStatus = SRelationState.Edit;
-      const PointList: SPoint[] = [
-        new SPoint(0, 0),
-        new SPoint(50, 0),
-        new SPoint(50, 60),
-        new SPoint(0, 50)
-      ];
-      spolygonItem.setPointList = PointList;
-      scene.addItem(spolygonItem);
-      scene.grabItem = spolygonItem;
-      this.view.fitSceneToView();
-    }
-  }
-};
-
-/**
- * @author hanyaolong
- */
-
-class SPolygonItem extends SGraphItem {
-  /** X坐标最小值  */
-  private minX = Number.MAX_SAFE_INTEGER;
-  /** X坐标最大值  */
-  private maxX = Number.MIN_SAFE_INTEGER;
-  /** Y坐标最小值  */
-  private minY = Number.MAX_SAFE_INTEGER;
-  /** Y坐标最大值  */
-  private maxY = Number.MIN_SAFE_INTEGER;
-  /** 轮廓线坐标  */
-  private pointList: SPoint[] = [];
-  // 获取当前状态
-  get getPointList(): SPoint[] {
-    return this.pointList;
-  }
-  // 编辑当前状态
-  set setPointList(arr: SPoint[]) {
-    this.pointList = arr;
-    if (arr) {
-      this._xyzListToSPointList(arr);
-    }
-    this.update();
-  }
-  /** 是否闭合    */
-  closeFlag: boolean = false;
-  // 当前状态 1:show 2 创建中,3 编辑中
-  _status: number = SRelationState.Normal;
-  // 获取当前状态
-  get getStatus(): number {
-    return this._status;
-  }
-  // 编辑当前状态
-  set setStatus(value: number) {
-    this._status = value;
-    this.update();
-  }
-  /** 边框颜色 */
-  borderColor: SColor = new SColor("#0091FF");
-  /** 填充颜色 */
-  brushColor: SColor = new SColor("#1EE887");
-  /** border宽 只可输入像素宽*/
-  borderLine: number = 4;
-  /** 鼠标移动点  */
-  private lastPoint = new SPoint();
-  /** 当前鼠标获取顶点对应索引 */
-  private curIndex: number = -1;
-  /** 灵敏像素 */
-  private len: number = 15;
-  /** 场景像素  */
-  private scenceLen: number = 15;
-  /** 场景像素  */
-  private isAlt: boolean = false;
-
-  /**
-   * 构造函数
-   *
-   * @param parent    指向父对象
-   */
-
-  constructor(parent: SGraphItem | null) {
-    super(parent);
-  }
-
-  ///////////////以下为对pointList 数组的操作方法
-
-  /**
-   * 储存新的多边形顶点
-   * @param x   点位得x坐标
-   * @param y   点位得y坐标
-   * @param i   储存所在索引
-   * @return SPoint
-   */
-
-  insertPoint(x: number, y: number, i: number | null = null): SPoint {
-    const point = new SPoint(x, y);
-    if (i == null) {
-      this.pointList.push(point);
-    } else {
-      this.pointList.splice(i, 0, point);
-    }
-    this.update();
-    return point;
-  }
-
-  /**
-   * 删除点位
-   * @param i   删除点所在的索引
-   * @return SPoint
-   */
-
-  deletePoint(i: number | null = null): SPoint | null | undefined {
-    let point = null;
-    if (i != null) {
-      if (this.pointList.length - 1 >= i) {
-        point = this.pointList[i];
-        this.pointList.splice(i, 1);
-      } else {
-        point = null;
-      }
-    } else {
-      point = this.pointList.pop();
-    }
-    this.update();
-    return point;
-  }
-
-  /**
-   * 多边形顶点的移动位置
-   * @param x   点位得x坐标
-   * @param y   点位得y坐标
-   * @param i   点位得i坐标
-   * @return SPoint
-   */
-
-  movePoint(x: number, y: number, i: number): SPoint | null | undefined {
-    let point = null;
-    if (this.pointList.length) {
-      this.pointList[i].x = x;
-      this.pointList[i].y = y;
-    }
-    point = this.pointList[i];
-    return point;
-  }
-
-  /**
-   * 打印出多边形数组
-   * @return SPoint[]
-   */
-
-  PrintPointList(): SPoint[] {
-    return this.pointList;
-  }
-
-  ///////////////////////////
-
-  /**
-   * xyz数据转换为SPoint格式函数;获取外接矩阵参数
-   *
-   * @param arr    外层传入的数据PointList
-   */
-
-  protected _xyzListToSPointList(arr: SPoint[]): void {
-    if (arr.length) {
-      this.pointList = arr.map(it => {
-        let x = it.x,
-          y = it.y;
-        if (x < this.minX) {
-          this.minX = x;
-        }
-        if (y < this.minY) {
-          this.minY = y;
-        }
-        if (x > this.maxX) {
-          this.maxX = x;
-        }
-        if (y > this.maxY) {
-          this.maxY = y;
-        }
-        return new SPoint(x, y);
-      });
-    } else {
-      this.pointList = [];
-    }
-  }
-
-  ////////////以下为三种状态下的绘制多边形方法
-
-  /**
-   * 展示状态 --绘制多边形数组
-   * @param painter    绘制类
-   * @param pointList    绘制多边形数组
-   *
-   */
-
-  protected drawShowPolygon(painter: SPainter, pointList: SPoint[]): void {
-    painter.pen.lineCapStyle = SLineCapStyle.Square;
-    painter.pen.color = this.borderColor;
-    painter.pen.lineWidth = painter.toPx(this.borderLine);
-    painter.brush.color = this.brushColor;
-    painter.drawPolygon([...pointList]);
-  }
-
-  /**
-   *
-   * 创建状态 --绘制多边形数组
-   * @param painter    绘制类
-   * @param pointList    绘制多边形数组
-   *
-   */
-
-  protected drawCreatePolygon(painter: SPainter, pointList: SPoint[]): void {
-    painter.pen.lineCapStyle = SLineCapStyle.Square;
-    painter.pen.color = this.borderColor;
-    painter.pen.lineWidth = painter.toPx(4);
-    painter.drawPolyline(pointList);
-    if (this.lastPoint) {
-      painter.drawLine(pointList[pointList.length - 1], this.lastPoint);
-    }
-    painter.pen.color = SColor.Transparent;
-    painter.brush.color = this.brushColor;
-    painter.pen.lineWidth = painter.toPx(4);
-    painter.drawPolygon([...pointList, this.lastPoint]);
-  }
-
-  /**
-   *
-   * 编辑状态 --绘制多边形数组
-   *
-   * @param painter    绘制类
-   * @param pointList    绘制多边形数组
-   *
-   * */
-
-  protected drawEditPolygon(painter: SPainter, pointList: SPoint[]): void {
-    // 展示多边形
-    this.drawShowPolygon(painter, pointList);
-    // 绘制顶点块
-    pointList.forEach((item, index) => {
-      painter.drawCircle(item.x, item.y, painter.toPx(8));
-    });
-  }
-
-  ////////////////////////////////
-
-  /**
-   * 编辑状态操作多边形数组
-   *
-   * @param event    鼠标事件
-   *
-   *
-   * */
-
-  protected editPolygonPoint(event: SMouseEvent): void {
-    //  判断是否为删除状态 isAlt = true为删除状态
-    if (this.isAlt) {
-      // 1 判断是否点击在多边形顶点
-      let lenIndex = -1; // 当前点击到的点位索引;
-      let curenLen = this.scenceLen; // 当前的灵敏度
-      this.pointList.forEach((item, index) => {
-        let dis = SMathUtil.pointDistance(event.x, event.y, item.x, item.y);
-        if (dis < curenLen) {
-          curenLen = dis;
-          lenIndex = index;
-        }
-      });
-      // 若点击到,对该索引对应的点做删除
-      if (lenIndex != -1) {
-        if (this.pointList.length <= 3) {
-          return;
-        }
-        this.deletePoint(lenIndex);
-      }
-    } else {
-      // 1 判断是否点击在多边形顶点
-      this.curIndex = -1;
-      let lenIndex = -1; // 当前点击到的点位索引;
-      let curenLen = this.scenceLen; // 当前的灵敏度
-      this.pointList.forEach((item, index) => {
-        let dis = SMathUtil.pointDistance(event.x, event.y, item.x, item.y);
-        if (dis < curenLen) {
-          curenLen = dis;
-          lenIndex = index;
-        }
-      });
-      this.curIndex = lenIndex;
-
-      // 2判断是否点击在多边形得边上
-      if (-1 == lenIndex) {
-        let len = SMathUtil.pointToLine(
-            new SPoint(event.x, event.y),
-            new SLine(this.pointList[0], this.pointList[1])
-          ),
-          index = 0;
-        if (this.pointList.length > 2) {
-          for (let i = 1; i < this.pointList.length; i++) {
-            let dis = SMathUtil.pointToLine(
-              new SPoint(event.x, event.y),
-              new SLine(this.pointList[i], this.pointList[i + 1])
-            );
-            if (i + 1 == this.pointList.length) {
-              dis = SMathUtil.pointToLine(
-                new SPoint(event.x, event.y),
-                new SLine(this.pointList[i], this.pointList[0])
-              );
-            }
-            if (dis.MinDis < len.MinDis) {
-              len = dis;
-              index = i;
-            }
-          }
-        }
-        // 如果再线上则为新增点
-        if (len.Point) {
-          if (len.MinDis <= this.scenceLen) {
-            this.pointList.splice(index + 1, 0, len.Point);
-          }
-        }
-      }
-      // 刷新视图
-      this.update();
-    }
-  }
-
-  ///////////////////////////////以下为鼠标事件
-
-  /**
-   * 鼠标双击事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onDoubleClick(event: SMouseEvent): boolean {
-    // 如果位show状态 双击改对象则需改为编辑状态
-    if (SRelationState.Normal == this._status) {
-      this._status = SRelationState.Edit;
-    } else if (SRelationState.Edit == this._status) {
-      this._status = SRelationState.Normal;
-    }
-    this.update();
-    return true;
-  } // Function onDoubleClick()
-
-  /**
-   * 键盘事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onKeyDown(event: KeyboardEvent): boolean {
-    console.log(event);
-    if (this._status == SRelationState.Normal) {
-      return false;
-    } else if (this._status == SRelationState.Create) {
-      if (event.code == "Enter") {
-        this._status = SRelationState.Normal;
-      }
-    } else if (this._status == SRelationState.Edit) {
-      if (event.key == "Alt") {
-        this.isAlt = true;
-      }
-    } else {
-    }
-    this.update();
-    return true;
-  } // Function onKeyDown()
-
-  /**
-   * 键盘键抬起事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-  onKeyUp(event: KeyboardEvent): boolean {
-    if (this._status == SRelationState.Edit) {
-      if (event.key == "Alt") {
-        this.isAlt = false;
-      }
-    }
-    this.update();
-    return true;
-  } // Function onKeyUp()
-
-  /**
-   * 鼠标按下事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-  onMouseDown(event: SMouseEvent): boolean {
-    console.log("aaaaaa");
-    // 如果状态为编辑状态则添加点
-    if (this._status == SRelationState.Create) {
-      // 新增顶点
-      this.insertPoint(event.x, event.y);
-    } else if (this._status == SRelationState.Edit) {
-      // 对多边形数组做编辑操作
-      this.editPolygonPoint(event);
-    }
-    return true;
-  } // Function onMouseDown()
-
-  /**
-   * 鼠标移入事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-  onMouseEnter(event: SMouseEvent): boolean {
-    return true;
-  } // Function onMouseEnter()
-
-  /**
-   * 鼠标移出事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onMouseLeave(event: SMouseEvent): boolean {
-    return true;
-  } // Function onMouseLeave()
-
-  /**
-   * 鼠标移动事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onMouseMove(event: SMouseEvent): boolean {
-    if (this._status == SRelationState.Create) {
-      this.lastPoint.x = event.x;
-      this.lastPoint.y = event.y;
-    } else if (this._status == SRelationState.Edit) {
-      if (-1 != this.curIndex) {
-        this.pointList[this.curIndex].x = event.x;
-        this.pointList[this.curIndex].y = event.y;
-      }
-    }
-    this.update();
-    return true;
-  } // Function onMouseMove()
-
-  /**
-   * 鼠标抬起事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onMouseUp(event: SMouseEvent): boolean {
-    if (this._status == SRelationState.Edit) {
-      this.curIndex = -1;
-    }
-    return true;
-  } // Function onMouseUp()
-
-  /**
-   * 适配事件
-   *
-   * @param	event         事件参数
-   * @return	boolean
-   */
-
-  onResize(event: SMouseEvent): boolean {
-    return true;
-  } // Function onResize()
-
-  /**
-   * Item对象边界区域
-   *
-   * @return SRect
-   */
-  boundingRect(): SRect {
-    return new SRect(
-      this.minX,
-      this.minY,
-      this.maxX - this.minX,
-      this.maxY - this.minY
-    );
-  } // Function boundingRect()
-
-  /**
-   * Item绘制操作
-   *
-   * @param   painter       painter对象
-   */
-
-  onDraw(painter: SPainter): void {
-    this.scenceLen = painter.toPx(this.len);
-    // 当状态为展示状态
-    if (this._status == SRelationState.Normal) {
-      // 闭合多边形
-      this.drawShowPolygon(painter, this.pointList);
-    } else if (this._status == SRelationState.Create) {
-      // 创建状态
-      this.drawCreatePolygon(painter, this.pointList);
-    } else {
-      // 编辑状态
-      this.drawEditPolygon(painter, this.pointList);
-    }
-  } // Function onDraw()
-}
-</script>

+ 83 - 0
docs/.vuepress/config.js

@@ -0,0 +1,83 @@
+const setupContent = require("../setup/index");
+const graphContent = require("../dev/graph/index");
+
+module.exports = {
+    title: "数字化交付开发文档",
+    description: "上格云数字化交付开发文档",
+    base: "/doc/web/",
+    plugins: [
+        "@vuepress/last-updated",
+        "plugin-back-to-top",
+        [
+            'vuepress-plugin-typescript',
+            {
+                tsLoaderOptions: {
+                },
+            },
+        ],
+        [
+            'vuepress-plugin-mathjax',
+            {
+                target: 'svg',
+                macros: {
+                    '*': '\\times',
+                },
+            },
+        ],
+    ],
+    markdown: {
+        lineNumbers: true
+    },
+    themeConfig: {
+        logo: "/assets/img/logo.png",
+        nav: [
+            {text: "首页", link: "/"},
+            {
+                text: "安装配置",
+                items: [
+                    {
+                        text: "开发环境",
+                        items: [
+                            {text: "IDEA", link: "/setup/ide/idea"},
+                            {text: "VS Code", link: "/setup/ide/vscode"},
+                            {text: "Node.js", link: "/setup/ide/nodejs"},
+                        ]
+                    },
+                    {
+                        text: "服务器",
+                        items: [
+                            {text: "Nginx", link: "/setup/server/nginx"},
+                            {text: "Tomcat", link: "/setup/server/tomcat"}
+                        ]
+                    },
+                ]
+            },
+            {
+                text: "开发文档",
+                items: [
+                    {
+                        text: "引擎",
+                        items: [
+                            {text: "图形引擎", link: "/dev/graph/engine/"},
+                            {text: "场景管理", link: "/dev/graph/scene/"},
+                            {text: "建筑信息", link: "/dev/graph/big"}
+                        ]
+                    },
+                ]
+            },
+            {
+                text: "API参考",
+                items: [
+                    { text: "图形引擎", link: "http://adm.sagacloud.cn:8080/api/web/graph/" },
+                    { text: "建筑信息图", link: "http://adm.sagacloud.cn:8080/api/web/big/" }
+                ]
+            }
+        ],
+        displayAllHeaders: true,
+        sidebarDepth: 1,
+        sidebar: {
+            "/setup/" : setupContent,
+            "/dev/graph/": graphContent
+        }
+    }
+};

BIN
docs/.vuepress/public/assets/img/logo.png


+ 5 - 0
docs/.vuepress/shims-vue.d.ts

@@ -0,0 +1,5 @@
+// .vuepress/shims-vue.d.ts
+declare module '*.vue' {
+    import Vue from 'vue'
+    export default Vue
+}

+ 8 - 0
docs/.vuepress/styles/palette.styl

@@ -0,0 +1,8 @@
+body{
+  //user-select :none;
+}
+.theme-default-content:not(.custom),
+.page-edit,
+.page-nav{
+  max-width: 100%;
+}

+ 12 - 0
docs/README.md

@@ -0,0 +1,12 @@
+---
+home: true
+heroImage: /assets/img/logo.png
+heroText: 上格云
+tagline: 上格云 Web 组件开发文档
+actionText: 快速上手 →
+actionLink: /zh/guide/
+
+footer: MIT Licensed | Copyright © 2016-present 北京上格云技术有限公司
+---
+
+# 参考文档

+ 1 - 0
docs/dev/graph/README.md

@@ -0,0 +1 @@
+# 图形引擎

+ 1 - 0
docs/dev/graph/big/README.md

@@ -0,0 +1 @@
+# 楼层平面图

+ 0 - 0
docs/dev/graph/big/divide.md


+ 6 - 0
docs/dev/graph/big/downloadFile.md

@@ -0,0 +1,6 @@
+
+## 手工下载楼层底图文件
+
+手工下载地址例:[http://adm.sagacloud.cn/image-service/common/file_get?systemId=revit&key=Fl11010500011b85b9eeff8211e8b8b087ac5144d0ef20191108102222bim.jsonz](http://adm.sagacloud.cn/image-service/common/file_get?systemId=revit&key=Fl11010500011b85b9eeff8211e8b8b087ac5144d0ef20191108102222bim.jsonz)
+
+下载后为无后缀压缩文件,直接打开是乱码,需手工添加zip后缀并解压方可得到json文件

BIN
docs/dev/graph/big/img/equipLocation.png


BIN
docs/dev/graph/big/img/liucheng.png


BIN
docs/dev/graph/big/img/space.png


+ 147 - 0
docs/dev/graph/big/jsonFile.md

@@ -0,0 +1,147 @@
+
+## json数据格式
+
+### 整体数据格式
+
+```
+    {
+        EntityList:[
+            Elements:{                          // 底图展示所需数据
+                Columns:[],                     // 所有柱子数据
+                Doors:[],                       // 所有门数据
+                Spaces:[],                      // 所有空间数据
+                VirtualWalls:[],                // 所有虚拟墙数据
+                Walls:[],                       // 所有墙数据
+                Windows:[],                     // 所有窗户数据
+            },
+            MBIName:'',
+            ModelId:'',
+            PlanName:''
+        ]
+    }
+```
+
+### 柱子具体数据内容
+
+```
+    Columns:[
+        {
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            RoomBoundary: '',                   // 房间边界
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            SourceId: '',                       // 对应Revit模型id
+        },
+        ...
+    ]
+```
+
+### 门具体数据
+
+```
+    Doors:[
+        {
+            FaceDirection: {X:0,Y:0,Z:0},       // 面朝方向
+            HandDirection: {X:0,Y:0,Z:0},       // 把手方向
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            Owner: '',                          // 拥有者的RevitId
+            SourceId: '',                       // 对应Revit模型id
+            Thick: 200,                         // 厚度
+            WallId: '',                         // 所属墙
+            Width: 200,                         // 宽度
+        },
+        ...
+    ]
+```
+
+### 空间具体数据
+
+```
+    Spaces:[
+        {
+            BoundarySegments: [[''],...],       // 轮廓线段
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            SourceId: '',                       // 对应Revit模型id
+            Tag: '',                            // 补充信息
+            Height: 200,                        // 高度
+        },
+        ...
+    ]
+```
+
+### 虚拟墙具体数据
+
+```
+    VirtualWalls:[
+        {
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            SourceId: '',                       // 对应Revit模型id
+        },
+        ...
+    ]
+```
+
+### 墙具体数据
+
+```
+    Walls:[
+        {
+            LevelId: '',                        // 层id
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            SourceId: '',                       // 对应Revit模型id
+            Tag: '',                            // 补充信息
+            Width: 200,                         // 厚度
+        },
+        ...
+    ]
+```
+
+### 窗户具体数据
+
+```
+    Windows:[
+        {
+            Location: {X:0,Y:0,Z:0},            // 位置
+            ModelId: '',                        // 模型id
+            Name: '',                           // 名称
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            Owner: '',                          // 拥有者的RevitId
+            SourceId: '',                       // 对应Revit模型id
+            WallId: '',                         // 所属墙
+            Width: 200,                         // 宽度
+            Thick: 200,                         // 厚度
+        },
+        ...
+    ]
+```

+ 10 - 0
docs/dev/graph/big/mapDemo.md

@@ -0,0 +1,10 @@
+# 可编辑直线示例
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-MapDemo/>
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/mapDemo.vue
+:::

+ 98 - 0
docs/dev/graph/big/workLine.md

@@ -0,0 +1,98 @@
+## 下载-解析-生成 过程
+
+### 工作流程图
+
+![工作流程图](./img/liucheng.png)
+
+### 下载底图数据
+
+#### 方式1 通过楼层对象floormap信息点,直接从文件服务器获取压缩数据
+
+引擎中已封装好函数loadUrl,直接传入文件服务器路径即可;并且会将压缩数据自动解压
+
+```
+loadUrl(url: string): Promise<void> {}
+```
+
+#### 方式2 通过模型后台接口 /base-graph/query 传入模型id 直接获取未压缩数据
+引擎中已封装好函数getFloorData,直接传入模型id,url为接口地址
+
+```
+getFloorData(url: string, data: { ModelId: string }) {}
+```
+
+
+### 下载设备,业务空间数据
+
+下载设备,业务空间等的数据均需要另走查询对象接口
+
+如设备数据
+
+```
+    Equip:{
+        ...
+        BIMLocation:'0,0,0',                    // 如果设备有位置,则会在设备对象中存在此数据
+    }
+```    
+
+根据此坐标生成设备位置
+
+![工作流程图](./img/equipLocation.png)
+
+业务空间数据
+```
+    Space:{
+        ...
+        OutLine: [                              
+            [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ]
+        ],                                      // 轮廓线
+    }
+```
+
+根据轮廓线生成业务空间
+
+![工作流程图](./img/space.png) 
+
+### 解析
+引擎中会读取下载好的数据,按数据将不同的对象分发到引擎中各个添加对象的方法中
+
+```
+private addBaseMapItem(data: FloorData): void {
+        if (data.Walls) {
+            data.Walls.forEach((t: Wall): void => {
+                this.addWall(t);
+            });
+        }
+        if (data.Columns) {
+            data.Columns.forEach((t: Column): void => {
+                this.addColumn(t);
+            });
+        }
+        if (data.Windows) {
+            data.Windows.forEach((t: Casement): void => {
+                this.addCasement(t);
+            });
+        }
+        if (data.VirtualWalls) {
+            data.VirtualWalls.forEach((t: VirtualWall): void => {
+                this.addVirtualWall(t);
+            });
+        }
+        if (data.Doors) {
+            data.Doors.forEach((t: Door): void => {
+                this.addDoor(t);
+            });
+        }
+        if (data.Spaces) {
+            data.Spaces.forEach((t: Space): void => {
+                this.addSpace(t);
+            });
+        }
+    } // Function addBaseMapItem()
+```
+
+### 生成
+当视图监听到需要刷新时,就会触发update()方法,刷新视图,用户就可以在页面中看到相应的楼层平面图了

+ 37 - 0
docs/dev/graph/engine/README.md

@@ -0,0 +1,37 @@
+# 绘图引擎
+
+1.引擎基本结构
+
+![绘图引擎结构](./img/draw-engine.png)
+
+多引擎结构
+
+![多引擎结构](./img/mutli-engine.png)
+
+绘制结构
+
+![绘制结构](./img/huizhijiegou.png)
+
+2.绘制操作,特殊说明:path/image/text;画笔/画刷;字体/字号/对齐方式;案例:线/圆/矩形/多边形/饼图(实现)/椭圆/圆角矩形;
+
+画刷实现结构
+
+![画刷实现结构](./img/huashuajiegou.png)
+
+画笔实现结构
+
+![画笔实现结构](./img/huabishixian.png)
+
+文本实现结构
+
+![文本实现结构](./img/wenbenshixian.png)
+
+3.颜色与过渡
+
+4.矩阵变换
+
+5.融合效果
+
+6.特效:投影/发光/倒影/a过渡/等
+
+7.实现自定义绘图引擎:如image绘图引擎

+ 184 - 0
docs/dev/graph/engine/arrow.md

@@ -0,0 +1,184 @@
+# 绘图指令-绘制带有末端样式的线段
+
+## 函数入参
+
+传入线段和末端样式style{begin?:SArrowStyleType,end?:SArrowStyleType}
+
+drawArrowLine(line: SLine, style?: SArrow):void
+
+传入线段的两个点和末端样式
+
+drawArrowLine(p1: SPoint, p2: SPoint, style?: SArrow): void;
+
+传入线段的两个点的坐标值和末端样式
+
+drawArrowLine(x1: number,y1: number,x2: number,y2: number,style?: SArrow): void;
+
+## 类型
+
+### 无
+
+不绘制任意箭头
+
+### 标准箭头
+
+绘制如下类型箭头
+
+![标准箭头](./img/basic-arrow.png)
+
+#### 画法描述
+
+1.将坐标系平移至线段终点;
+
+2.计算出线段与x轴夹角,并将坐标系旋转至x轴与线段重合;
+
+3.设定箭头夹角为θ=π/2,末端三角形边长d=5,则箭头上下端与x轴夹角为π/4,根据此角度与边长计算上下端坐标;
+
+4.直接绘制原点与上下端连线的折线图形即可;
+
+![标准箭头计算](./img/basic-jisuan.png)
+
+```
+// 定义箭头长度
+const d = 5;
+// 箭头横坐标
+const x1 = d * Math.cos(Math.PI / 4);
+// 箭头纵坐标
+const y1 = d * Math.sin(Math.PI / 4);
+// 线段与x轴夹角
+const fo = Math.atan(line.dy / line.dx);
+const ang = line.dx >= 0 ? fo : fo + Math.PI;
+this.save();
+this.translate(line.x2, line.y2);
+this.rotate(ang);
+this.engine.drawPolyline([
+    new SPoint(-x1, y1),
+    new SPoint(0, 0),
+    new SPoint(-x1, -y1)
+]);
+this.restore();
+```
+
+### 三角形
+
+绘制如下类型箭头,通过画笔颜色和画刷颜色控制笔触颜色和填充颜色
+
+![三角形箭头](./img/triangle-arrow.png)
+
+#### 画法描述
+
+坐标点位置计算与标准箭头类似,只是箭头夹角θ=π/6,且最后绘制图形为多边形
+
+```
+// 定义箭头长度
+const d = 5;
+// 箭头横坐标
+const x1 = d * Math.cos(Math.PI / 4);
+// 箭头纵坐标
+const y1 = d * Math.sin(Math.PI / 4);
+// 线段与x轴夹角
+const fo = Math.atan(line.dy / line.dx);
+const ang = line.dx >= 0 ? fo : fo + Math.PI;
+this.save();
+this.translate(line.x2, line.y2);
+this.rotate(ang);
+this.engine.drawPolygon([
+    new SPoint(-x1, y1),
+    new SPoint(0, 0),
+    new SPoint(-x1, -y1)
+]);
+this.restore();
+```
+
+### 圆
+
+绘制如下类型箭头,通过画笔颜色和画刷颜色控制笔触颜色和填充颜色
+
+![圆形箭头](./img/circle-arrow.png)
+
+#### 画法描述
+
+1.将坐标系平移至线段终点;
+
+2.设定圆半径r=5,计算圆心坐标为(-r,0),绘制圆形即可
+
+![圆形计算](./img/circle-jisuan.png)
+
+```
+// 定义箭头长度
+const d = 5;
+// 线段与x轴夹角
+const fo = Math.atan(line.dy / line.dx);
+const ang = line.dx >= 0 ? fo : fo + Math.PI;
+this.save();
+this.translate(line.x2, line.y2);
+this.rotate(ang);
+this.engine.drawCircle(-d / 2, 0, d / 2);
+this.restore();
+```
+
+### 菱形
+
+绘制如下类型箭头,通过画笔颜色和画刷颜色控制笔触颜色和填充颜色
+
+![菱形箭头](./img/diamond-arrow.png)
+
+#### 画法描述
+
+坐标点位置计算与标准箭头类似,只需多计算一个点,绘制图形为多边形
+
+![菱形计算](./img/diamond-jisuan.jpg)
+
+```
+// 定义箭头长度
+const d = 5;
+// 箭头横坐标
+const x1 = d * Math.cos(Math.PI / 4);
+// 箭头纵坐标
+const y1 = d * Math.sin(Math.PI / 4);
+// 线段与x轴夹角
+const fo = Math.atan(line.dy / line.dx);
+const ang = line.dx >= 0 ? fo : fo + Math.PI;
+this.save();
+this.translate(line.x2, line.y2);
+this.rotate(ang);
+this.engine.drawPolygon([
+    new SPoint(-x1, y1),
+    new SPoint(0, 0),
+    new SPoint(-x1, -y1),
+    new SPoint(-Math.sqrt(2) * d, 0)
+]);
+this.restore();
+```
+
+### 方形
+
+绘制如下类型箭头,通过画笔颜色和画刷颜色控制笔触颜色和填充颜色
+
+![方形箭头](./img/square-arrow.png)
+
+#### 画法描述
+
+1.将坐标系平移至线段终点;
+
+2.可以计算四个顶点坐标,绘制多边形;亦可移至计算出的原点,直接绘制矩形;
+
+![方形计算](./img/square-jisuan.png)
+
+```
+// 定义箭头长度
+const d = 5;
+// 线段与x轴夹角
+const fo = Math.atan(line.dy / line.dx);
+const ang = line.dx >= 0 ? fo : fo + Math.PI;
+this.save();
+this.translate(line.x2, line.y2);
+this.rotate(ang);
+this.engine.drawPolygon([
+    new SPoint(-d, d / 2),
+    new SPoint(0, d / 2),
+    new SPoint(0, -d / 2),
+    new SPoint(-d, -d / 2)
+]);
+this.restore();
+```

+ 4 - 0
docs/dev/graph/engine/clip.md

@@ -0,0 +1,4 @@
+# 裁剪
+::: details 目录
+[[toc]]
+:::

+ 127 - 0
docs/dev/graph/engine/composite.md

@@ -0,0 +1,127 @@
+# 融合
+
+通过canvas的属性globalCompositeOperation,设置多个图形之间的绘制方式
+
+源图像 = 您打算放置到画布上的绘图。
+
+目标图像 = 您已经放置在画布上的绘图
+
+#### 方式1 source-over
+
+默认。在目标图像上显示源图像。
+
+![融合1](./img/source-over.png) 
+
+```
+painter.composite = SCompositeType.SourceOver
+```
+
+#### 方式2 source-atop
+
+在目标图像顶部显示源图像。源图像位于目标图像之外的部分是不可见的。
+
+![融合2](./img/source-atop.png)
+
+```
+painter.composite = SCompositeType.SourceAtop
+```
+
+
+#### 方式3 source-in
+
+在目标图像中显示源图像。只有目标图像内的源图像部分会显示,目标图像是透明的。
+
+![融合3](./img/source-in.png)
+
+```
+painter.composite = SCompositeType.SourceIn
+```
+
+
+#### 方式4 source-out
+
+在目标图像之外显示源图像。只会显示目标图像之外源图像部分,目标图像是透明的。
+
+![融合4](./img/source-out.png)
+
+```
+painter.composite = SCompositeType.SourceOut
+```
+
+
+#### 方式5 destination-over
+
+在源图像上方显示目标图像。
+
+![融合5](./img/destination-over.png)
+
+```
+painter.composite = SCompositeType.DestinationOver
+```
+
+
+#### 方式6 destination-atop
+
+在源图像顶部显示目标图像。源图像之外的目标图像部分不会被显示。
+
+![融合6](./img/destination-atop.png)
+
+```
+painter.composite = SCompositeType.DestinationAtop
+```
+
+
+#### 方式7 destination-in
+
+在源图像中显示目标图像。只有源图像内的目标图像部分会被显示,源图像是透明的。
+
+![融合7](./img/destination-in.png)
+
+```
+painter.composite = SCompositeType.DestinationIn
+```
+
+
+#### 方式8 destination-out
+
+在源图像外显示目标图像。只有源图像外的目标图像部分会被显示,源图像是透明的。
+
+![融合8](./img/destination-out.png)
+
+```
+painter.composite = SCompositeType.DestinationOut
+```
+
+
+#### 方式9 lighter
+
+显示源图像 + 目标图像。
+
+![融合9](./img/lighter.png)
+
+```
+painter.composite = SCompositeType.Lighter
+```
+
+
+#### 方式10 copy
+
+显示源图像。忽略目标图像。
+
+![融合10](./img/copy.png)
+
+```
+painter.composite = SCompositeType.Copy
+```
+
+
+#### 方式11 xor
+
+使用异或操作对源图像与目标图像进行组合。
+
+![融合11](./img/xor.png)
+
+```
+painter.composite = SCompositeType.Xor
+```
+

+ 4 - 0
docs/dev/graph/engine/custom-engine.md

@@ -0,0 +1,4 @@
+# 自定义引擎
+::: details 目录
+[[toc]]
+:::

+ 49 - 0
docs/dev/graph/engine/draw.md

@@ -0,0 +1,49 @@
+# 绘制形状
+::: details 目录
+[[toc]]
+:::
+
+## 直线
+
+<example-graph-DrawLine1 /> 
+
+::: details 查看代码
+
+<<< @/docs/.vuepress/components/example/graph/DrawLine1.vue
+
+:::
+
+## 折线
+
+<example-graph-DrawPolyline1 /> 
+
+::: details 查看代码
+
+<<< @/docs/.vuepress/components/example/graph/DrawPolyline1.vue
+
+:::
+
+## 矩形
+
+<example-graph-DrawRect1 /> 
+
+::: details 查看代码
+
+<<< @/docs/.vuepress/components/example/graph/DrawRect1.vue
+
+:::
+
+## 圆
+
+<example-graph-Circle1 /> 
+
+::: details 查看代码
+
+<<< @/docs/.vuepress/components/example/graph/Circle1.vue
+
+
+## 椭圆
+
+## 多边形
+
+## 路径

+ 89 - 0
docs/dev/graph/engine/gradient.md

@@ -0,0 +1,89 @@
+# 渐变
+
+渐变是一种有规律性的变化;引擎中分为线性渐变和放射性渐变
+
+渐变实现结构图
+
+![渐变结构](./img/jianbianjiegou.png)
+
+## 线性渐变
+
+定义从上到下的渐变,作为矩形的填充样式:
+
+![线性渐变1](./img/line-gradient2.png) 
+
+demo代码示例
+
+```
+let gradient = new SLinearGradient(this.minX,this.minY,this.minX,this.maxY)
+gradient.addColorStop(0,new SColor('#d8b31d'))
+gradient.addColorStop(0.5,new SColor('#38ded6'))
+gradient.addColorStop(1,new SColor('#c3470c'))
+painter.brush.gradient = gradient
+```
+
+定义从左到右的渐变,作为矩形的填充样式:
+
+![线性渐变2](./img/line-gradient.png) 
+
+demo代码示例
+
+```
+let gradient = new SLinearGradient(this.minX,this.minY,this.maxX,this.minY)
+gradient.addColorStop(0,new SColor('#d8b31d'))
+gradient.addColorStop(0.5,new SColor('#38ded6'))
+gradient.addColorStop(1,new SColor('#c3470c'))
+painter.brush.gradient = gradient
+```
+
+## 放射渐变
+
+绘制一个矩形,并用放射状/圆形渐变进行填充:
+
+情况1:圆心重合,圆1半径小于圆2半径
+
+![放射渐变1](./img/radial-gradient.png) 
+
+示例demo代码,填充的图形为700*700的矩形,
+
+```
+let gradient = new SRadialGradient((this.minX+this.maxX)/2,(this.minY+this.maxY)/2,5,(this.minX+this.maxX)/2,(this.minY+this.maxY)/2,35)
+gradient.addColorStop(0,new SColor('#ff483b'))
+gradient.addColorStop(0.5,new SColor('#04ff00'))
+gradient.addColorStop(1,new SColor('#3d4eff'))
+painter.brush.gradient = gradient
+```
+
+还有其他更多情况,实现更多图案,均可以调整参数来实现,一下列举几种情况
+
+情况2:圆1在圆2内部,圆1半径小于圆2半径
+
+![放射渐变2](./img/radial-gradient2.png) 
+
+情况3:圆1和圆2相离时,并且大小不相同
+
+![放射渐变3](./img/radial-gradient3.png) 
+![放射渐变4](./img/radial-gradient4.png) 
+
+情况4:当圆1和圆2相离时,并且大小相同
+
+![放射渐变5](./img/radial-gradient5.png) 
+
+情况5:当圆1和圆2相交时,并且大小相同
+
+![放射渐变5](./img/radial-gradient6.png) 
+
+情况6:当圆1和圆2相交时,圆心相同,并且大小相同
+
+![放射渐变5](./img/radial-gradient7.png) 
+
+## 渐变属性
+
+起点:渐变开始位置
+stop停点:渐变过程中间色,可以有多个
+结束点:渐变结束位置
+
+![渐变属性1](./img/gradient-attr1.png)
+
+![渐变属性2](./img/gradient-attr2.png)
+

+ 2 - 0
docs/dev/graph/engine/image.md

@@ -0,0 +1,2 @@
+# 绘制图片
+

BIN
docs/dev/graph/engine/img/basic-arrow.png


BIN
docs/dev/graph/engine/img/basic-jisuan.png


BIN
docs/dev/graph/engine/img/circle-arrow.png


BIN
docs/dev/graph/engine/img/circle-jisuan.png


BIN
docs/dev/graph/engine/img/copy.png


BIN
docs/dev/graph/engine/img/destination-atop.png


BIN
docs/dev/graph/engine/img/destination-in.png


BIN
docs/dev/graph/engine/img/destination-out.png


BIN
docs/dev/graph/engine/img/destination-over.png


BIN
docs/dev/graph/engine/img/diamond-arrow.png


BIN
docs/dev/graph/engine/img/diamond-jisuan.jpg


BIN
docs/dev/graph/engine/img/draw-engine.png


BIN
docs/dev/graph/engine/img/drawconstruction.png


BIN
docs/dev/graph/engine/img/gradient-attr1.png


BIN
docs/dev/graph/engine/img/gradient-attr2.png


BIN
docs/dev/graph/engine/img/gradient-construction.png


BIN
docs/dev/graph/engine/img/huabishixian.png


BIN
docs/dev/graph/engine/img/huashuajiegou.png


BIN
docs/dev/graph/engine/img/huizhijiegou.png


BIN
docs/dev/graph/engine/img/jianbianjiegou.png


BIN
docs/dev/graph/engine/img/lighter.png


BIN
docs/dev/graph/engine/img/line-gradient.png


BIN
docs/dev/graph/engine/img/line-gradient2.png


BIN
docs/dev/graph/engine/img/mutli-engine.png


BIN
docs/dev/graph/engine/img/radial-gradient.png


BIN
docs/dev/graph/engine/img/radial-gradient2.png


BIN
docs/dev/graph/engine/img/radial-gradient3.png


BIN
docs/dev/graph/engine/img/radial-gradient4.png


BIN
docs/dev/graph/engine/img/radial-gradient5.png


BIN
docs/dev/graph/engine/img/radial-gradient6.png


BIN
docs/dev/graph/engine/img/radial-gradient7.png


BIN
docs/dev/graph/engine/img/source-atop.png


BIN
docs/dev/graph/engine/img/source-in.png


BIN
docs/dev/graph/engine/img/source-out.png


BIN
docs/dev/graph/engine/img/source-over.png


BIN
docs/dev/graph/engine/img/square-arrow.png


BIN
docs/dev/graph/engine/img/square-jisuan.png


BIN
docs/dev/graph/engine/img/triangle-arrow.png


BIN
docs/dev/graph/engine/img/wenbenshixian.png


BIN
docs/dev/graph/engine/img/xor.png


+ 93 - 0
docs/dev/graph/engine/style.md

@@ -0,0 +1,93 @@
+# 颜色与样式
+
+::: details 目录
+[[toc]]
+:::
+
+## 颜色
+### 内置颜色
+SColor 内置了一些常用颜色。见下表:
+
+<table border="0">
+  <tr style="background:#00000000">
+    <td>SColor.Transparent</td>
+    <td>#00000000</td>
+  </tr>
+  <tr style="background:#000000;color:white">
+    <td>SColor.Black</td>
+    <td>#00000000</td>
+  </tr>
+  <tr style="background:#000080;color:white">
+    <td>SColor.DarkBlue</td>
+    <td>#000080</td>
+  </tr>
+  <tr style="background:#0000FF;color:white">
+    <td>SColor.Blue</td>
+    <td>#0000FF</td>
+  </tr>
+  <tr style="background:#008000;color:white">
+    <td>SColor.DarkGreen</td>
+    <td>#008000</td>
+  </tr>
+  <tr style="background:#00FF00;color:white">
+    <td>SColor.Green</td>
+    <td>#00FF00</td>
+  </tr>
+  <tr style="background:#008080;color:white">
+    <td>SColor.DarkCyan</td>
+    <td>#008080</td>
+  </tr>
+  <tr style="background:#00FFFF">
+    <td>SColor.Cyan</td>
+    <td>#00FFFF</td>
+  </tr>
+  <tr style="background:#800000;color:white">
+    <td>SColor.DarkRed</td>
+    <td>#800000</td>
+  </tr>
+  <tr style="background:#FF0000;color:white">
+    <td>SColor.Red</td>
+    <td>#FF0000</td>
+  </tr>
+  <tr style="background:#800080;color:white">
+    <td>SColor.DarkMagenta</td>
+    <td>#800080</td>
+  </tr>
+  <tr style="background:#FF00FF;color:white">
+    <td>SColor.Magenta</td>
+    <td>#FF00FF</td>
+  </tr>
+  <tr style="background:#808000;color:white">
+    <td>SColor.DarkYellow</td>
+    <td>#808000</td>
+  </tr>
+  <tr style="background:#FFFF00">
+    <td>SColor.Yellow</td>
+    <td>#00000000</td>
+  </tr>
+  <tr style="background:#FFFFFF">
+    <td>SColor.White</td>
+    <td>#FFFFFF</td>
+  </tr>
+  <tr style="background:#808080;color:white">
+    <td>SColor.DarkGray</td>
+    <td>#808080</td>
+  </tr>
+  <tr style="background:#A0A0A0">
+    <td>SColor.Gray</td>
+    <td>#A0A0A0</td>
+  </tr>   
+  <tr style="background:#C0C0C0">
+    <td>SColor.LightGray</td>
+    <td>#C0C0C0</td>
+  </tr>  
+</table>
+
+### 填充色实例
+
+### 轮廓色实例
+
+## 阴影
+
+<example-graph-style-shadow /> 
+

+ 3 - 0
docs/dev/graph/engine/text.md

@@ -0,0 +1,3 @@
+# 绘制文字
+
+

+ 4 - 0
docs/dev/graph/engine/transform.md

@@ -0,0 +1,4 @@
+# 变形
+::: details 目录
+[[toc]]
+:::

+ 3 - 0
docs/dev/graph/feng-map/typeIdMap.md

@@ -0,0 +1,3 @@
+# 地图要素分类编码
+
+

+ 58 - 0
docs/dev/graph/index.js

@@ -0,0 +1,58 @@
+const content = [
+    {
+        title: "绘图引擎",
+        path: "/dev/graph/engine/",
+        children: [
+            ["/dev/graph/engine/draw", "绘制形状"],
+            ["/dev/graph/engine/style", "颜色与样式"],
+            ["/dev/graph/engine/text", "绘制文字"],
+            ["/dev/graph/engine/image", "绘制图片"],
+            ["/dev/graph/engine/gradient", "渐变"],
+            ["/dev/graph/engine/composite", "融合"],
+            ["/dev/graph/engine/transform", "变型"],
+            ["/dev/graph/engine/clip", "裁剪"],
+            ["/dev/graph/engine/arrow", "绘图指令-绘制带有箭头的线段"],
+        ]
+    },
+    {
+        title: "场景管理",
+        path: "/dev/graph/scene/",
+        children: [
+            {
+                title: "图元素实例",
+                path: "/dev/graph/scene/items/",
+                children: [
+                    ["/dev/graph/scene/items/clock", "时钟"],
+                    ["/dev/graph/scene/items/text", "文本"],
+                    ["/dev/graph/scene/items/image", "图片"],
+                    ["/dev/graph/scene/items/editLine", "可编辑直线"],
+                    ["/dev/graph/scene/items/editPolyline", "可编辑折线"],
+                    ["/dev/graph/scene/items/editPolygon", "可编辑多边形示例"],
+                    ["/dev/graph/scene/items/imgText", "图例item(图片文本组合)"]
+                ]
+            },
+            ["/dev/graph/scene/undo", "Undo示例"],
+            ["/dev/graph/scene/align", "对齐示例"],
+        ]
+    },
+    {
+        title: "楼层平面图",
+        path: "/dev/graph/big/",
+        children: [
+            ["/dev/graph/big/workLine", "工作流程"],
+            ["/dev/graph/big/downloadFile", "手工下载楼层底图文件"],
+            ["/dev/graph/big/jsonFile", "json数据格式"],
+            ["/dev/graph/big/divide", "划分"],
+            ["/dev/graph/big/mapDemo", "楼层平面图范例"],
+        ]
+    },
+    {
+        title: "系统图",
+        path: "/dev/graph/system-diagram/",
+        children: [
+            ["/dev/graph/system-diagram/json-file", "json数据格式"]
+        ]
+    },
+];
+
+module.exports = content;

+ 11 - 0
docs/dev/graph/scene/README.md

@@ -0,0 +1,11 @@
+场景管理
+
+
+1.视图-场景-对象的基本说明
+2.绘制封装,painter传递过程
+3.系统事件传递
+4.坐标换算
+5.自定义事件$emit
+6.基本操作,如放大缩小
+7.undo/redo 框架
+8.item实现案例,钟表/连线/多边形

+ 16 - 0
docs/dev/graph/scene/align.md

@@ -0,0 +1,16 @@
+# 对齐示例
+
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-Align />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/Align.vue
+:::
+
+::: tip 注
+1、使用对齐时,至少选择2个item<br/>
+2、使用分散对齐时,至少选择3个item<br/>
+:::

+ 1 - 0
docs/dev/graph/scene/items/README.md

@@ -0,0 +1 @@
+Item

+ 10 - 0
docs/dev/graph/scene/items/clock.md

@@ -0,0 +1,10 @@
+# 时钟实例
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-ClockItem />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/ClockItem.vue
+:::

+ 15 - 0
docs/dev/graph/scene/items/editLine.md

@@ -0,0 +1,15 @@
+# 可编辑直线示例
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-SEditLine/>
+
+::: tip 注
+1、可以通过双击直线在编辑状态和展示状态来回切换,<br/>
+2、编辑状态时:鼠标点击在直线端点上,可拖动点;<br/>
+:::
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/SEditLine.vue
+:::

+ 17 - 0
docs/dev/graph/scene/items/editPolygon.md

@@ -0,0 +1,17 @@
+# 可编辑多边形示例
+::: details 目录
+[[toc]]
+:::
+
+example-graph-scene-SEditPolygon
+
+::: tip 注
+1、可以通过双击table在编辑状态和展示状态来回切换,<br/>
+2、创建状态时;enter + 左键闭合多边形 <br/>
+3、编辑状态时:鼠标点击在边上可加点,可拖动点;<br/>
+4、编辑状态时:通过ALT键 + 鼠标左键 删除顶点
+:::
+
+::: details 查看代码
+@/docs/.vuepress/components/example/graph/scene/SEditPolygon.vue
+:::

+ 15 - 0
docs/dev/graph/scene/items/editPolyline.md

@@ -0,0 +1,15 @@
+# 可编辑折线示例
+
+<example-graph-scene-PolylineItem/>
+
+::: tip 注
+1、enter完成创建 <br/>
+2、双击折线附近,进入编辑态;再次双击进入查看态 <br/>
+3、编辑态时:点击点附近更改点位置 <br/>
+4、编辑状态时:通过ALT键 + 鼠标左键 删除顶点
+:::
+
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/PolylineItem.vue
+:::

+ 10 - 0
docs/dev/graph/scene/items/image.md

@@ -0,0 +1,10 @@
+# 图片实例
+::: details 目录
+[[toc]]
+:::
+
+example-graph-scene-ImageItem
+
+::: details 查看代码
+@/docs/.vuepress/components/example/graph/scene/ImageItem.vue
+:::

+ 6 - 0
docs/dev/graph/scene/items/imgText.md

@@ -0,0 +1,6 @@
+# 图例item示例
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-SImgTextItem/>

+ 10 - 0
docs/dev/graph/scene/items/text.md

@@ -0,0 +1,10 @@
+# 文本实例
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-TextItem />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/TextItem.vue
+:::

+ 10 - 0
docs/dev/graph/scene/undo.md

@@ -0,0 +1,10 @@
+# Undo/Redo 框架
+::: details 目录
+[[toc]]
+:::
+
+<example-graph-scene-Undo1 />
+
+::: details 查看代码
+<<< @/docs/.vuepress/components/example/graph/scene/Undo1.vue
+:::

+ 11 - 0
docs/dev/graph/system-diagram/README.md

@@ -0,0 +1,11 @@
+系统图
+
+系统图item继承关系
+
+![系统图实现结构](./img/systemdiagram.png)
+
+数据解析器与类的创建工厂
+
+![数据解析器与类的创建工厂](./img/factoryAndParser.png)
+
+数据格式

BIN
docs/dev/graph/system-diagram/img/factoryAndParser.png


BIN
docs/dev/graph/system-diagram/img/systemdiagram.png


+ 112 - 0
docs/dev/graph/system-diagram/json-file.md

@@ -0,0 +1,112 @@
+# Json 文件格式
+::: details 目录
+[[toc]]
+:::
+
+## 整体数据格式
+
+```
+{
+    Data:[
+        {
+          
+            Elements:{                          // 系统图展示所需数据
+                Nodes:[],                       // 图例节点,所有与工程信息化相关的图例(图标类型与区域)
+                Markers:[],                     // 与工程信息无关的标识对象(增加文本注释,图上的图片说明)
+                Relations:[],                   // 管线对象
+            },
+            ID: '',                             // 图ID
+            Name: '',                           // 名称
+            CategoryID: '',                     // 图分类ID
+            ProjectID: '',                      // 项目ID
+            BuildingID: '',                     // 建筑ID
+            FloorID: '',                        // 楼层id
+            Note: '',                           // 图说明
+            Log: {                              //图操作日志
+                  Mark:'',                      //图的存盘标记
+                  CommandList:[
+                   {
+                        Command: '',            //命令
+                        Desc: '',               //描述
+                        Detail: ''              //详情
+                    }
+                ]
+            }
+        }
+    ],
+    Message: '',
+    Result: ''
+}
+```
+
+## 图例节点
+
+```
+    Nodes:[
+        {   
+            ID: '',                             // ID
+            Name: '',                           // 名称
+            AttachObjectIds:[],                 // 返回工程信息化对象 ID 列表
+            GraphElementType: '',               // 图例类型 None/Line/Zone/Image:非图例/线条/区域类型/图标
+            GraphElementId: '',                 // 对应的图元ID
+            Num: 1                              //图例数量
+            Pos: {X: 0, Y: 0},                  // 位置
+            Scale: {X: 1, Y: 1, Z: 1},          // 缩放
+            Rolate: {X: 0, Y: 0, Z: 0},         // 旋转
+            Size: {Width:0, Height: 0},         // 大小
+            AnchorList:[
+                    {
+                        ID: '',                 // 锚点ID
+                        Pos: '',                // 锚点的坐标
+                    },
+                    ...
+                ],
+            OutLine: [
+                [{X:0,Y:0,Z:0},...],            // 外轮廓 
+                ...                             // 内轮廓
+            ],                                  // 轮廓线
+            Properties: {}                      // 由应用自己定义
+        },
+        ...
+    ]
+```
+
+## 标识对象
+
+```
+    Markers:[
+        {
+            ID: '',                             // ID
+            Name: '',                           // 名称
+            Type: '',                           // 图标(Image),线类型(Line),文本(Text)
+            Pos: {X: 0, y: 0},                  // 位置
+            Scale: {X: 1, Y: 1, Z: 1},          // 缩放
+            Rolate: {X: 0, Y: 0, Z: 0},         // 旋转
+            Size: {Width:0, Height: 0},         // 大小
+            Properties: {}                      // 由应用自己定义
+        },
+        ...
+    ]
+```
+
+## 对象关系
+
+```
+    Relations: [
+        {
+            ID: '',                             // ID
+            Name: '',                           // 名称
+            GraphElementId: '',                 // 对应的图例ID
+            Node1ID: '',                        // 关联节点1_id
+            Node2ID: '',                        // 关联节点2_id
+            Anchor1ID: '',                      // 关联锚点1_id
+            Anchor2ID: '',                      // 关联锚点2_id
+            Dir: 0,                             // 方向(0:无向,1:节点1到节点2,2:节点2到节点1)
+            LineType: '',                       // 直线(Line),水平垂直
+            PointList: [],                      // 线的顶点坐标
+            Style: ''                           // 线的绘图样式
+        },
+        ...
+    ]
+```
+```

+ 0 - 0
docs/public/assets/img/logo.png


Някои файлове не бяха показани, защото твърде много файлове са промени