mxGraph学习

mxgraph的渲染过程

1:初始化mxUtils对象:doc = mxUtiles.createXmlDocument();

2:使用创建的对象,创建具体模型:

  Var person = doc.createElement(‘模型名字’);

  可以通过setAttribute来设置模型对象的属性:

person.setAttribute('lastName', 'Duck');
person1.setAttribute('firstName', 'Daffy');

3:设置画布

   通过页面中选定一个已有元素作为画布:

var graph = new mxGraph(container);其中container的方法使用原生js:container = doucment.getElementById("id")

4:设置画布属性

graph.setCellsResizable(false);定义画布中模型元素是否可拉伸

设置画布大小:

graph.setResizeContainer(true);该属性为true的时候可以通过minimumContainerSize 来控制画布整体大小展示
graph.minimumContainerSize = new mxRectangle(0, 0, 500, 380);

 

 

获取画布xml内容

document.body.appendChild(mxUtils.button('View XML', function()
{
   var encoder = new mxCodec();
   console.log('122',graph.getModel())
   var node = encoder.encode(graph.getModel());
   console.log('123',mxUtils.getPrettyXml(node));获取标准xml
    mxUtils.getXml(result);获取去除空格xml
   mxUtils.popup(mxUtils.getPrettyXml(node), true);
}));

上面代码中:

mxUtils.button定义了特定按钮,可操作mxgraph画布

mxCodec是官方给出的xml编解码器,很明显我们通过graph.getModel()获得到的是画布对象的整体属性,包括节点,属性,监听事件等(未知,为了更深了解,后面需要更加深入了解)

var enc = new mxCodec(mxUtils.createXmlDocument());
var node = enc.encode(editor.graph.getModel());

 

后面的eg我们通过encoder.encode可以看到输出的是正常的xml字符串,目前个人理解这个字符串就是我们需要保存的最终数据。

可以拿到xml那必然可以添加xml到画布,encode对应的就是decode,

var xml = '<root><mxCell id="2" value="Hello," vertex="1"><mxGeometry x="20" y="20" width="80" height="30" as="geometry"/></mxCell><mxCell id="3" value="World!" vertex="1"><mxGeometry x="200" y="150" width="80" height="30" as="geometry"/></mxCell><mxCell id="4" value="" edge="1" source="2" target="3"><mxGeometry relative="1" as="geometry"/></mxCell></root>';
var doc = mxUtils.parseXml(xml);
var codec = new mxCodec(doc);
var elt = doc.documentElement.firstChild;
var cells = [];

while (elt != null)
{
    cells.push(codec.decode(elt));
    elt = elt.nextSibling;
}

graph.addCells(cells);

这个例子是官网的api上给的例子

可以看到需要先通过mxCodec对xml做一些处理,然后对再添加到画布中

可以看到上面画布中出现了两个蓝色举行跟一条线连接。

所以说,通过对画布操作可以实现模型的后台存储与展示。

 

简单工具栏:

//获取所需复制工具
var cells = graph.getSelectionCells();
var bounds = graph.getView().getBounds(cells);

var funct = function(graph, evt, cell)
{
   graph.stopEditing(false);

   var pt = graph.getPointForEvent(evt);
   var dx = pt.x - bounds.x;
   var dy = pt.y - bounds.y;
   
   graph.setSelectionCells(graph.importCells(cells, dx, dy, cell));
}
//添加工具栏
var img = toolbar.addMode(null, 'editors/images/outline.gif', funct);
mxUtils.makeDraggable(img, graph, funct);
mxUtils.show可对画布进行截屏或者局部截屏

 

insertVertex可新增自定义图形,可引入自定义图片,参考官网ports.html

左侧工具栏可做自己自定义部分

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
我是C知道,很高兴回答您关于mxGraph学习的问题。mxGraph是一款基于JavaScript的开源图形库,可用于在Web应用程序中创建交互式图表和图形。以下是一些学习mxGraph的笔记: 1. 官方文档:您可以从mxGraph的官方网站获取最新的文档和示例。官方文档提供了详细的API参考,示例代码和教程,可以帮助您快速入门和理解mxGraph的各种功能和用法。 2. 基本概念:了解mxGraph的基本概念是学习的第一步。这包括了解图形模型、元素、连接、样式、布局和事件处理等。 3. 示例代码:通过查看和运行示例代码,您可以学习如何使用mxGraph创建各种类型的图表和图形。官方文档中提供了丰富的示例代码,您可以直接使用或修改它们来满足自己的需求。 4. 自定义样式:mxGraph允许您通过自定义样式来美化图表和图形。您可以使用CSS样式表或直接在代码中设置样式属性来实现。掌握如何使用样式可以使您的图表更加美观和可定制。 5. 交互和事件处理:mxGraph提供了丰富的交互和事件处理功能,如拖放、缩放、选中和编辑等。学习如何处理这些事件可以增强用户体验并实现更复杂的交互操作。 6. 布局算法:mxGraph提供了多种布局算法,可帮助您自动排列图表中的元素。了解这些布局算法的原理和使用方法可以提高图表的自动化程度。 7. 扩展和定制:mxGraph是一个开源库,您可以通过扩展和定制来满足特定的需求。了解如何编写自定义的图形元素、连接线和布局算法可以使您的应用程序更加个性化。 这些只是mxGraph学习的一些基本笔记,希望对您有所帮助。如果您有任何具体的问题,欢迎继续提问!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值