Gojs学习史(一):基本定义

摘要:
//居中布局:接下来的ID。图是画布放置在html中的div的ID。下一步要做的是声明可以在画布上绘制的节点和流程线模板(黑板:myDiagram.nodeTemplate=Go(Go.Node,//Node-shape)//节点样式{fill:Node){//双击eventconsole.log(Node.part.data);光标:

1. gojs定义
初始化时,先简化gojs本身的方法:

var Go = go.GraphObject.make; //简化方法

1.1 画布定义
在声明了Go方法之后,接下来就是定义画布:

myDiagram = Go(go.Diagram,"myDiagramDiv",{
    initialContentAlignment:go.Spot.Center, //居中
    layout:Go(go.ForceDirectedLayout,{
        defaultSpringLength: 30,
        defaultElectricalCharge: 100
    })        

}); //定义画布用于装载具体内容
在这里比较需要注意的是,go.Diagram隔壁的id是html里面放置画布的div的id。此时myDiagram就成为一个对象了。按照我的理解,接下来要做的事情就是声明可以绘制在画布上的节点(node)和流程线(link)模板(敲黑板:这里声明的只是模板而已,在之后还需要载入数据生成真正的实例)。

1.2 节点定义
首先定义myDiagram的nodeTemplate,也就是节点模板:

myDiagram.nodeTemplate =
    Go(go.Node,"Horizontal", //节点布局
        Go(go.Panel, //节点面板定义
            "Auto", //节点面板子元素布局
        Go(go.Shape, "RoundedRectangle",//节点形状
        //节点样式
        {
            fill:"red",
        },
        new go.Binding("fill","color"),
    ),{
        doubleClick:function(e, node){ //双击事件
        console.log(node.part.data);
    },
        cursor:"pointer"//改变光标样式
      }
    ),
    Go(go.TextBlock,
        {
            font:'bold 10pt helvetica, bold arial, sans-serif',
            margin:4
        },
        new go.Binding("text","text")
        )
); //定义了一份节点模板,该模板定义了两个模型,一个是形状(shape)里面的圆角矩形(RoundedRectangle),一个是文本(textBlock),go.Binding是申明动态绑定text属性。                    

Shape类型:

Shape 
矩形Rectangle
圆角矩形RoundedRectangle
椭圆Ellipse
菱形Diamond
三角形(向右)TriangleRight
三角形(向下)TriangleDown
三角形(向左)TriangleLeft
三角形(向上)TriangleUp
减号线MinusLine
加号线PlusLine
x线XLine

所有节点都可以通用的属性:

Gojs学习史(一):基本定义第1张


TextBlock:

Gojs学习史(一):基本定义第2张


节点、线通用的事件:

 Gojs学习史(一):基本定义第3张

1.3 线定义
在有节点模板之后,还要定义一个流程线模板。即myDiagram的linkTemplate:

myDiagram.linkTemplate =
    Go(go.Link,
        { adjusting: go.Link.Stretch, reshapable: true },
            new go.Binding("points").makeTwoWay(),
    Go(go.Shape,
    {
        isPanelMain: true,
        stroke: "black"
    }),
    Go(go.Shape,
    {
        toArrow: "standard",
        stroke:null
    }),
    Go(go.TextBlock,
    {
        textAlign: "center",
        segmentOffset: new go.Point(0, -10),
        font: "10pt helvetica, arial, sans-serif",
        stroke: "#555555",
        margin: 4
    },
    new go.Binding("text", "text")
)
); //定义了流程线模板(可是是虚线,实线,带箭头,不带箭头),这里包含了两个形状和一个文本,两个形状一个用来画线,一个用来画箭头,文本用来显示线上面的label。            

1.4 数据格式定义
在定义完节点模板和流程线模板后,需要载入数据,生成实例。数据格式为:

var jsonData = {
nodeKeyProperty: "key",
nodeDataArray: [
    {key:1,text:"节点a"},
    {key:2,text:"节点b"},
    {key:3,text:"节点c"},
],
linkDataArray:[
    {from:1,to:2,text:"我是节点a指向节点b"},
    {from:2,to:3,text:"我是节点b指向节点c"},
    {from:3,to:1,text:"我是节点c指向节点a"},
],
}; //数据结构是固定的,包含了nodeKeyProperty、nodeDataArray、linkDataArray三个属性,分别是关联的主键,节点的数据,节点对应关系数据。    


1.5 载入节点数据

myDiagram.model = go.Model.fromJson(jsonData);


在载入完model的数据之后,一块有节点及流程线的画布就绘制完成了。并且双击节点(doubleClick)时,会在控制台输出节点数据。

免责声明:文章转载自《Gojs学习史(一):基本定义》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Java IO 关闭流的方式针对IE浏览器里面CSS的Bug解决方法下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

分布式数据库中的事务时序

概述 在单机数据库领域,我们为每个事务都分配一个序列号,比如Oracle的SCN(SystemChangeNumber),MySQL的LSN(LogSequenceNumber),这个序列号可以是逻辑的,也可以是物理的。我们依赖这个序列号对系统中发生的事务进行排序,确保所有事务都有严格的先后关系。数据库中所有的事务都按分配的序列号排序,对于任何时间点发生的...

关于vue-router中点击浏览器前进后退地址栏路由变了但是页面没跳转

情景: 在进行正常页面跳转操作后(页面A跳转到页面B),点击浏览器的左上角的‘后退’按钮,点击后,可以看到url地址已经发生了变化(url由页面B变为页面A),hash值也已经是上一页的路由,但是浏览器显示的内容却没有发生变化(依旧是页面B)。 没有任何报错(页面A和页面B无任何js错误或者兼容性错误)。 若有错误也会导致页面跳转不成功,页面依旧是当前页面...

Centos7查看、打开和关闭防火墙

Centos7使用的是firewalld作为防火墙,而不是iptables了 在root权限下: 查看防火墙状态 有两种方法 : 方式1、 firewall-cmd --state 现在处于打开状态。 方式2、 systemctl status firewalld active,处于打开状态。 关闭防火墙 关闭防火墙,分两种情况: 一种是临时关闭...

lua以xpcall实现try/catch功能

-- 打印错误信息 local function __TRACKBACK__(errmsg) local track_text = debug.traceback(tostring(errmsg), 6); print("---------------------------------------- TRACKBACK -------...

ParseCrontab类,解析时间规则

<?php /** * Created by PhpStorm. * User: ClownFish 187231450@qq.com * Date: 14-12-27 * Time: 上午11:59 */ class ParseCrontab { static public $error; /** * 解析...

ios原生项目内嵌u3d工程

本文一反常态,目标是把u3d工程以framewWork形式 内嵌原生IOS项目 1、xcode中新建Cocoa Touch FrameWork。取名u3dFrameWork 2、把u3d导出的xcode中,Class、Library 拷贝到u3dFrameWork 中 采用  方式引入 从library中移除掉libil2cpp 3 以下头文件移动到pub...