1.2.3 • Published 4 years ago

tx-topo v1.2.3

Weekly downloads
84
License
MIT
Repository
-
Last release
4 years ago

tx-topo 拓扑

在vue中使用tx-topo

1. 安装tx-topo

yarn add tx-topo --registry=http://npm.txiiot.cn/

需要通过私有npm仓库安装, 如果未登录私有npm,需要先登录

npm adduser --registry http://npm.txiiot.cn
#username: admin
#password: AAbb123456

3. 在组件中引入tx-topo

import { TopoInstance } from 'tx-topo/dist/txTopo.js'

如果使用编辑器版本,需要引入另外一个js

import { TopoInstance } from 'tx-topo/dist/txTopo.edit.js'

4. 初始化拓扑图

创建canvas容器

<template>
  <div class="content">
    <canvas id="canvas"></canvas>
  </div>
</template>

注意: 1. 必须使用cavas元素,使用其他元素(eg. div)会报错 2. 只能使用id, 作为dom选择器,fabric初始化只接受id

创建Topo对象实例

const mode = 'show' // 模式 show: 展示模式 edit:编辑模式
const theme = 'light' // 主题,目前只支持light和dark
this.topo = TopoInstance('canvas', mode, theme)

5. 渲染静态拓扑图

设置画布样式

const setting = {
  width: 1920, // 画布宽度
  height: 1080, // 画布高度
  fill: '#000000'
}
const fitting = true // 画布是否自适应容器
const width = 1920 // 容器宽度
const height = 1080 // 容器高度
this.topo.setCanvas({ ...setting }, fitting, width, height)

绘制元素

const list = [{
  index: 0,
  type: 'text',
  label: '文本',
  left: 100,
  top: 100,
  fontSize: 14,
  fill: '#000'
}, {
  index: 1,
  type: 'image'
  left: 200,
  top: 200,
  width: 50,
  height: 50,
  url: './src/assets/logo.png'
}]

this.topo.draw(list)

6. 更新拓扑图

update接口可以接受一个数组,可以更新一条或多条元素

const list = [{
  index: 0,
  type: 'text',
  label: '文本1',
  left: 100,
  top: 100,
  fontSize: 14,
  fill: '#000'
}]
this.topo.update(list) //会更新index为0的文本元素为新的文本元素

7. 监听事件

this.topo.canvas.on('mouse:over', function (e) {
  const target = e.target // 当前鼠标悬浮在的元素对象
})

this.topo.canvas.on('mouse:down', function (e) {
  const target = e.target
})

this.topo.canvas.on('mouse:up', function (e) {
  const target = e.target
})

fabric事件列表

  • object:modified
  • object:rotated
  • object:scaled
  • object:moved
  • object:skewed
  • object:rotating
  • object:scaling
  • object:moving
  • object:skewing
  • object:selected this event is deprecated.event: use selection:created
  • before:transform
  • before:selection:cleared
  • selection:cleared
  • selection:updated
  • selection:created
  • path:created
  • mouse:down
  • mouse:move
  • mouse:up
  • mouse:down:before
  • mouse:move:before
  • mouse:up:before
  • mouse:over
  • mouse:out
  • mouse:dblclick
  • event:dragover
  • event:dragenter
  • event:dragleave
  • event:drop

topo json结构说明

整体结构

{
    // 画布属性
    "setting": {
        width: 1017, //svg画布宽度
        height: 612, //svg画布高度
        margin: {top: 0, right: 0, bottom: 0, left: 0}, //svg画布外边距
        url: '', // 画布背景图片地址
        fill: "#000" // 画布背景颜色
    },
    // 元素列表
    "elements": []
}

子元素类型

基础元素

  • Text
  • Image
  • Circle
  • Rect
  • Polyline
  • Polygon
  • Path
  • IText
  • Ellipse
  • Line

widget元素组

  • SwitchHight 高压开关
  • SwitchLow 低压开关
  • Belt 皮带
  • Lift ( progress ) 提升/进度条
  • Scaffold 采煤机支架
  • CoalCutter 采煤机摆臂
  • DrillTrack 掘进截割头轨迹

layer层元素

  • Video 视频
  • Report 报表
  • Chart 图表

Text

    {
        name: '原煤仓', // 元素名称
        index: 1, // 元素层级
        key: '03389D', //动态文字绑定的点
        left: 508, //文字x坐标
        top: 40,  //文字y坐标
        textAlign: 'middle', //坐标相对文字位置: start, middle, end,默认为:start
        lineHeight: 1, //文字行高
        fontSize: '21px', //字体大小,默认大小: 14px
        fontWeight: 'bold', //字体粗细: normal,bold,默认为: normal
        fill: '#262C66', //字体颜色, 默认: #444444
        label: '', //文字内容
        angle: 90, // 文字旋转角度
        value: null, // value默认为null,会
        // 开关量 根据value取对应的config
        config: [{
          label: '',
          fill: '',
          fontSize: ''
        }, {
          label: '',
          fill: ''
          fontSize: ''
        }]
    }

image attrs 图片

{
    name: '1#闸门', //名称,没有特殊用途只是一个标记
    key: 'TF_ZM1_KDW', //绑点,只有动态元素里面需要
    left: 308, //x坐标
    top: 108, //y坐标
    width: 108, //图片宽度
    height: 94, //图片高度
    angle: 90, //围绕图片的中心,顺时针旋转90度
    url: require('@/assets/img/vent/gate-motor-up-off.png'), //图片地址
    // 动态图片列表: 和key配合使用,实现动态切换图片(只有动态元素里面需要)
    // 目前只支持0, 1,即true,false的状态切换,根据key的值,取对应位置的图片
    // 0:数组0位置放停止状态图片
    // 1: 数据1位置放运行状态图片
    config: [{
        x: 268,
        y: 230,
        width: 90,
        height: 100,
        url: require('@/assets/img/vent/gate-motor-up-off.png'),
    }, {
        x: 268,
        y: 230,
        width: 90,
        height: 100,
        url: require('@/assets/img/vent/gate-motor-up-on.png'),
    }],
    // 图片动画
    // 该属性只有图片在animateImages列表中有效
    anime: {
        type: 'rotate', //动画类型:直线偏移(目前只支持平移动画)
        duration: 3000, //偏移时间,默认3000毫秒
    },
    // 更具key的值,判断图片显示还是隐藏
    // 该属性只有图片在animateImages列表中有效
    isShow: false
}

switch attrs 开关

{
    name: 'Ⅰ回总开关', //名称,没有特殊用途只是一个标记
    key: 'ZYGY_HE_ZT1', //绑点
    x: 64, //x坐标
    y: 100, //y坐标
    textTop: '', //顶部描述文字 
    textMid: '1#', //中间描述文字
    textBottom: 'Ⅰ回总开关', //底部描述文字
    width: 40, //开关宽度
    height: 120, //开关高度
    fontSize: "12px", //字体大小
    fill: '#6B7DB8', //字体颜色
    letterSpacing: 'normal', //字间距
    cursor: 'pointer', //鼠标样式,默认default
    url: require('@/assets/img/power/switch_off.png'), //当前开关图片地址
    images: [{
        url: require('@/assets/img/power/switch_off.png')
    }, {
        url: require('@/assets/img/power/switch_on.png')
    }],
    type: 'LV', //开关类型 (LV: 低压开关, HV: 高压开关)
    clickable: true, //是否可以点击
    hover: true, //是否可以hover
    rotate: 90, //旋转角度
}

事件:

{
  events: {
    type: 'click', // ['click', 'hover']
    action: 'modal', // ['modal', 'poptip', 'topo', 'video', 'control']
    config: {
      // modal
      // poptip
      // topo
      // video
      // control
      
    }
  }
}

控制

hoverEnable  => evnet.type
clickEnable  => event.type

eventAction  => event.action

plusData     => event.plusData
topoId
modalConfig
control
videoAddr

control: {
  type: 0, //[0: , 1: ]
  pointId: '', // 单点控制的控制点id
  code: 1, // 单点控制的控制指令
  // 脉冲控制
  isPulse: true //是否为脉冲控制
  // 多点控制
  isMulti: true, // 是否为开关量切换控制
  run: '',  //启动点
  stop: '', //停止点
  runCode: 1, //启动指令
  stopCode: 1, //停止指令
}
1.2.3

4 years ago

1.2.2

4 years ago

1.2.1

4 years ago

1.1.6

4 years ago

1.1.5

4 years ago