# drawGraph
**Repository Path**: raocy/draw-graph
## Basic Information
- **Project Name**: drawGraph
- **Description**: graph 是一个结合drawio编辑导出xml,底层采用mxgraph显示的图形组件
- **Primary Language**: JavaScript
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 2
- **Forks**: 2
- **Created**: 2022-04-02
- **Last Updated**: 2025-05-16
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GraphView 渲染容器
### 介绍
drawGraph 是一个结合drawio编辑导出xml,底层采用mxgraph显示的图形组件
- 组件主要用到的是 new Graph对象 (drawio编辑器,所用到的对象,以期望组件渲染的视图与drawio编辑出的图形风格一致)
- drawio所用到的图片资源,svg资源以及xml资源,建议从drawio官方github地址拷贝出来
### 引入
```js
import Vue from 'vue';
import { GraphView } from 'drawGraph';
```
## 代码演示
### 基础用法
```html
```
./demo/index.vue
## API
### Props
| 参数 | 说明 | 类型 | 默认值 |
| ------------- | -------- | -------- | --------- |
| xmlData | xml文件数据 | _string_ | '' |
| stateData | 状态数据 | _array_ | [] |
| warningImg | 告警图片地址(支持图片url或者base64) | _string_ | base64 |
###
stateData Attributes
| 参数 | 说明 | 类型 | 默认值 |可选值 |
| ------------- | -------- | -------- | --------- | --------- |
| equipId | 与xmlData数据匹配的equipId | _string_ | - |- |
| color | 颜色 | _string_ | - |
| isWarning | 是否显示告警图标 | _boolean_ | false |- |
| effectType | 告警特效类型,暂时只支持淡入淡出特效,颜色默认为color配置 | _string_ | null | fade |
### Events
| 事件名 | 说明 | 回调参数 |
| ------ | ---------- | ------------------- |
| leftClick | 左键点击时触发 | event |
| rightClick | 右键点击时触发 | event |
| dblClick | 双击时触发 | event , cell |
| loadGetNodes | xml文档加载,视图渲染完成时触发,获取所有节点 | cells |
### 相关技术栈
* mxgraph http://jgraph.github.io/mxgraph/ ——
* draw.io https://www.diagrams.net/
* drawio-tools https://jgraph.github.io/drawio-tools/tools/convert.html
* pakojs
## 组件用到的部分mxgraph相关api
### 初始化mxGraph
```
var container = document.getElementById('graphContainer')
var graph = new mxGraph(container)
```
### 设置默认themes
```
设置风格样式themes 解析的是mxgraph官方编辑器(http://jgraph.github.io/mxgraph/javascript/examples/grapheditor/www/index.html)的default.xml文件,以保持风格一致
const themsXml = mxUtils
.load('http://localhost:8080/mxgraph/default.xml')
.getXml()
new mxCodec().decode(themsXml.documentElement, graph.getStylesheet())
```
### 设置缩放拖动,放大放小
```
// 设置一些禁止缩放禁止拖动,放大放小
// 鼠标框选
new mxRubberband(graph);
// 开启可以拖拽建立关系,可以连线
graph.setConnectable(true);
// 开启方块上的文字编辑功能
graph.setCellsEditable(true);
// 启用对齐线帮助定位
mxGraphHandler.prototype.guidesEnabled = true;
// 选择基本元素开启
graph.setEnabled(true);
// 禁用浏览器默认的右键菜单栏
mxEvent.disableContextMenu(container);
// 只可预览不可选中拖动连接
graph.setEnabled(true);
// 禁止改变元素大小
graph.setCellsResizable(false);
// 容器大小自适应
graph.setResizeContainer(false);
// 可否重复连接
graph.setMultigraph(false);
// 放大
graph.zoomIn();
//缩小
graph.zoomOut();
//还原
graph.zoomActual();
//居中缩放
graph.centerZoom = true;
```
### 高亮效果
```
new mxCellTracker(this.graph, "black");
```
### 允许左键拖动画布
```
this.graph.panningHandler.useLeftButtonForPanning = true;
this.graph.panningHandler.ignoreCell = true;
this.graph.container.style.cursor = 'move';
this.graph.setPanning(true);
```
### 请求
```
同步
mxUtils.load(url)
异步
mxUtils.get(url)
mxUtils.post(url)
mxUtils.getAll(url)
```
### 读取xml,并渲染
```
// 读取xml,并渲染
var req = mxUtils.load('http://localhost:8080/mxgraph/xml.xml')
var xmlDoc = req.getXml()
var codec = new mxCodec(xmlDoc)
codec.decode(xmlDoc.documentElement, graph.getModel())
```
### 查看视图中图形的xml
```
var encoder = new mxCodec();
var node = encoder.encode(graph.getModel());
console.log(node)
```
### 获取视图每个cell
```
graph.getDefaultParent().children
```
### 添加事件
```
mxEvent下面有很多事件
graph.addListener(mxEvent.CLICK, function (sender, evt) {
var cell = evt.getProperty('cell')
console.log(cell)
})
```
### 添加图标
```
// 设置一个overlay图标
var overlay = new mxCellOverlay(new mxImage('images/add.png', 24, 24), 'Add outgoing');
overlay.cursor = 'hand';
// 添加告警图标 默认是一个warning 的gif,实现的闪烁效果
graph.setCellWarning(cell, 'Tooltip')
// 添加图标到cell上
graph.addCellOverlay(cell,overlay)
// 清楚图标
graph.removeCellOverlays(cell)
```
### 节点操作新增删除
```
//删除节点
graph.removeCells()
//新增节点
graph.addCells()
```
### 调整布局中心点
```
graph.center(true, true, 0.5, 0.5);
```
## draw.io编辑器
```
通过draw.io编辑器生成xml,此时xml需要解码
xml经过转码decode生成mxgraph可解析的文件 在线解码地址https://jgraph.github.io/drawio-tools/tools/convert.html
```
## x2js工具库
```
可实现xml json的转换
```
## pakojs
```
draw.io导出的图形库需要pakojs转码成mxgraph识别的xml文件
---drawDecode.js我根据pakojs封装的用于本地解码js库
```