一、使用前准备

mxBasePath变量用来定义库资源的目录。这个变量必须在加载库前就定义好。

  <script type="text/javascript">mxBasePath = 'javascript/src/';</script>//mxClient.js包含该类库的全部所需代码。<script type="text/javascript" src="/js/mxClient.js"></script>

二、检查浏览器是否支持

if (!mxClient.isBrowserSupported()) {//如果浏览器不支持,则显示错误信息alert('该浏览器不支持');
}

三、Container容器

页面用一个dom节点将graph与JavaScript结合。它可以使用document.getElementById在body中取得或者直接动态创建(如createElement)。

var container = document.getElementById('id-of-graph-container');
//创建Graph对象
var graph = new mxGraph(container);

四、部分基础属性

  graph.setCellsResizable(false); //节点不可改变大小mxGraphHandler.prototype.setMoveEnabled(true); //是否可以移动mxGraphHandler.prototype.guidesEnabled = true; //显示细胞位置标尺graph.setEnabled(false);//是否只读graph.setConnectable(false);//cell是否可以连线graph.setCellsLocked(true);//是否可以移动连线,重新连接其他cell,主要用来展现中用graph.setConnectable(true); // 是否允许Cells通过其中部的连接点新建连接,false则通过连接线连接/*禁用节点双击,防止改变数据 */graph.dblClick = function (evt, cell) {var model = graph.getModel();if (model.isVertex(cell)) {return false;}};// 节点是否解析htmlgraph.setHtmlLabels(true);// 连线的样式var style = graph.getStylesheet().getDefaultEdgeStyle();style[mxConstants.STYLE_ROUNDED] = true;//圆角连线style[mxConstants.STYLE_EDGE] = mxEdgeStyle.ElbowConnector; //自己拐弯的连线
部分方法getCellAt(x,y,parent,vertices,edges)//单击事件graph.click = function (me) {var x = me.graphX;var y = me.graphY;var graph = this.GetmxGraph();var model = graph.getModel();var cell = graph.getCellAt(x, y);if (model.isVertex(cell)) {alert("环节ID:" + cell.id);} else {return false;}}//添加双击事件graph.addListener(mxEvent.DOUBLE_CLICK, function(sender, evt) {var cell = evt.getProperty('cell');mxUtils.alert('Doubleclick: '+((cell != null) ? 'Cell' : 'Graph'));evt.consume();});//删除选中Cell或者Edgevar keyHandler = new mxKeyHandler(graph);keyHandler.bindKey(46, function (evt) {if (graph.isEnabled()) {graph.removeCells();}});

五、添加节点和连接线

程序需要在beginUpdate和endUpdate中来插入节点和连线(更新图形)。endUpdate应放在finally-block中以确保endUpdate一直执行。但beginUpdate不能在try-block中,这样如果beginUpdate失败那么endupdate永远不会执行。

beginUpdate和endUpdate方法不仅提供了显示功能,而且它能够当做undo/redo标记的边界(也就是说,beginUpdate和endUpdate之间操作会作为undo、redo的原子操作,要么同时被redo或undo, 相当于数据库中的事务)。

var parent = graph.getDefaultParent();
graph.getModel().beginUpdate();
try {//参数:节点显示的内容、X、Y、宽度、高度,X、Y是相对于DOM节点中的位置var v1 = graph.insertVertex(parent, null, '节点一', 20, 100, 300,145, 'rounded;strokeColor=none;fillColor=none;');var v2 = graph.insertVertex(parent, null, '节点二', 20, 400, 300, 145, 'rounded;strokeColor=none;fillColor=none;');//圆形节点var v3 = graph.insertVertex(parent, null, 'B', 80, 100, 100, 100, 'shape=ellipse;perimeter=ellipsePerimeter');//三角形节点
var v4 = graph.insertVertex(parent, null, 'C', 190, 30, 100, 60, 'shape=triangle;perimeter=trianglePerimeter;direction=south');//节点是否可以折叠graph.getModel().setCollapsed(v2, 1);var html = '<div>html</div>';//更新节点显示的内容graph.getModel().setValue(v1, html);//连接线,连接线上显示的内容,连接的两个节点,连接线的样式var e1 = graph.insertEdge(parent, null, '我1连2', v1, v2, "strokeWidth=3;labelBackgroundColor=white;fontStyle=1");//直角连线 var e2 = graph.insertEdge(parent, null, '', v1, v2, 'edgeStyle=orthogonalEdgeStyle;');//曲折连线
var e2 = graph.insertEdge(parent, null, '', v3, v2, 'edgeStyle=elbowEdgeStyle;elbow=horizontal;orthogonal=0;entryPerimeter=1;');//虚线连线graph.insertEdge(parent, null, null, step1, step2, 'crossover');
}
finally {graph.getModel().endUpdate();
}

六、style的使用,插入背景图

var style = new Object();
style[mxConstants.STYLE_SHAPE] = mxConstants.SHAPE_IMAGE;
style[mxConstants.STYLE_PERIMETER] = mxPerimeter.RectanglePerimeter;
style[mxConstants.STYLE_IMAGE] = 'IMGUrl';
graph.getStylesheet().putCellStyle('image4gray', style);
//插入CELL中使用image4gray;即可
cell = graph.insertVertex(parent, null, name, x, y, cellWidth, cellHeight, 'image4gray;rounded=true;strokeColor=none;fillColor=yellow;');

七、获取画布中的所有元素

  var mxGraph = this.GetmxGraph();var parent = mxGraph.getDefaultParent();var parentChildren = parent.children;var arrEdge = [];   //连接线var arrVertex = []; //节点//获取所有信息for (var i = 0; i < parentChildren.length; i++) {var child = parentChildren[i];if (!child.isVisible()) {continue;}//区分连接线、节点if (child.isEdge()) {var obj = new Object();obj.ID = child.id;obj.SourceID = child.source.id;obj.TargetID = child.target.id;arrEdge.push(obj)} else if (child.isVertex()) {var obj = new Object();obj.ID = child.id;obj.Name = child.value;obj.LeftTopX = child.geometry.x;obj.LeftTopY = child.geometry.y;arrVertex.push(obj);}}

mxgraph进阶(五)搭建mxGraph简单应用相关推荐

  1. mxgraph html5,mxgraph进阶(四)mxGraph再启程

    mxgraph进阶(四)mxGraph再启程 前言 小论文Constructing User Interaction Behaviors Net from System Log. (AICE 2016 ...

  2. mxGraph进阶(一)mxGraph教程-开发入门指南

    mxGraph教程-开发入门指南 概述 mxGraph是一个JS绘图组件适用于需要在网页中设计/编辑Workflow/BPM流程图.图表.网络图和普通图形的Web应用程序.mxgraph下载包中包括用 ...

  3. Python爬虫进阶五之多线程的用法

    前言 我们之前写的爬虫都是单个线程的?这怎么够?一旦一个地方卡到不动了,那不就永远等待下去了?为此我们可以使用多线程或者多进程来处理. 首先声明一点! 多线程和多进程是不一样的!一个是 thread ...

  4. 测试开发——搭建一个简单 web服务(flask框架基础)项目实战

    搭建一个简单 web服务-flask框架 一.什么是wsgi? 二.搭建一个简单 web服务 三.扩展 四.请求加参数的情况 五.安装flask 一.什么是wsgi? wsgi是webserver和a ...

  5. 《我学区块链》—— 五、Remix简单使用

    五.Remix简单使用 目前以太坊智能合约的编辑器主要有在线的 http://remix.ethereum.org:由 remix-ide自己搭建的:以及 Mac,Linux 系统上的 Remix-a ...

  6. Liferay环境搭建、简单说明与相关资料

    Liferay环境搭建.简单说明与相关资料  2012年3月23日 简单说明 该教程为是我在工作交接时编制的文档的一部分,经过测试应该不会有大问题,但可能还是会有所遗漏,请留言指正,谢谢. 转载请注明 ...

  7. Appium+Java环境搭建及简单实例

    Appium+Java环境搭建及简单实例 一.下载jdk并配置好环境 二.下载Android-sdk并配置好环境 三.下载Eclipse软件 四.下载Node.js 下载地址:https://node ...

  8. 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow)

    图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网络生成手写体数字数据(tensorflow) 文章目录 图像对抗生成网络 GAN学习01:从头搭建最简单的GAN网络,利用神经网 ...

  9. 安全职业生涯进阶:92 个简单步骤 破解 安全行业

    文章出处 http://www.microsoft.com/china/technet/community/columns/secmvp/sv0706.mspx 每月安全 MVP 文章 - 2006 ...

最新文章

  1. CentOs6.5中安装和配置vsftp简明教程
  2. webstorm设置
  3. java解析日志数据_Java实时监控日志文件并输出的方法详解
  4. zabbix的安装与部署(proxy、睿象云)
  5. Linux中source是什么指令?
  6. 在 PyCharm 中写代码
  7. ZOJ 3988 2017CCPC秦皇岛 H:Prime Set(二分匹配)
  8. SEGGER J-Flash烧写SN号(serial number)的两种方式
  9. SQK Server实现 LeetCode 175 组合两个表
  10. 如何解决同花顺软件打开时,出现 “无法与服务器建立连接” 的问题
  11. 在delphi中调用chm帮助文件_delphi教程
  12. listview刷新
  13. mb778cn 计算机故障或繁忙,松下 KX-MB778CN驱动
  14. 泛泰 A870 4.1.2 刷第三方专用Recovery合集
  15. word文档去掉复制过来的背景颜色
  16. mysql的填充因子_确定SQL Server填充因子(FILLFACTOR)值的方法
  17. android极简手机壁纸,极简桌面安卓版
  18. 移动APP登录注册(vue+vant)
  19. 无线地磁传感器更适合路边停车系统
  20. 如何从github上下载源代码

热门文章

  1. iOS多任务(iPad分屏模式)
  2. TBK打牌游戏信誉网站
  3. 神州数码交换机RIP基础配置
  4. USDT(omniCore)搭建
  5. Arduino Pro Mini 基本用法
  6. 分享三款能够将图片转化为文字的软件
  7. 计算机考核方式,计算机基础考核方式的探索研究
  8. 肚子好饿啊 早知道不约Java了_关于饿了的朋友圈说说大全2018 肚子饿肚子好饿肚子很饿...
  9. 张小龙微信公开课PRO演讲:信息互联的7个思考
  10. 阿里云生态峰会实录(下)