mxgraph淺入


mxgraph淺入

參考文獻:https://www.cnblogs.com/xuxg/articles/3246206.html 

1.了解

(1)如何判斷需要引入mxgraph產品:過程圖、工作流和BPM的可視化圖表、流程圖、交通或水流量、 數據庫和WWW的可視化、網絡和電信顯示、映射應用和地理信息系統、UML圖、電子線路、金融、 超大規模集成電路和社會網絡、數據挖掘、生化、生態循環、實體和因果關系和組織圖表。

(2)如何選取自己需要mxgraph產品的哪一個庫:mxGraph分為在客戶端的JavaScript庫和在服務器端兩種支持的語言之一的.NET或Java庫

(3)選取產品的javasript庫,底層使用哪種技術實現:mxGraph使用在瀏覽器上的客戶端的JavaScript功能。而在JavaScript代碼層面上,在瀏覽器中使用了基本的矢量圖形語言來顯示圖形, (對於大多數符合標准的瀏覽器使用SVG技術,而在IE中使用了的VML技術)

2.安裝

(1)mxgraph以zip包的形式發布;解壓之后可以看到不同的開發庫;

donet:服務端.net代碼;

java:Java服務器端類;

JavaScript:客戶端功能。

 (2)也可以通過使用npm進行安裝

npm install mxGraph -- save

3.使用

目錄如下

代碼解析如下

(1)導入

源碼中部分實現代碼

mxBasePath指定mxgraph的根路徑,防止庫路徑改變引起的引入路徑錯誤問題;該指定需在引入mxClient之前

(2)判斷對瀏覽器的支持性

(3)mxutils底下封裝的消息彈窗示例

mxUtils.alert();mxUtils.popup();mxUtils.prompt();mxUtils.confirm();mxUtils.error();

(4)創建容器,平鋪整個畫布,方便我們驗證

(5)mxclient底下封裝了mxDivResizer對樣式重置,處理IE怪異模式底下的樣式問題

------大概看了一下源碼,是對頁面寬高的重新計算,沒有深究是處理怎么樣的怪異模式顯示問題

(6)mxEvent底下封裝了阻止出發容器里面的默認事件,源碼核心preventDefault,禁止瀏覽器默認的右鍵菜單啦

(7)開始繪圖,示例一個mxGraph進行繪制,源碼中有隊svg和vml支持性的判斷,核心有createGraphView,createHtml類等

(8)mxgraph的模型-mxGraphModel (/model/mxgraphModel.js)

是mxgraph的核心類,對於圖形的添加,修改,清除,在該類中實現。對於模型的每一個變化,請調用beginUpdate(), 作出適當的調用更改模型,然后調用endUpate()方法來完成的變化,通知發送變化的事件出去。

model常用的api

add(parent, child, index)
remove(cell)
setCollapsed(cell, collapsed)
setGeometry(cell, geometry)
setRoot(root)
setStyle(cell, style)
setTerminal(cell, terminal, isSource)
setTerminals(edge,source,target)
setValue(cell, value)
setVisible(cell, visible)
也就是說使用上述api時,需要使用調用beginUpdate()和endUpdate()

mxGraphModel.beginUpdate() - 啟動一個事務或子事務處理。

mxGraphModel.endUpdate() - 完成一個事務或子事務處理。

mxGraph.addVertex() - 添加一個新頂點到指定的父單元(對於cell的操作)。

mxGraph.addEdge() - 添加一個邊緣到指定的父單元(對於cell的操作)。

(9)單元對象-mxCell

插入單元:var v1 = graph.insertVertex(parent, null, 'Hello', 20, 20, 80, 30, 'defaultVertex;fillColor=blue');

mxGraph.setCellStyle(style, cells) – 封裝在開始/結束的更新中, 指定一組單元的格式。

mxGraph.getCellStyle(cell)

mxGraph.setCellStyle(style, cells) – 封裝在開始/結束的更新中, 指定一組單元的格式。

mxGraph.getCellStyle(cell)

(10)組結構

mxGraph.groupCells(group, border, cells) – 在開始/結束更新之間,把指定的單元加入到指定的組

mxGraph.ungroupCells(cells) – 把特定的單元從它的父單元中移除, 並把它們加入到它們父單元的父單元。操作之后的空組會被刪除。這些操作都是在開始/結束更新之間發生。

(11)初始化的API

畫布大小

wnd.setMaximizable(true);

wnd.setResizable(true);

wnd.setVisible(true);

wnd.setScrollable(true);

圖像大小

graph.zoomIn();

graph.zoomOut();

// 禁用瀏覽器默認的右鍵菜單欄

mxEvent.disableContextMenu(container);

// 在已有容器內構造一個graph

var graph = new mxGraph(container);

// 鼠標框選

new mxRubberband(graph);

// 在圖形中創建默認組件

var parent = graph.getDefaultParent();

// 只可預覽不可選中拖動連接

graph.setEnabled(false);

// 容器大小自適應

graph.setResizeContainer(true);

// 動態改變樣式

graph.getView().updateStyle = true;

// 可否重復連接

graph.setMultigraph(false);

// 禁止改變元素大小

graph.setCellsResizable(false);

// 允許連線的目標和源是同一元素

graph.setAllowLoops(true);

 4.源碼框架解析

 1.mxgraph的javascript庫分為8個類;頂級引入的是mxClient類,包括其他的類

mxClient.include(mxClient.basePath+'/js/util/...

mxClient.include(mxClient.basePath+'/js/shape/...

mxClient.include(mxClient.basePath+'/js/layout/...

mxClient.include(mxClient.basePath+'/js/model/...

mxClient.include(mxClient.basePath+'/js/view/...

mxClient.include(mxClient.basePath+'/js/handler/...

mxClient.include(mxClient.basePath+'/js/editor/...

mxClient.include(mxClient.basePath+'/js/io/...

父類引入子類得方法如下:

(1)圖編輯器包:editor(主要類是mxEditor);

(2)事件監聽:handler(用於框架選擇:mxRubberband;工具提示:mxTooltipHandler;單元修改:mxGraphHandler);

(3)布局處理:layout(實現樹形布局算法:mxCompactTreeLayout;)

mxShape的子類mxPolyline如下繼承:

(4)各種形狀包:shape(shape包提供各種形狀,這些形狀是mxShape的子類)

 (5,6)圖像的處理:view,model(核心類:mxGraph)

/*********************************************引用start************************************************/

mxGraph指的是包含了mxCells並緩存mxGraphView中單元格的狀態的mxGraphModel。根據mxStylesheet中定義的外觀,使用mxCellRenderer繪制單元格。撤消歷史記錄在mxUndoManager中實現。要在圖表上顯示圖標,可以使用mxCellOverlay。驗證規則使用mxMultiplicity定義
/*********************************************引用end************************************************/

  (7) 其他類需要用到的實用方法:util(復制粘貼的mxClipboard;跨瀏覽器事件處理:mxEvent;通用功能:mxUtils;國際化:mxResource;)

(8)將JavaScript對象轉換為XML:io


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM