小阮2018 2019-06-10 17:08 采纳率: 33.3%
浏览 1020
已采纳

mxgraph图形如何保存到本地以及从本地导入

1.mxgraph绘制好的图形保存到本地
2.保存的文件可以进行解析,恢复为mxgraph绘制的图形而且可以继续绘制
3.保存文件可为xml、png不限

  • 写回答

1条回答 默认 最新

  • 小阮2018 2019-06-17 13:58
    关注

    1.利用mxCodec模块进行编码生成xml文件可以保存到本地。
    2.xml通过mxCodec解码可恢复graph(照理来说),但是我失败了,最后,按照循环方式获取xml节点,重新插入graph中解决。
    以下代码为angular(部分代码):
    exportGraph() {
    const graph: mxgraph.mxGraph = this.editor['graph'];

    const enc: mxgraph.mxCodec = new mx.mxCodec();
    const node = enc.encode(graph.getModel());
    const xml = mx.mxUtils.getPrettyXml(node);
    mx.mxUtils.popup(mx.mxUtils.getPrettyXml(node), true);
    // confirm(xml);

    const downLink = document.createElement('a');
    downLink.download = 'graph.xml';
    // 字符内容转换为blod地址
    const blob = new Blob([xml]);
    downLink.href = URL.createObjectURL(blob);
    // 链接插入到页面
    document.body.appendChild(downLink);
    downLink.click();
    // 移除下载链接
    document.body.removeChild(downLink);
    }

    importGraph(e) {
    const graph: mxgraph.mxGraph = this.editor['graph'];
    const file = e.srcElement.files[0];
    const path = window.URL.createObjectURL(file);

    const cells = mx.mxUtils.load(path).getDocumentElement().getElementsByTagName('mxCell') as Array;
    const parent = graph.getDefaultParent();
    for (let i = 2; i < cells.length; i++) {
    const cellAttrs = cells[i].attributes;
    if (cellAttrs.vertex) { // is Vertex
    const vertexValue = cellAttrs.value ? cellAttrs.value.value : '';
    // const vertexId = cellAttrs.id.value;
    const geom = cells[i].children[0].attributes;
    const xPos = Number(geom.x.value);
    const yPos = Number(geom.y.value);
    const height = Number(geom.height.value);
    const width = Number(geom.width.value);
    const style = cellAttrs.style.value;
    console.log(style.length);
    graph.insertVertex(parent, null, vertexValue, xPos, yPos, width, height, style);
    }
    }

    }

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 树莓派与pix飞控通信
  • ¥15 自动转发微信群信息到另外一个微信群
  • ¥15 outlook无法配置成功
  • ¥30 这是哪个作者做的宝宝起名网站
  • ¥60 版本过低apk如何修改可以兼容新的安卓系统
  • ¥25 由IPR导致的DRIVER_POWER_STATE_FAILURE蓝屏
  • ¥50 有数据,怎么建立模型求影响全要素生产率的因素
  • ¥50 有数据,怎么用matlab求全要素生产率
  • ¥15 TI的insta-spin例程
  • ¥15 完成下列问题完成下列问题