GoJS API学习
var node = {};
node["key"] = "节点Key";
node["loc"] = "0 0";//节点坐标
node["text"] = "节点名称";
// 添加节点 通过按钮点击,添加新的节点到画布
myDiagram.model.addNodeData(node);
if (myDiagram.commandHandler.canDeleteSelection()) {
// 删除选中节点或线,页面上有个按钮点击,可以删除选择的节点和线
myDiagram.commandHandler.deleteSelection();
return;
}
// 获得当前画布的json,获取当前画布的所有元素的json,用来保存
var model= myDiagram.model.toJson();
//model=eval('('+model+')');若格式异常抓一下
var nodes=model.nodeDataArray;取出所有节点
var Links=model.linkDataArray;取出所有线
// 加载json刷新画布,一般用来刷新和加载画布上的元素
model=myDiagram.model.toJson()
myDiagram.model = go.Model.fromJson(model);
// 通过节点key获取节点,知道节点key ,拿到这个节点的详细信息
var node = myDiagram.model.findNodeDataForKey('key');
var node = myDiagram.model.findNodeDataForKey('key');
//首先拿到这个节点的对象
myDiagram.model.setDataProperty(node, 'color', "#ededed");
//然后对这个对象的属性进行更改,更改节点属性值,更改节点的颜色,或者大小等
// 获取获得焦点的第一个元素,可为节点或者线
var node=myDiagram.selection.first();
console.log(node.data.key);
//用例获取选中的节点或线
var nodeOrLinkList=myDiagram.selection;
nodeOrLinkList.each(function(nodeOrLink) {
console.log(nodeOrLink.data);
});
// 获取画布所有节点对象myDiagram.nodes获取所有获得焦点的节点
var items='';
for(var nit=myDiagram.nodes;nit.next();){
var node=nit.value;
if(node.isSelected){
items+=node.data.key+",";
}
}
console.log(items);
// 遍历整个画布的节点信息写法
for(var nit=myDiagram.nodes;nit.next();){
var node=nit.value;
var key=node.data.key;
var text=node.data.text;
}
// 给节点添加线
myDiagram.model.addLinkData({ from: "节点的Key", to: "连到另一节点的key" })
// 删除线
myDiagram.model.removeLinkData(linkData);
//批量删除线
{Array|iterator} removeLinks
removeLinkDataCollection(removeLinks);
var removeLinks=[];
//首先拿到这个节点的对象
var node = myDiagram.findNodeForKey('key');
//获取节点所有线
node.findLinksConnected().each(function(link) {
removeLinks.push(link.data);
}
);
myDiagram.model.removeLinkDataCollection(removeLinks);
// 模糊获取线(版本1.68以上)注意值类型,字符串和数值 匹配 方式和模糊获取节点的规则一致
myDiagram.findLinksByExample(data);
//注意值类型,字符串和数值
//如果json中是from:1.1,写成from:"1.1"就会查询不到
var links=myDiagram.findLinksByExample({from:1.1, to:2.1});
links.iterator.each(function (link) {
console.log(link.data);
});
var newdata = { "text":"AAAA", "key":-33,"loc":"0 0" };
myDiagram.model.addNodeData(newdata);
var newdat2= myDiagram.model.findNodeDataForKey('-3');
console.log(newdat2);
var node = myDiagram.findNodeForData(newdat2);
console.log(node);
myDiagram.select(node);//选中节点
// 特殊案例API用法
myDiagram.findNodeForData(objNode);
myDiagram.findLinkForData(objLink);
// 其中objNode或者objLink,只能从画布的json 对象取出,不能直接手写例如
var newdata={"text":"AAAA","key":-33,"loc":"0 0"};
var node = myDiagram.findNodeForData(newdat2);
// 除了刚好是新建的节点外,,不然是获取不到这个对象的,因为添加节点时,gojs会自动给节点或者线添加一个属性
// 节点选中改变事件 selectionChanged: 回调的函数方法名
//该属性要写在$(go.Node,)内用大括号括起来
myDiagram.nodeTemplate =
$(go.Node, "Horizontal",
{ selectionChanged: nodeSelectionChanged },
//节点选中改变事件,nodeSelectionChanged为回调的方法名
$(go.Panel, "Auto",
$(go.Shape,//节点形状和背景颜色的设置
{ fill: "#1F4963" },
new go.Binding("fill", "color")
),
)
);//go.Node的括号 //回调方法 节点选中的时候是一种颜色,取消选中是另一种颜色
function nodeSelectionChanged(node) {
if(node.isSelected) {//
//节点选中执行的内容
console.log(node.data);//节点的属性信息
console.log(node.data.key);//拿到节点的Key,拿其他属性类似
var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
myDiagram.model.setDataProperty(node1, "fill", "#ededed");
} else {
//节点取消选中执行的内容
var node1 = myDiagram.model.findNodeDataForKey(node.data.key);
myDiagram.model.setDataProperty(node1, 'fill', "1F4963 ");
}
}
// 节点双击事件
doubleClick : function(e, node){
//node为当前双击的节点的对象信息
}
//该属性要写在$(go.node,)内用大括号括起来
myDiagram.nodeTemplate =
$(go.Node, "Horizontal",
$(go.Panel, "Auto",
$(go.Shape,//节点形状和背景颜色的设置
{ fill: "#1F4963" },
new go.Binding("fill", "color")
),
{doubleClick : function(e, node){// 双击事件
handlerDC(e, node);//双击执行的方法
}
}
)
);//go.Node的括号 //双击执行的方法
function handlerDC(e, obj) {
var node = obj.part;//拿到节点的json对象,后面要拿什么值就直接.出来
var procTaskId = node.data.key;
var procTaskName = node.data.text;
var description = node.data.description;
var procTmplId = node.data.tmplId;
}
// 该例子主要应用场景为,双击节点,得到节点的详细信息,弹出窗口修改节点的信息
// 从Palette拖过来节触发的事件
myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
console.log(e);
}); myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
e.subject.each(function(n){
//得到从Palette拖过来的节点
console.log(n.data.key);
});
});
// 当前画布被拖动的节点 未测试
myDiagram.addDiagramListener("Modified", function(e) {
myDiagram.isModified = false; iter = myDiagram.selection.iterator; while (iter.next()) {
var part = iter.value;
if (part instanceof go.Link) {
if ( ( part.data.from == 0 || part.data.from == undefined) || ( part.data.to == 0 || part.data.to == undefined ) ) {
myDiagram.model.setDataProperty(part.data, 'link-color', 'red');
console.log(part.data);
console.log("非法");
} else if(part.data.from > 0 || part.data.from < 0 ) {
var node = myDiagram.findNodeForKey(part.data.from);
if (!node) {
console.log("非法");
}
}else if(part.data.to > 0 || part.data.to < 0 ) {
var node = myDiagram.findNodeForKey(part.data.to);
if (!node) {
console.log("非法");
}
}
}
}
var $ = go.GraphObject.make;
// 定义画布的基本属性 这里绑定画布所用的div,并保存在myDiagram中,后续的节点设置均使用这个变量,意思是在这个画布上定义节点和操作节点
myDiagram = $(go.Diagram, "myDiagram", //画布绑定的Div的ID
{
initialContentAlignment: go.Spot.Center, // 画布的位置设置(居中,靠左等)
allowDrop: true, // must be true to accept drops from the Palette
"LinkDrawn": showLinkLabel, //
"LinkRelinked": showLinkLabel,
"animationManager.duration": 600, // 画布刷新的加载速度
"undoManager.isEnabled": true, // "toolManager.mouseWheelBehavior": go.ToolManager.WheelZoom,
allowZoom: true // 允许缩放,false为否
isReadOnly: false // 是否禁用编辑 false否,
true是 //ismodelfied:true //禁止拖拽 });
// 定义单种节点
myDiagram.nodeTemplate=$(go.Node,***)
//***为对节点的定义
myDiagram.nodeTemplate =
$(go.Node, "Horizontal",
{ selectionChanged: nodeSelectionChanged },
//节点选中改变事件,nodeSelectionChanged为回调的方法名
$(go.Panel, "Auto",
$(go.Shape,//节点形状和背景颜色的设置
{ fill: "#1F4963", stroke: null }
),
$(go.TextBlock,
{ font: "bold 13px Helvetica, bold Arial, sans-serif",//字体
editable:true,
stroke: "white",//颜色
margin: 3 },
new go.Binding("text", "key")
)//go.TextBlock,的括号
)//go.Panel 的括号
);//go.Node的括号
// 定义多种节点(画布上有多种节点)
myDiagram.nodeTemplateMap.add("A种节点",$(go.Node,***))
//一种类型的节点
myDiagram.nodeTemplateMap.add("Start",
$(go.Node, "Spot",
$(go.Panel, "Auto",
$(go.Shape, "Circle", {
minSize: new go.Size(40, 40),
fill: "#79C900",
stroke: null
})
)
)//go.Node的括号
);
//另一种类型的节点
myDiagram.nodeTemplateMap.add("End",
$(go.Node, "Spot",
$(go.Panel, "Auto",
$(go.Shape, "Circle", {
minSize: new go.Size(40, 40),
fill: "#DC3C00",
stroke: null
})
)
)//go.Node的括号
); //添加不同种类的节点
var node = {};
node["text"] = "2222";
node["key"] = "33";
node["loc"] = "0 0";
node["category"] = "Start";//category
myDiagram.model.addNodeData(node);
// 定义线
myDiagram.linkTemplate=$(go.Link,***);
//添加监听节点生成事件
myDiagram.addDiagramListener("externalobjectsdropped", function(e) {
e.subject.each(function(n){
console.log(n.data.key);
});
});
//添加监听线生成事件
myDiagram.addDiagramListener("LinkDrawn", function(e) {
console.log(e.subject.data.to);
})
//监听节点删除事件
myDiagram.addDiagramListener("SelectionDeleted", function(e) {
e.subject.each(function(n){
console.log(n.data.key);
});
})
//节点
//获取节点实际边界(宽高)
node.naturalBounds 返回值Rect(0,0,126,31)
//添加节点
myDiagram.model.addNodeData(nodeData);
//删除节点
myDiagram.model.removeNodeData(nodeData);
//选中单个节点或线
myDiagram.select(node);
//更改属性值
myDiagram.model.setDataProperty(nodeData, 'color', "#ededed");
//根据节点数据对象更改节点属性
myDiagram.model.updateTargetBindings(nodeData);
var nodeData = myDiagram.model.findNodeDataForKey('4.1');
nodeData.text = "2333"
nodeData.color = "#000000";
myDiagram.model.updateTargetBindings(nodeData);
//获取节点对象
var node=myDiagram.findNodeForKey('key');
//获取节点data
var nodeData=myDiagram.model.findNodeDataForKey('key');
//批量删除节点
myDiagram.model.removeNodeDataCollection(nodes)
var removeNodes = [];
var aNodeData = myDiagram.model.findNodeDataForKey('Akey');
var bNodeData = myDiagram.model.findNodeDataForKey('Bkey');
removeNodes.push(aNodeData );
removeNodes.push(bNodeData);
myDiagram.model.removeNodeDataCollection(removeNodes); //模糊获取节点(版本1.68以上)注意值类型,字符串和数值
myDiagram.findNodesByExample(data);
匹配方式默认为===运算符进行比较。
/abc/ 匹配包含“abc”的任何字符串
/abc/i 匹配包含“abc”的任何字符串,忽略大小写
/^no/i 匹配任何以“no”开头的字符串,忽略大小写
/ism$/匹配任何以“ism”结尾的字符串
/(green|red) apple/ 匹配包含“green apple”或“red apple”的字符串 //注意值类型,字符串和数值,
//如果json中是1.1,写成"1.1"就会查询不到
var data={};
data.text="设计";
// data.text=/设计/;
// data.text=/设计/i;
// data.text=/^设计/;
// data.text=/设计$/;
// data.text=/(勘|察)设计/;
var nodes = myDiagram.findNodesByExample(data);
nodes.iterator.each(function (node) {
console.log(node.data);
});
//更改属性值
myDiagram.model.setDataProperty(linkData, 'from', "-2");
//获取节点的线
{string | null =} PID 端口ID
findLinksConnected(PID)
var node=myDiagram.findNodeForKey('key');
node.findLinksConnected().each(function(link) {console.log(link.data)});
//获取进入节点的线
{string | null =} PID 端口ID
findLinksInto(PID)
var node=myDiagram.findNodeForKey('key');
node.findLinksInto().each(function(link) {console.log(link.data)});
//获取从节点出来的线
{string | null =} PID 端口ID
findLinksOutOf(PID)
var node=myDiagram.findNodeForKey('key');
node.findLinksOutOf().each(function(link) {console.log(link.data)});
//获取A-B节点之间的线
{node } othernode B节点对象
{string | null =} PID 端口ID
{string | null =} otherPID B节点端口ID
findLinksBetween(othernode, PID, otherPID)
var nodeA=myDiagram.findNodeForKey('key');
var nodeB=myDiagram.findNodeForKey('key');
nodeA.findLinksBetween(nodeB).each(function(link) {console.log(link.data)});
//树节点
//根据甲,找甲的所有父级(包括甲)
node.findTreeParentChain();
node.findTreeParentChain().each(function(pNode) {
console.log(pNode.data)
});
//根据甲,找甲的所有子级(包括甲)
node.findTreeParts();
node.findTreeParts().each(function(sNode) {
console.log(sNode.data)
});
//根据甲,找甲的父亲
node.findTreeParentNode();
var pNode=node.findTreeParentNode();
//根据甲,找甲的孩子们
node.findTreeChildrenNodes();
node.findTreeChildrenNodes().each(function(cNode) {
console.log(cNode.data)
});
基础画布定义API
//画布初始位置
initialContentAlignment: go.Spot.Center,
//画布位置,定义后就不能拖动画布了,画布位置交由gojs管理 contentAlignment:go.Spot.Center,
//初始坐标
initialPosition: new go.Point(0, 0)
//禁止移动节点
allowMove:false
//禁止复制
allowCopy: false
//禁止删除
allowDelete:false
//禁止选中
allowSelect:false
//禁止缩放
allowZoom: false
//禁止撤销和重做
"undoManager.isEnabled": false
//禁止水平滚动条
allowHorizontalScroll: false
//禁止垂直滚动条
allowVerticalScroll: false
//只读
isReadOnly: true
//画布初始化动画时间
"animationManager.duration": 600
//禁止画布初始化动画
"animationManager.isEnabled": false
//画布比例
scale:1.5
//画布比例自适应
autoScale:go.Diagram.Uniform,
//画布比例自适应
autoScale:go.Diagram.UniformToFill,
//默认值不自适应
autoScale:go.Diagram.None,
//画布最小比例
minScale:1.2,
//画布最大比例
maxScale:2.0,
//显示网格
"grid.visible":true,
//画布边距
padding
padding:80或者new go.Margin(2, 0)或new go.Margin(1, 0, 0, 1) 画布节点连线定义
//只允许有一个父节点
validCycle:go.Diagram.CycleDestinationTree validCycle:go.Diagram.CycleNotUndirected validCycle:go.Diagram.CycleNotDirected validCycle:go.Diagram.CycleSourceTree //禁止鼠标拖动区域选中
dragSelectingTool "dragSelectingTool.isEnabled" : false,
//或者在画布对象myDiagram创建后再调用
myDiagram.toolManager.dragSelectingTool.isEnabled = false ; validCycle
默认无限制 validCycle:go.Diagram.CycleAll 节点之间连线随便连
一个节点只允许有一个父节点,并且没有定向循环(仅允许维护树结构的链接) validCycle:go.Diagram.CycleDestinationTree
禁止A→C,B→C 节点的有效链接不会在图中产生有向循环
validCycle:go.Diagram.CycleNotDirected 禁止A-B-C-A
节点的有效链接不会在图中产生无向循环
validCycle:go.Diagram.CycleNotUndirected 一个节点只允许有一个子节点并且没有定向循环。 validCycle:go.Diagram.CycleSourceTree 禁止A→B,A→C 画布监听事件API
节点生成事件 externalobjectsdropped
线生成事件 LinkDrawn
线重新连接事件 LinkRelinked
删除后事件 SelectionDeleted
删除前事件 SelectionDeleting 例子入口
节点移动事件 SelectionMoved
//监听节点或线的删除事件
myDiagram.addDiagramListener("SelectionDeleted", function(e) {
e.subject.each(function(n){
console.log(n.data.key);
});
})
自动布局API
//网格布局
go.GridLayout
//力导向布局
go.ForceDirectedLayout
//树形布局
go.TreeLayout
//径向布局(需要引RadialLayout.js)
RadialLayout
// 用例定义画布节点为网格布局
myDiagram =
$(go.Diagram, "myDiagramDiv", // 画布定义
{
layout: $(go.GridLayout, //自动布局定义,设置为网格布局
{
comparer: go.GridLayout.smartComparer, //设置从小到大排序
spacing: go.Size.parse("20 20"), //设置节点间隔
comparer: function (a, b) {
//重写布局算法,根据其他属性值重新增设置顺序
var ay = a.data.type;
var by = b.data.type;
if (!!ay && !!by) {
if (ay > by) return -1;
if (ay < by) return 1;
} else if (!!ay) {
return -1;
} else if (!!by) {
return 1;
}
}
});
});
GoJS API学习的更多相关文章
- Openstack api 学习文档 & restclient使用文档
Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...
- ASP.NET MVC Web API 学习笔记---第一个Web API程序
http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...
- Openstack python api 学习文档 api创建虚拟机
Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...
- Windows录音API学习笔记(转)
源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...
- NSData所有API学习
www.MyException.Cn 网友分享于:2015-04-24 浏览:0次 NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...
- Node.js API 学习笔记
常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...
- 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)
一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...
- RESTful API 学习
/********************************************************************************* * RESTful API 学习 ...
- Windows录音API学习笔记
Windows录音API学习笔记 结构体和函数信息 结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { WORD wMid; 用于波形 ...
随机推荐
- ubuntu开启mysql远程连接,并开启3306端口
mysql -u root -p 修改mysql库的user表,将host项,从localhost改为%.%这里表示的是允许任意host访问,如果只允许某一个ip访问,则可改为相应的ip mysql& ...
- np.ndarray与PIL.Image对象相互转换
Image对象有crop功能,也就是图像切割功能,但是使用opencv读取图像的时候,图像转换为了np.adarray类型,该类型无法使用crop功能,需要进行类型转换,所以使用下面的转换方式进行转换 ...
- 解决HTML5(富文本内容)连续数字、字母不自动换行
最近开发了一个与富文本相关的功能,大概描述一下:通过富文本编辑器添加的内容,通过input展示出来(这里用到了 Vue 的 v-html 指令). 也是巧合,编辑了一个只有数字组成的长文本,等到展示的 ...
- 夯实Java基础(二十四)——Java8新特征之Optional类
1.概述 对于Java程序员来说,到目前为止出现次数最多的应该是NullpointException,它是导致Java应用程序失败的最常见原因.之前处理空指针我们必须先通过条件先去判断,然后再确认是否 ...
- springboot 重写 AuthorizationFilter
原文链接:https://www.cnblogs.com/zeussbook/p/10778532.html
- sparkRDD:第4节 RDD的依赖关系;第5节 RDD的缓存机制;第6节 DAG的生成
4. RDD的依赖关系 6.1 RDD的依赖 RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency)和宽依赖(wide dependency ...
- 使用mvn deploy命令将本地jar包上传到maven私服
记录一下,以后少走弯路 前提:已经搭建好nexus maven私服,地址192.168.110.240:9091 在maven的setting.xml中找到<mirrors></mi ...
- 解题报告:luogu P5543 [USACO19FEB]The Great Revegetation S
题目链接:P5543 [USACO19FEB]The Great Revegetation S 好坑啊,都身败名裂了. 思路一: 考虑染色法,跑一遍搜所就好了,不给代码了. 思路二: 考虑并查集,我想 ...
- R语言 一个向量的值分派给另一个向量
group = sample(seq(1,10),size = 20,replace = T) #这20个组分别属于1,...,10 v = rnorm(length(unique(group)),0 ...
- Python 基础之面向对象之常用魔术方法
一.__init__魔术属性 触发时机:实例化对象,初始化的时候触发功能:为对象添加成员,用来做初始化的参数:参数不固定,至少一个self参数返回值:无 1.基本用法 #例:class MyClass ...