GoJS互動式圖形庫常用的方法(二)
GoJS互動式圖形庫常用的方法
歡迎進入GoJS世界
官網連結:https://gojs.net.cn/
簡介:GoJS是一個JavaScript和TypeScript庫,用於構建互動式圖形。
從簡單的流程圖和組織結構圖到高度定製的工業圖,SCADA和BPMN圖,醫學圖(如基因圖和爆發模型圖)等等。GoJS通過使用可自定義的模板和佈局使構建複雜節點、連結和組的圖變得容易。
GoJS提供了用於使用者互動的高階功能,例如拖放,複製和貼上,文字編輯,工具提示,上下文選單,自動佈局,模板,資料繫結和模型,事務狀態和撤消管理,調色盤,概述,事件處理程式,命令,用於自定義操作的可擴充套件工具以及可自定義的動畫。
下面介紹一些我的專案中GoJS常用的基本方法,可能會具體用到專案中去
1.給某一個屬性起別名
//text是原屬性名,textName是別名,定義資料時就可用textName
new go.Binding("text", "textName")).makeTwoWay()
2.畫布內定義某個節點形狀,名稱
myDiagram.nodeTemplateMap.add("new",
$(go.Node, "Spot",
{selectionAdorned: false, textEditable: false, locationObjectName: "BODY"},
//定義位置座標別名“loc”,
new go.Binding("location", "loc", go.Point.parse).makeTwoWay(go.Point.stringify),
$(go.Panel, "Auto", {name: "BODY"},
$(go.Shape, "RoundedRectangle",
{fill: '#EFD272', stroke: '#EFD272', minSize: new go.Size(120, 40)},
),
$(go.TextBlock,
{
stroke: "black", font: "12px sans-serif", editable: true,
margin: new go.Margin(3, 3 + 11, 3, 3 + 4), alignment: go.Spot.Center
},
new go.Binding("text", "text"))
),
$(go.Panel, "Auto",
{alignment: go.Spot.Right, portId: "from", fromLinkable: true, cursor: "pointer"}
)
));
3.定義節點一個屬性隨著某一狀態變化而變化,可用於節點報警等場景
//把這段程式碼新增到節點上,"status"可替換成專案中的某一狀態(表示:節點填充顏色隨著是否高於闕值而變化)
new go.Binding("fill", "status", function (s) {
return s ? "#fd4040" : "#fff";
}).ofObject()
//或者可以換種寫法
new go.Binding("fill", "status", nodeStatusConverter)
function nodeStatusConverter(s) {
if (s > 1) return "#fd4040";
return "#fff";
}
4.定義連線線樣式
myDiagram.linkTemplate =
$(go.Link,
{selectionAdorned: false, fromPortId: "from", toPortId: "to", relinkableTo: true},
$(go.Shape,
{stroke: "#0a0", strokeWidth: 2}
)
);
5.定義節點右鍵按鈕組
同時在定義節點時加上 {contextMenu:commandsAdornmentData}
var commandsAdornmentData =
$("ContextMenu",
$(go.Panel, "Vertical",
$("Button",
$(go.Shape,{
fill: '#1B1D20', stroke: "#3AF5FC",margin:0,maxSize: new go.Size(NaN, 20)
}),
{ click: doSomething() //點選具體操作
},
$(go.TextBlock, "刪除",{stroke: '#3AF5FC'})
),
$("Button",
$(go.Shape,{
fill: '#1B1D20', stroke: "#3AF5FC",margin:0,maxSize: new go.Size(NaN, 20)
}),
{ click: doSomething() //點選具體操作
},
$(go.TextBlock, "詳情",{stroke: '#3AF5FC'})
)
)
);
6.刪除節點資料
{ click: function(e, obj) {
var node = obj.part.adornedPart;
if (node !== null) {
let myDiagram = myDiagram.model;
myDiagram.startTransaction("delete node");
myDiagram.removeNodeData(node.data);
myDiagram.commitTransaction("delete node");
}
}
}
7.儲存資料Json格式
myDiagram.model.toJson()
8.載入儲存過的Json資料
myDiagram.model = go.Model.fromJson(data);
9.根據節點key值,獲取節點完整資料
var node = myDiagram.findNodeForKey(key)
10 .給節點新增一條屬性,並賦值
myDiagram.model.setDataProperty(node, 'id' , 1);
11.根據節點key值,找到節點的所有子節點集合
let treeChildren = diagram.findNodeForKey(treeParentKey).findTreeChildrenNodes();
12.查詢與模型的節點資料物件相對應的節點或組
var newnode = diagram.findNodeForData(data);
13.給定節點資料物件,返回其唯一鍵:數字或字串。如果沒有鍵值,則返回undefined。
通過呼叫setKeyForNodeData可以更改節點資料物件的鍵。
diagram.model.getKeyForNodeData(data)
14.當您要將節點或組新增到圖中時,請使用新的資料物件呼叫此方法。這會將資料新增到nodeDataArray
要從圖中刪除節點,可以通過呼叫removeNodeData來刪除其資料物件
diagram.model.addNodeData(data)
15.當您想新增到圖的連結時,請使用新的資料物件呼叫此方法。這會將資料新增到linkDataArray
假定連結資料物件已經設定了“從”和“到”節點鍵引用,但是也可以在連結資料在模型中之後通過呼叫setFromKeyForLinkData和setToKeyForLinkData來設定它們
diagram.model.addLinkData(linkdata)
16.給某一節點重新命名
diagram.commandHandler.editTextBlock();
17.定義左側或者右側可拖拽palette畫布區域
var palette =
$(go.Palette, "div",
{
//節點模板
nodeTemplate: diagram.nodeTemplate,
contentAlignment: go.Spot.Center
});
palette.model = new go.GraphLinksModel([
{ key: "node", category: "nodeTemplate",text: '文字',loc: "0 0",size:"50 50"}
]);
18.定義左側或者右側可拖拽palette畫布區域(畫布內定義的某一個節點)
palette =
$(go.Palette, 'div',
{
//節點模板
nodeTemplate: diagram.nodeTemplateMap.get('textTemplate'),
contentAlignment: go.Spot.Center
});
palette.model = new go.GraphLinksModel([
{ key: "textNode", category: "textTemplate",text:'預設文字',loc: "0 0",size:"80 26"}
]);
後續繼續更新,可檢視下一篇關於GoJS文章…
本人是小白一個,有不足之處,歡迎各位指正
相關文章
- 23.圖形互動tkinter--menu
- gojs 流程圖框架-節點裝飾器模板(二)GoJS流程圖框架
- 資料視覺化常用圖形都有哪些(二)視覺化
- gojs 流程圖框架-基礎繪圖(一)GoJS流程圖框架繪圖
- ubuntu下圖形程式自啟動的幾種方法Ubuntu
- LiveCharts2:簡單靈活互動式且功能強大的.NET圖表庫Echarts
- halcon運算元之如何畫各種互動ROI圖形
- 【D3.js 入門系列二】理解 Update && Enter && Exit、製作互動式動態圖表JS
- Streamlit 快速構建互動式頁面的python庫Python
- MySQL常用圖形管理工具MySql
- 互動式 .Net
- Go語言中的互動式CLI開發:survey庫簡介Go
- 開源 - Ideal庫 - 常用列舉擴充套件方法(二)Idea套件
- Java工具庫——Hutool的常用方法Java
- 2.3.2 關於使用互動式DBCA建立資料庫資料庫
- 淺析mysql互動式連線&非互動式連線MySql
- Dgraph 1.2.8 釋出,事務性分散式圖形資料庫分散式資料庫
- 技巧:Sketch 快速複製圖形的方法
- Python資料分析--Numpy常用函式介紹(9)--Numpy中幾中常見的圖形Python函式
- 基於 Canvas 的 HTML5 互動式地鐵線路圖CanvasHTML
- 基於HTML5Canvas的互動式地鐵線路圖HTMLCanvas
- ## matplotlib.pyplot庫的知識點之bar函式——繪製條形圖函式
- 瞭解圖形資料庫資料庫
- 2.2 畫出函式圖形函式
- 分段函式圖形繪製函式
- nvidia圖形驅動程式安裝失敗解決方法
- 第歸方法建立樹形圖
- excel中常用函式(二)Excel函式
- C++最好的圖形庫是什麼?C++
- JavaScript 陣列 常用方法(二)JavaScript陣列
- Hive學習之常用互動命令Hive
- 開源 - Ideal庫 - 常用時間轉換擴充套件方法(二)Idea套件
- 互動音樂的五種常用設計理念
- 投影互動牆的三大實現形態介紹
- office 互動庫 Apache POIApache
- Powershell————2、Powershell互動式
- 互動式 .Net 容器版
- 可以玩的UI-iOS互動式動畫UIiOS動畫