1. 程式人生 > >mxgraph 搭建簡單應用 主線描述、屬性與方法的意思

mxgraph 搭建簡單應用 主線描述、屬性與方法的意思

使用前準備

  mxBasePath變數用來定義庫資源的目錄。這個變數必須在載入庫前就定義好。  

  <script type="text/javascript">
          mxBasePath = 'javascript/src/';
  </script>

  //mxClient.js包含該類庫的全部所需程式碼。
    <script type="text/javascript" src="/js/mxClient.js"></script>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

檢查瀏覽器是否支援  

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); 
  • 1
  • 2
  • 3
  • 1
  • 2
  • 3

部分基礎屬性  

  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;     }   };   // 節點是否解析html   graph.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或者Edge   var keyHandler = new mxKeyHandler(graph);   keyHandler.bindKey(46, function (evt) {     if (graph.isEnabled()) {       graph.removeCells();     }   });
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49

新增節點和連線線

  程式需要在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();
} 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

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;');
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

獲取畫布中的所有元素

  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);
    }
  }
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27

相關推薦

mxgraph 搭建簡單應用 主線描述屬性方法意思

使用前準備   mxBasePath變數用來定義庫資源的目錄。這個變數必須在載入庫前就定義好。     <script type="text/javascript">   mxBasePath = 'javascript/src/';   &

02 ndarray的屬性 ndarray的基本操作(索引切片變形連線切分副本)聚合操作矩陣操作排序Panda資料結構Series建立索引切片屬性方法運算

二、ndarray的屬性 4個必記引數: ndim:維度 shape:形狀(各維度的長度) size:總長度 dtype:元素型別 import matplotlib.pyplot as plt ndarr = plt.imread("./jin.png") plt.

分布式緩存技術redis學習系列(三)——redis高級應用(主從事務持久化)

master ica not ood www working can 出了 owin 上文《詳細講解redis數據結構(內存模型)以及常用命令》介紹了redis的數據類型以及常用命令,本文我們來學習下redis的一些高級特性。 回到頂部 安全性設置 設置客戶端操作秘密

事件對象的使用屬性方法

事件對象的使用、屬性和方法 事件對象的使用、屬性和方法1 event.target代表當前觸發事件的元素,可以通過當前元素對象的一系列屬性來判斷是不是我們想要的元素2 target屬性可以是註冊事件時的元素或者子元素,通常用於比較event.target和this來確定是不是由於冒泡而觸發的

【17】有關python面向對象編程的提高【多繼承多態屬性動態添加限制添加屬性方法@property】

爸爸 mce turn object get 寫法 pri import sel 一、多繼承 案例1:小孩繼承自爸爸,媽媽。在程序入口模塊再創建實例調用執行 #father模塊 class Father(object): def __init__(self,mon

C#基礎屬性方法,結構和類(建構函式)

一、類 定義一個類時,等於定義了一個數據型別的藍圖。 類的定義: 類的定義是以關鍵字 class 開始,後跟類的名稱。 類的主體,包含在一對花括號內。 二、屬性 屬性是類,結構和介面的命名成員。 訪問器 屬性的訪問器包含有助於讀取或計算或設定

C#屬性方法,結構和類(建構函式)

  一、類 定義一個類時,等於定義了一個數據型別的藍圖。 這實際上並沒有定義任何的資料,但它定義了類的名稱意味著什麼,也就是說,類的物件由什麼組成及在這個物件上可執行什麼操作。 物件是類的例項。構成類的方法和變數成為類的成員。   類的定義: 類的定義

《head first java》類物件屬性方法的關係

類的定義:類是對某一類事物的描述,是抽象的、概念上的意義。 屬性表示類的特性,如 類——冰箱 屬性——價格、耗電量、體積 方法表示類的功能,類能做什麼,如 類——冰箱 方法——儲存、冷凍等 類需要通過class來宣告 class 類名稱{ 屬性 方法 } 函

技術融會 促進應用協同――10GIPv6MSMR

    經歷了業務應用IP化、通訊應用IP化後,企業的系統龐大而複雜,單一系統之間耦合度低,缺乏內在的通訊,例如供應鏈系統和語音通訊系統各自獨立,MIS系統和即使通訊系統各自獨立。系統的相互獨立,內在關聯的缺失制約了對生產效率和生產力進一步的提升,也限制了對IT系統價值的深度挖掘。應用深化,通訊融合是IP化之

[js高手之路]原型對象(prototype)原型鏈相關屬性方法詳解

隱式 之前 username tar uname create pro getproto .get 一,instanceof: instanceof檢測左側的__proto__原型鏈上,是否存在右側的prototype原型. 我在之前的兩篇文章 [js高手之路]構造函數的基

屬性方法(待補充)

訪問 attr att 類定義 class bsp 使用 fuck ttr 類屬性與方法 類的私有屬性 __private_attrs 兩個下劃線開頭,申明該屬性為私有,不能在類的外部被使用或直接訪問。在類內部的方法中使用時self.__private_attrs

document的屬性方法小結

片元 寫入 clas 等價 追加 import 接受 文檔 tle document節點是文檔的根節點,每張網頁都有自己的document節點。屬性:1:document.doctype----它是一個對象,包含了當前文檔類型 (Document Type Declarat

數組(Array) 字符串(String)公用的屬性方法

con 提取 方法 ron 連接 ray str 通過 index 數組與字符串都有很多方法,有一些方法是公用的,在這裏就將數組與字符串公用的方法提取出來,方便大家的記憶 1. length 可通過str.length與arr.length分別取到字符串與數組的長度; 2.

h5新的屬性方法

document.webkitCancelFullScreen() 收起全屏, 注意是document物件 Node.webkitRequestFullScreen() 開啟全屏顯示    這裡Node是video或者任意盒子 在判斷是否全屏或收起全屏 if(webk

python3__面向物件__類的內建屬性方法

0.object類原始碼 class object: """ The most base type """ def __delattr__(self, *args, **kwargs): # real signature unknown """ Impleme

window---屬性方法

外部物件:BOM和DOM BOM:瀏覽器物件模型:             提供了訪問和操作瀏覽器各元件的方式。             將瀏覽器比喻成一個物件-window(

函式屬性方法

<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> &l

Vector向量的屬性方法 u3d學習總結筆記本

1.Vector2(x,x)的簡寫。 2.Vector2各種屬性值 3.Vector2各種方法 //=================================== 1.Vector2(x,x)的簡寫。 print(Vector2.down);//編寫Vect

第三章 條件語句迴圈方法

一、概述 流程控制語句是用來控制程式中各語句執行順序的語句,可以把語句組合成能完成一定功能的小邏輯模組。其流程控制方式採用結構化程式設計中規定的三種基本流程結構,即:順序結構、分支結構和迴圈結構。 二、選擇結構 2.1條件語句if if分支結構分為三種:if、if e

jBox屬性方法

<script src="https://code.jquery.com/jquery-3.3.1.min.js"></script> <script src="https://cdn.jsdelivr.net/gh/StephanWagne